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

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

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

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

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

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

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

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

结构复杂的系统通常具备两个特点:一是组成系统的组件数量众多;二是这些组件之间的关系极为复杂。NF628资讯网——每日最新资讯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%。NF628资讯网——每日最新资讯28at.com

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

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

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

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

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

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • 卢伟冰长文解析K60至尊版 对Redmi有着里程碑式的意义

    卢伟冰长文解析K60至尊版 对Redmi有着里程碑式的意义

    在今天的Redmi后性能时代战略发布会结束之后,Redmi总经理卢伟冰又带来了一篇长文,详解了为什么 Redmi 要开启后性能时代?为什么选择和 MediaTek、Pixelworks 深度合作?以及后性
  • 直屏旗舰来了 iQOO 12和K70 Pro同台竞技

    直屏旗舰来了 iQOO 12和K70 Pro同台竞技

    旗舰机基本上使用的都是双曲面屏幕,这就让很多喜欢直屏的爱好者在苦等一款直屏旗舰,这次,你们等到了。据博主数码闲聊站带来的最新爆料称,Redmi下代旗舰K70 Pro和iQOO 12两款手
  • 影音体验是真的强 简单聊聊iQOO Pad

    影音体验是真的强 简单聊聊iQOO Pad

    大公司的好处就是产品线丰富,非常细分化的东西也能给你做出来,例如早先我们看到了新的vivo Pad2,之后我们又在iQOO Neo8 Pro的发布会上看到了iQOO的首款平板产品iQOO Pad。虽
  • 5月安卓手机好评榜:魅族20 Pro夺冠

    5月安卓手机好评榜:魅族20 Pro夺冠

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年5月1日至5月31日,仅限国内市场。第一名:魅族20 Pro好评率:97.50%不得不感慨魅族老品牌还
  • 消息称迪士尼要拍真人版《魔发奇缘》:女主可能也找黑人演员

    消息称迪士尼要拍真人版《魔发奇缘》:女主可能也找黑人演员

    8月5日消息,迪士尼确实有点忙,忙着将不少动画改成真人版,继《美人鱼》后,真人版《白雪公主》、《魔发奇缘》也在路上了。据外媒消息称,迪士尼将打造真人版
  • Rust中的高吞吐量流处理

    Rust中的高吞吐量流处理

    作者 | Noz编译 | 王瑞平本篇文章主要介绍了Rust中流处理的概念、方法和优化。作者不仅介绍了流处理的基本概念以及Rust中常用的流处理库,还使用这些库实现了一个流处理程序
  • JavaScript学习 -AES加密算法

    JavaScript学习 -AES加密算法

    引言在当今数字化时代,前端应用程序扮演着重要角色,用户的敏感数据经常在前端进行加密和解密操作。然而,这样的操作在网络传输和存储中可能会受到恶意攻击的威胁。为了确保数据
  • Python异步IO编程的进程/线程通信实现

    Python异步IO编程的进程/线程通信实现

    这篇文章再讲3种方式,同时讲4中进程间通信的方式一、 Python 中线程间通信的实现方式共享变量共享变量是多个线程可以共同访问的变量。在Python中,可以使用threading模块中的L
  • “买真退假” 这种“羊毛”不能薅

    “买真退假” 这种“羊毛”不能薅

    □ 法治日报 记者 王春   □ 本报通讯员 胡佳丽  2020年初,还在上大学的小东加入了一个大学生兼职QQ群。群主“七王”在群里介绍一些刷单赚
Top