康威定律
康威定律是半个多世纪前就奠定微服务架构的理论基础。
我们来看看康威定律的核心观点:
“organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations.”
翻译过来就是:系统设计的结构必定复制设计该系统的组织的沟通结构。
想要搭建怎样的系统,就选择怎样的组织架构。
如果你想要的是一个微服务,那么就把大功能拆分开,把多个人组队成一个最小的执行单位。
从而达到小团队的子系统内聚,对外系统边界明确。
这样能够有效降低沟通成本,团队设计的系统也会合理高效。
而大型系统的持续优化,必须是容错和弹性的。
什么是容错和弹性,就是正式发生问题的可能性,并且能够容忍发生的问题。
不要指望一个大而全的系统。都要以合理的方式持续迭代。
如果把一个系统的设计、开发、集成、优化看做一个生态系统的话,生态系统追求的是平衡。
这也是为什么当我们把系统的开发、优化过程中精炼到了一定程度,所多出来的复杂度会慢慢偏向于运维和集成的部分。
从实践经验的角度来看,为了让设计高效,首要保证系统设计者之间的沟通高效。
沟通
人月神话中,对于沟通成本有一个公式:
沟通成本 = n(n-1)/2
即沟通成本随着人员的增加而指数级增长。所以我们可以说,对于一个团队项目的算法复杂度是 O(n^2)。
- 5个人的项目组,需要沟通的渠道是 5*(5–1)/2 = 10
- 15个人的项目组,需要沟通的渠道是15*(15–1)/2 = 105
- 50个人的项目组,需要沟通的渠道是50*(50–1)/2 = 1,225
- 150个人的项目组,需要沟通的渠道是150*(150–1)/2 = 11,175
从生物学的角度讲,我们的大脑只能维持我们一定数据量范围内的人际关系交流。
超出范围,会带来一系列的沟通问题。
人是复杂的社会动物(是因为我们自己看自己,所以觉得复杂,要是有高阶的生命可能还是会觉得我们是蝼蚁),
一般来说,一个大公司的组织管理问题,会被拆分为多个组织加以解决。
微服务
在了解了康威定律后,我们来看看他和微服务的异曲同工之处。
- 分布式服务组成一个系统
- 按照业务划分服务,而不是技术
- 自动化运维
- 容错
- 弹性优化