今天我们来总结一下架构设计流程,谈到架构设计我们先了解一下架构设计的原则
架构设计原则
架构设计主要可以归纳为三大原则
- 合适原则
- 简单原则
- 演化原则
合适原则
没那么多人,却想干那么多活,是失败的第一个主要原因
没有那么多积累,却想一步登天,是失败的第二个主要原因
没有那么卓越的业务场景,却幻想灵光一闪成为天才,是失败的第三个主要原因
简单原则
“复杂”在制造领域代表先进,在建筑领域代表领先,但在软件领域,却恰恰相反,代表的是“问题”。
软件领域的复杂性体现在以下两个方面
结构的复杂性
结构复杂的系统几乎毫无例外地具备两个特点 : 组成复杂系统的组件数量更多,同时这些 组件之间的关系也更加复杂
结构上的复杂性存在的第一个问题是 : 组件越多,就越有可能其中某个组件出现故障,从 而导致系统故障
结构上的复杂性存在的第二个问题是:某个组件改动,会影响关联的所有组件,这些被影 响的组件同样会继续递归影响更多的组件
结构上的复杂性存在的第三个问题是 : 定位一个复杂系统中的问题总是比简单系统更加困 难。首先是组件多,每个组件都有嫌疑,因此要逐一排查:其次组件间的关系复杂,有可能表 现故障的组件并不是真正问题的根源
逻辑复杂性
看到结构复杂性后,我们的第一反应可能就是“降低组件数量”,毕竟组件数量越少,系统 结构越简单。最简单的结构当然就是整个系统只有一个组件,即系统本身,所有的功能和逻辑 都在这一个组件中实现。
不幸的是这样做是行不通的,原因在于除了结构复杂性,还有逻辑复杂性,即如果某个组 件的逻辑太复杂, 一样会带来各种问题
逻辑复杂 的组件一个典型特征就是单个组件承担了太多 的功能 。
功能复杂的组件另外一个典型特征就是采用了复杂的算法,复杂算法导致的 问题主要是难 以理解,进而导致难以实现、难以修改,井且出了问题难以快速解决
演化原则
“演化优于一步到位”。
如果没有把握“软件架构 需要根据业务发展不断变化”这个本质,在做架构设计的时候就 很容易陷入一个误区:试图一步到位地设计一个软件架构,期望不营业务如何变化, 架构都稳 如磐石 !
为了实现这样的目标,要么照搬业界大公司公开发表的方案;要么投入庞大的资源和时间 来做各种各样的预测、分析、设计。无论哪种做法,后果都很明显:投入巨大,落地遥遥无期 ! 更让人沮丧的是,就算跌跌撞撞拼死拼活终于落地,却发现很多预测和分析都是不靠谱的
软件架构设计的过程:
- 首先,设计出来的架构要满足当时的业务需要。
- 其次,架构要不断地在实际应用过程中迭代,保留优秀的设计,修复有缺陷的设计,改 正错误的设计,去掉无用的设计,使得架构逐渐完善。
- 最后,当业务发生变化时,架构要扩展、重构、甚至重写 :代码也许会重写,但有价值 的经验、教训 、逻辑、设计等却可以在新架构中延续
复杂度来源
架构设计的本质目的是为了解决软件系统的复杂性,所以在我们设计架构时,首先就要分 析系统的复杂性 。 只有正确分析出了系统的复杂性,后续的架构设计方案才不会偏离方向
高性能
软件系统中高性能带来的复杂度主要体现在两方面, 一方面是单台计算机内部为了高性能 带来的复杂度:另一方面是多台计算机集群为了高性能带来的复杂度。
高可用
高可用指“系统无中断地执行其功能”的能力,代表系统的可用性程度,是进行系统设计时的准则之一
系统的高可用方案五花八门,但万变不离其宗 , 本质上都是通过“冗余”来实现高可用 通过冗余增强了可用性,但同时也带来了复杂性
可扩展性
设计具备良好可扩展性的系统,有两个基本条件:正确预测变化、完美封装变化。但要达 成这两个条件,本身也是一件复杂的事情
成本
当我们的架构方案只涉及几台或十几台服务器时, 一般情况下成本并不是我们重点关注的 目标,但如果架构方案涉及几百上千甚至上万台服务器,成本就会变成一个非常重要的架构设计考虑点
安全
安全本身是一个庞大而又复杂的技术领域,并且一旦出问题,对业务和企业形象影响非常大
从技术的角度来讲,安全可以分为两类: 一类是功能上的安全,另一类是架构上的安全。
规模
规模带来复杂度的主要原因就是“ 量变引起质变”,当数量超过一定的阔值后,复杂度会发 生质的变化。常见的规模带来的复杂度如下
- 功能越来越多,导致系统复杂度指数级上升
- 数据越来越多,系统复杂度发生质变
架构的复杂度主要来源于“高性能”“高可用”“可扩展”等几个方面, 实际上绝大部分场景下,复杂度只是其中的某一个,少数情况下包含其中两个
设计备选方案
确定了系统面临的主要复杂度问题后,方案设计就有了明确的目标,我们就可以开始真正 进行架构方案设计了
虽说基于已有的技术或架构模式进行组合,然后调整,大部分情况下就能够得到我们需要 的方案,但并不意味着架构设计是一件很简单的事情。因为可选的模式有很多,组合的方案更 多,往往一个问题的解决方案有很多个:如果在组合的方案上进行一些创新,那么解决方案会更多
第一种常见的错误 : 设计最优秀的方案!
现实世界中,往往不存在最优秀的方案,各个方案之间各有特点,根据实际情况进行选择才是关键
第二种常见的错误:只做一个方案!
个人认为的最佳方案可能在认识上存在偏差,设计几个备选方案通过多维度的评估,才能选出最合适的
方案的选择方式
列出我们 需要关注的质量属性点 , 然后分别从这些质量属性的维度去评估每个方案,再综合挑选适合当时情况的最优方案
常见的方案质量属性点有:
性能、可用性、硬件成本、项目投入、复杂度、安全性、可扩展性等。
在评估这些质量属性时,需要遵循架构设计原则和各个方案的特点与我们实际业务的需求决定
参考资料
<亿级流量网站架构核心技术> <从零开始学架构> <大型网站技术架构>
架构系列合辑
来源:oschina
链接:https://my.oschina.net/jayqqaa12/blog/3161734