当前位置:首页 > 科技  > 软件

架构设计的简单原则,你学会了吗?

来源: 责编: 时间:2024-09-10 09:47:06 190观看
导读简单原则宣言是:“简单优于复杂”。图片由于软件架构与建筑架构在表面上存在相似性,我们往往会下意识地将对建筑的审美观念迁移至软件架构之上。对于我们亲自构建的软件架构,我们期望它如著名建筑一般宏伟、精美、富有艺

简单原则宣言是:“简单优于复杂”。23v28资讯网——每日最新资讯28at.com

图片图片23v28资讯网——每日最新资讯28at.com

由于软件架构与建筑架构在表面上存在相似性,我们往往会下意识地将对建筑的审美观念迁移至软件架构之上。对于我们亲自构建的软件架构,我们期望它如著名建筑一般宏伟、精美、富有艺术感且豪华…… 总之,绝不能显得寒酸或简单。23v28资讯网——每日最新资讯28at.com

团队压力有时也会在有意无意间促使我们走向复杂的方向。因为在大多数人评价一个方案水平高低时,复杂性是一项重要的参考指标。例如,设计一个主备方案,若采用心跳机制来实现,或许大家会觉得这太过简单。然而,若引入 ZooKeeper 来做主备决策,很多人可能会认为这个方案更加 “高大上”。毕竟 ZooKeeper 运用的是 ZAB 协议,而 ZAB 协议本身就十分复杂。实际上,真正理解 ZAB 协议的人少之又少,但这并不妨碍我们都知晓 ZAB 协议很优秀。23v28资讯网——每日最新资讯28at.com

软件领域的复杂性体现在两个方面

结构复杂的系统通常具备两个特点:一是组成系统的组件数量众多;二是这些组件之间的关系极为复杂。23v28资讯网——每日最新资讯28at.com

然而,结构上的复杂性存在第一个问题。组件越多,其中某个组件出现故障进而导致系统故障的可能性就越大。这个概率是可以计算出来的,假设组件的故障率为 10%(即有 10% 的时间不可用),那么由 3 个组件组成的系统可用性为(1 - 10%)×(1 - 10%)×(1 - 10%)=72.9%,而由 5 个组件组成的系统可用性为(1 - 10%)×(1 - 10%)×(1 - 10%)×(1 - 10%)×(1 - 10%)=59%,两者的可用性相差 13%。23v28资讯网——每日最新资讯28at.com

结构上的复杂性存在第二个问题。某个组件的改动会影响与之关联的所有组件,而这些被影响的组件又会继续递归地影响更多的组件。这一问题会影响整个系统的开发效率,因为一旦变更涉及外部系统,就需要协调各方共同进行方案评估、资源协调以及上线配合。23v28资讯网——每日最新资讯28at.com

结构上的复杂性存在第三个问题。在复杂系统中定位问题总是比在简单系统中更加困难。首先,由于组件众多,每个组件都有出现问题的嫌疑,所以需要逐一排查;其次,组件间关系复杂,表现出故障的组件未必是真正问题的根源。23v28资讯网——每日最新资讯28at.com

第二个方面体现在逻辑的复杂性

当我们意识到结构的复杂性后,第一反应或许是 “降低组件数量”,毕竟组件数量越少,系统结构就越简单。而最简单的结构无疑是整个系统仅有一个组件,即系统本身,所有功能和逻辑都在这一个组件中实现。23v28资讯网——每日最新资讯28at.com

然而,不幸的是,这样做并不可行。原因在于除了结构的复杂性之外,还存在逻辑的复杂性。如果某个组件的逻辑过于复杂,同样会带来各种问题。23v28资讯网——每日最新资讯28at.com

逻辑复杂的组件,有一个典型特征就是单个组件承担了过多的功能。以电商业务为例,常见的功能包括商品管理、商品搜索、商品展示、订单管理、用户管理、支付、发货、客服等。如果把这些功能全部在一个组件中实现,那就是典型的逻辑复杂性。23v28资讯网——每日最新资讯28at.com

假设现在淘宝将这些功能全部在单一的组件中实现,我们可以想象一下这个恐怖的场景:系统会非常庞大,可能有上百万、上千万的代码规模,“clone” 一次代码要 30 分钟。几十、上百人维护这一套代码,某个 “菜鸟” 不小心改了一行代码,就可能导致整站崩溃。需求如雪片般飞来,为了应对,会开几十个代码分支,然后各种分支合并、各种分支覆盖。产品、研发、测试、项目管理不停地开会讨论版本计划,协调资源,解决冲突。版本太多,每天都要上线几十个版本,系统每隔 1 个小时就要重启一次。线上运行出现故障,几十个人扑上去定位和处理,一间小黑屋都装不下所有人,整个办公区都会闹翻天。23v28资讯网——每日最新资讯28at.com

总之,谁都无法忍受这样的场景。功能复杂的组件,另一个典型特征就是采用了复杂的算法。复杂算法导致的问题主要是难以理解,进而难以实现、难以修改,并且出了问题难以快速解决。23v28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-112723-0.html架构设计的简单原则,你学会了吗?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 盘点分页查询中遇到的坑!

下一篇: Go1.23 新特性:争议最大的 iter 迭代器,可遍历万物!

标签:
  • 热门焦点
  • 鸿蒙OS 4.0公测机型公布:甚至连nova6都支持

    华为全新的HarmonyOS 4.0操作系统将于今天下午正式登场,官方在发布会之前也已经正式给出了可升级的机型产品,这意味着这些机型会率先支持升级享用。这次的HarmonyOS 4.0支持
  • 7月安卓手机性价比榜:努比亚+红魔两款新机入榜

    7月登场的新机有努比亚Z50S Pro和红魔8S Pro,除了三星之外目前唯二的两款搭载超频版骁龙8Gen2处理器的产品,而且努比亚和红魔也一贯有着不错的性价比,所以在本次的性价比榜单
  • K6:面向开发人员的现代负载测试工具

    K6 是一个开源负载测试工具,可以轻松编写、运行和分析性能测试。它建立在 Go 和 JavaScript 之上,它被设计为功能强大、可扩展且易于使用。k6 可用于测试各种应用程序,包括 Web
  • 得物效率前端微应用推进过程与思考

    一、背景效率工程随着业务的发展,组织规模的扩大,越来越多的企业开始意识到协作效率对于企业团队的重要性,甚至是决定其在某个行业竞争中突围的关键,是企业长久生存的根本。得物
  • 十个简单但很有用的Python装饰器

    装饰器(Decorators)是Python中一种强大而灵活的功能,用于修改或增强函数或类的行为。装饰器本质上是一个函数,它接受另一个函数或类作为参数,并返回一个新的函数或类。它们通常用
  • JavaScript学习 -AES加密算法

    引言在当今数字化时代,前端应用程序扮演着重要角色,用户的敏感数据经常在前端进行加密和解密操作。然而,这样的操作在网络传输和存储中可能会受到恶意攻击的威胁。为了确保数据
  • 东方甄选单飞:有些鸟注定是关不住的

    作者:彭宽鸿来源:华尔街科技眼‍‍‍‍‍‍‍‍‍‍东方甄选创始人俞敏洪带队的“7天甘肃行”直播活动已在近日顺利收官。成立后一
  • OPPO、vivo、小米等国内厂商Q2在印度智能手机市场份额依旧高达55%

    7月20日消息,据外媒报道,研究机构的报告显示,在全球智能手机出货量同比仍在下滑的大背景下,印度这一有潜力的市场也未能幸免,出货量同比也有下滑,多家厂
  • iQOO Neo8 Pro抢先上架:首发天玑9200+ 安卓性能之王

    经过了一段时间的密集爆料,昨日iQOO官方如期对外宣布:将于5月23日推出全新的iQOO Neo8系列新品,官方称这是一款拥有旗舰级性能调校的作品。随着发布时
Top