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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

标签:
  • 热门焦点
  • 石头智能洗地机A10 Plus体验:双向自清洁治好了我的懒癌

    一、前言和介绍专为家庭请假懒人而生的石头科技在近日又带来了自己的全新旗舰新品,石头智能洗地机A10 Plus。从这个产品名上就不难看出,这次石头推出的并不是常见的扫地机器
  • Raft算法:保障分布式系统共识的稳健之道

    1. 什么是Raft算法?Raft 是英文”Reliable、Replicated、Redundant、And Fault-Tolerant”(“可靠、可复制、可冗余、可容错”)的首字母缩写。Raft算法是一种用于在分布式系统
  • 之家push系统迭代之路

    前言在这个信息爆炸的互联网时代,能够及时准确获取信息是当今社会要解决的关键问题之一。随着之家用户体量和内容规模的不断增大,传统的靠"主动拉"获取信息的方式已不能满足用
  • 如何使用JavaScript创建一只图像放大镜?

    译者 | 布加迪审校 | 重楼如果您曾经浏览过购物网站,可能遇到过图像放大功能。它可以让您放大图像的特定区域,以便浏览。结合这个小小的重要功能可以大大改善您网站的用户体验
  • 虚拟键盘 API 的妙用

    你是否在遇到过这样的问题:移动设备上有一个固定元素,当激活虚拟键盘时,该元素被隐藏在了键盘下方?多年来,这一直是 Web 上的默认行为,在本文中,我们将探讨这个问题、为什么会发生
  • JVM优化:实战OutOfMemoryError异常

    一、Java堆溢出堆内存中主要存放对象、数组等,只要不断地创建这些对象,并且保证 GC Roots 到对象之间有可达路径来避免垃 圾收集回收机制清除这些对象,当这些对象所占空间超过
  • 小米公益基金会捐赠2500万元驰援北京、河北暴雨救灾

    8月2日消息,今日小米科技创始人雷军在其微博上发布消息称,小米公益基金会宣布捐赠2500万元驰援北京、河北暴雨救灾。携手抗灾,京冀安康!以下为公告原文
  • 2299元起!iQOO Pad明晚首销:性能最强天玑平板

    5月23日,iQOO如期举行了新品发布会,除了首发安卓最强旗舰处理器的iQOO Neo8系列新机外,还在发布会上推出了旗下首款平板电脑——iQOO Pad,其最大的卖点
  • OPPO K11评测:旗舰级IMX890加持 2000元档最强影像手机

    【Techweb评测】中端机型用户群体巨大,占了中国目前手机市场的大头,一直以来都是各手机品牌的“必争之地”,其中OPPO K系列机型一直以来都以高品质、
Top