首页 > 其他分享 >架构每日一学 2:架构师六个生存法则之一:架构必须有且仅有一个目标(一)

架构每日一学 2:架构师六个生存法则之一:架构必须有且仅有一个目标(一)

时间:2024-05-04 12:11:19浏览次数:37  
标签:一学 业务 系统 有且 目标 心力 开发者 架构

本文首发于公众号:腐烂的橘子

为什么有的架构活动没有正确的目标?

在每个架构活动启动之前,必须有且仅有一个正确的目标,这是架构设计的起点[1]。何为正确?正确就是要与公司的战略目标相匹配。否则系统会变得复杂和无序。

架构活动为什么需要目标?

看看下面的情形你是否遇到过:

  1. 公司一口气干了很多项目,喊着口号,上班时长也变长,作为普通程序员,只能加班加点干,不知道这个项目最终能产生多少价值
  2. 有的同学很积极主动,会一些与公司主流技术栈不同的语言,还未全面评估就引入当前系统中,由于其他人不懂这个语言,所以大部分工作由他负责,等他离职了这个项目就被慢慢弃用了
  3. 项目初期,有人认为某个系统不应该“过度设计”,应该保持“极简”,随着业务不断发展,业务复杂度也极速变高,只能在原有简单的系统上不断堆叠,老的代码也不敢修改,最终整个系统臃肿不堪

注意第 3 点不是宣传“过度设计”,设计的复杂度要结合项目本身和业务来综合评估。以上 3 点都是缺乏统一的目标造成的结果,缺乏目标会导致“心力”的流失。“心力”是企业力极其有限及宝贵的资源,一旦架构尝试失败,心力耗尽的同学可能会选择离开,加速企业心力的流失,所以企业也是经不起“内耗”的。

除此之外,没有目标的架构活动会导致整个系统复杂度增加,这是一个“增熵”的过程,维护的成本,开发的成本都会增加,进而浪费企业的研发资源。

所以,制定一个目标,且与公司的战略目标匹配,这是架构活动中首先必须要遵守的法则。

为什么会目标缺失?

我们可以从技术和业务两个维度分别讲述。

技术:缺少全局视角

技术上缺少全局视角,主要有三个方面:

第一个方面,是开发者对于技术强烈的好奇心。由开发者发起的项目容易产生这个问题,如果开发者对技术的追求更多而对项目价值的思考少,就会产生这个问题。比如团队里的几位专家发起了一个平台的建设项目,这个平台引进了新技术模块,且架构方案也比较新,大家一起干完之后,使用方表示并不好用,于是慢慢就弃用了。这种“技术自嗨”只是让其他开发者觉得“这个系统很牛”,但对于使用方来讲,可能体验并不好,也并不是他们理想中需要的系统。

第二个方面就不太光彩了,是开发者个人利益。这个个人利益为了完成某个 OKR、KPI,或者自己不愿意动旧代码,就重新写一个新系统,但最终发现可能还需要用到老系统,所以两个系统同时运行,增加维护成本。开发者的个人喜好、技术能力、和同事的关系,都有可能决定是否引入一个新系统。

第三个方面的原因就是信息沟通不畅。比如公司有一个中间件的平台,已经承接了其他部门的很多业务,比较成熟了,但是自己部门由于没有做充分调研,大搞架构设计,费了九牛二虎之力搭建一个新的平台,重复造了很多轮子。还有一种可能就是前面谈到的,总觉得这个平台不适合我们的业务,有点过度设计了,认为我没有这么复杂的场景,于是也重新写一个新的 MVP 版本从 0 开始。

事实上往往你的场景简单,是因为你的业务还没做起来,等两到三年后业务够到业界水平了,你发现当初平台的那些模块一样也没落下,只能再用专业版本来代替。

业务:目标太多不明确

业务上导致架构活动没有正确的目标往往是目标太多且不明确。比如,业务方很多情况下不知道这个需求能产生多少价值,往往会制定多个策略,做 AB test,最后选择业务效果好的模式。多个策略就会产生多个需求,甚至有时这些需求在架构设计中完全是相反的。结果就是开发觉得开发了半天业务也没用到,耗费了心力;系统中增加了新的复杂度,导致整个系统无序。这时就需要做架构治理,让系统重新回到结构化的状态。

总结

在架构活动中,我们必须有且仅有一个符合公司战略目标的目标,这样能保证系统的结构化,不至于“烂尾”,系统的复杂度也会合理,也能避免开发者的“心力”的流失。在架构设计前我们可以经常这样问自己:这个架构规划为什么能给企业带来生存优势?它有什么价值?通过这样的反复提供,在我们面对众多项目时,根据给企业带来生存优势这个角度,我们也能判断出哪些项目是值得分配精力去做的,哪些是不重要的甚至应该被“砍掉”的。

参考

  1. https://time.geekbang.org/column/article/463876

标签:一学,业务,系统,有且,目标,心力,开发者,架构
From: https://www.cnblogs.com/rottenorange-cn/p/18172163

相关文章

  • C# 搭建一个 基于ISqlSugarClient 三层架构框架 涉及数据库仓储 然后中间又有业务逻辑
    要在C#中搭建基于ISqlSugarClient的三层架构框架,你需要定义数据访问层(DAL)、业务逻辑层(BLL)和表现层(UI)。下面是一个完整的例子,涉及数据库仓储、业务逻辑层,以及依赖注入。这个例子基于ASP.NETCoreMVC构建,使用ISqlSugarClient来处理数据访问。这个例子中,我们将使用User作为一个简单......
  • 高并发缓存架构实战和优化
    参考资料:图灵课堂-https://vip.tulingxueyuan.cn 中小公司Redis缓存架构以及线上问题分析直接写入数据库,然后更新redis;正常低并发情况下,这种情况是暂时不会出现问题的,因为并发量并不高,不会出现各种各样的并发问题。大厂线上大规模商品缓存数据冷热分离实战使用缓存,主要是......
  • 底层架构
    一:角色分类(1)Coordinator协调器:协调器服务监视数据服务器上的历史服务。他们负责将区段分配给特定服务器,并确保区段在历史服务器之间保持良好的平衡。(2)Overlord:控制数据摄入任务的分配,Overlord服务监视数据服务器上的MiddleManager服务,并且是将数据摄取到Druid。他们负......
  • 架构每日一学 1:成为一名架构师,你必须具有“战略意图”
    本文首发于公众号:腐烂的橘子前言最近学习了《郭东白的架构课》,受益良多。作为一名普通程序员,有时候不禁想问公司里的架构师大牛是怎么成长的,为什么他可以是一名架构师,而我们只能在公司里写代码做需求?郭在文章中提出了很多超出以往认知的观点,让我重新审视了架构师这个职业。除......
  • 从0到10Wqps,大厂的智能客服平台,如何实现架构演进?
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......
  • Redis持久化、主从与哨兵架构详解
    参考图灵课堂https://zhuanlan.zhihu.com/p/443951927https://blog.csdn.net/weixin_37548768/article/details/124538778?spm=1001.2014.3001.5502https://www.runoob.com/redis/redis-transactions.html   redis支持持久化到磁盘,这样可用进一步保证数据的完整性。re......
  • Redis 高可用之主从架构与哨兵集群
    在redis实例宕机后,通过AOF和RDB可以恢复数据,这是高可用的一部分。但是在宕机期间,如何持续提供服务呢?这是高可用的另一部分。redis的方案是主从库模式,在主库宕机后,由从库提供服务。主从架构遵从单线程处理原则,从库只接受读请求,写请求都在主库执行,主库执行后再同步到从库中去。在......
  • 详解安卓架构入门
    准备首先进入安卓架构入门的代码仓库:AndroidArchitectureStarterTemplates:https://github.com/android/architecture-templates先看看介绍,简单分析一下:架构入门的模板UI界面非常简陋Navigation导航协程和FlowHilt依赖注入Hilt虚假数据进行UI测试提供了两个......
  • 分享一份物联网SAAS平台架构设计
    一、架构图****二、Nginx****用于做服务的反向代理。三、网关****PaaS平台所有服务统一入口,包含token鉴权功能。四、开放平台****对第三方平台开放的服务入口。五、MQTT****MQTT用于设备消息通信、内部服务消息通信。六、Netty****Socket通信设备连接服务。七......
  • openGauss MOT纵向扩容架构
    MOT纵向扩容架构纵向扩容即为同一台机器添加额外的核以增加算力。纵向扩容是传统上为单对控制器和多核的机器增加算力的常见形式。纵向扩容架构受限于控制器的可扩展性。技术要求MOT旨在实现以下目标:线性扩容:MOT提供事务性存储引擎,利用单个NUMA架构服务器的所有核,以提供近线......