Skip to content

6.1 复杂性管理

从复杂和混乱的信息中找到重点才能定义出元素以及找到关系。架构是一个非常玄学的领域,它不像编写一个确定的中间件一样,有明确的输入条件和输出。架构充满了权衡、取舍和纠结,其原因就在于复杂性问题。复杂的信息越多,系统熵越多,没有能量输入时,系统逐步趋向复杂、无序状态。

《人月神话》里面提到两个概念:本质复杂度和偶然复杂度。本质复杂度是在解决问题时,无法避免的事;偶然复杂度是做事方法不对,人为引入的复杂性。

架构师就是与复杂性对抗的人。

本质复杂度无法避免,而导致偶然复杂度上升的原因有:

  • 沟通节点增多,软件项目中,人越多,信息节点越多,偶然复杂度越多。
  • 信息噪音过多,就像信息论描述的那样,当噪音太大真实的声音就被掩盖了。

我们必须能找到办法对抗复杂,我们能用到的工具有:

  • 获得信息"地图",通过模型过滤掉多余的信息。
  • 分而治之,将复杂度隔离到局部,让局部的复杂性减弱,将复杂性进行分层。
  • 统一语言,降低沟通的熵。

图是复杂信息的索引

在架构设计中,过滤掉多余信息的方法就是做 PPT 或者画图。

PPT 的真正作用是复杂性管理,这也是微软幻灯片软件 PowerPoint 的寓意来源。据说 Gaskins 在给 PowerPoint 起名字时,最初在洗澡时迸发的灵感,想到的名字中包含了这个词。而且在不知情的情况下他的同事 Glenn Hobin 在机场的海报中,一眼看到了 PowerPoint 这个被强调的词。

为什么幻灯片做得好的人升职越快,而且比一线干活儿的人升的更快。因此有时候一线开发人员愤愤不平,为什么做幻灯片不写代码就能获得高薪。实际上做 "PPT 工程师并不轻松",靠的是对问题深刻的理解、信息的分析、有效的呈现等多种能力。

一套架构用的汇报材料,可能就是某个复杂系统一份极好索引。全景是什么、边界在哪里、骨干的业务逻辑是什么,都需要体现在幻灯片中。

所以做好幻灯片的前提是深刻吃透业务、产品、技术方案,而且还需要具备非常强的表现能力,把方案清晰地表现出来。幻灯片图表并非只是展示,更像是一个索引来描述复杂的系统。

优秀的架构师、咨询师都能做出好的幻灯片,有时候甚至幻灯片就是一种很好的概念模型,这样想就应该能把幻灯片重视起来。没有好的思维结构,就做不出幻灯片,想到的不一定能表达出来,所以幻灯片做的好的人具有特别强的思维能力。

简化和克制的图才是真正有用的图,因为保留的有效信息更为突出,将庞大无比的系统简化到几张 A4 能够被打印出来的纸时,它的复杂性才能真正被驾驭。

分而治之

分而治之不能降低复杂性,只能隔离复杂性。而分而治之可以通过不同的维度来进行,主要分解的方向有三个:

  • 水平分解。对系统进行分层,下层对上层透明,上层的开发者无需关心下层的变化。
  • 垂直分解。对系统进行按模块(上下文)切割,上下文之间不需要关心彼此,只在有互相依赖的情况下了解对方。
  • 按时间分解。对系统的实现很分步骤完成,根据迭代演进,制定产品、架构路线图(RoadMap)。

架构维度

注意区分广为流传的 AFK 拓展立方体,AFK 拓展立方体更像是对系统容量的分解,而不是对复杂度的拆解。

对于上面的图片来说每一个版本我们可能都会进行垂直、水平分解得到一张平面的架构图,在持续演进的状态下不断更新。

这就印证了我们前面说的架构的过程是一切决策之和。架构决策的影响有时候远远被我们低估,有时候我们的决策是基于上一次决策之后的结果做出的,而不是最初的问题,这就让架构问题变得更加复杂。

由于架构设计不是一次性做出来的,水平分解、垂直分解不能体现真正的复杂性,往往问题的复杂性来源于架构决策的前后因果。

Released under the MIT License.