微服务这个概念很早就提出了, 真正火起来是在2016年左右,而康威定律(Conway's Law)就是微服务理论基础。
1、康威定律如何在半个世纪前就奠定了微服务架构的理论基础。
(1)人与人的沟通是非常复杂的,一个人的沟通精力是有限的,所以当问题太复杂需要很多人解决的时候,我们需要做拆分组织来打成对沟通效率的管理
(2)组织内人与人的沟通方式决定了他们参与的系统设计,管理者可以通过不同的拆分方式带来不同的团队间沟通方式,从而影响系统设计
(3)如果子系统是内聚的,和外部的沟通边界是明确的,能降低沟通成本,对应的设计也会更加高效。
(4)复杂得系统需要通过容错弹性的方式持续优化,不要指望一个大而全的设计或架构,好的架构和设计都是慢慢迭代出来的
2、具体的实践建议
(1) 我们要用一切手段提升沟通效率,比如slack,github,wiki。能2个人讲清楚的事情,就不要拉更多人,每个人每个系统都有明确的分工,出了问题知道马上找谁,避免踢皮球的问题。
(2) 通过MVP的方式来设计系统,通过不断的迭代来验证优化,系统应该是弹性设计的。
(3) 你想要什么样的系统设计,就架构什么样的团队,能扁平化就扁平化。最好按业务来划分团队,这样能让团队自然的自治内聚,明确的业务边界会减少和外部的沟通成本,每个小团队都对自己的模块的整个生命周期负责,没有边界不清,没有无效的扯皮,inter-operate, not integrate。
(4) 做小而美的团队,人多会带来沟通的成本,让效率下降。亚马逊的Bezos有个逗趣的比喻,如果2个披萨不够一个团队吃的,那么这个团队就太大了。事实上一般一个互联网公司小产品的团队差不多就是7,8人左右(包含前后端测试交互用研等,可能身兼数职)。
3、 再对应下衡量微服务的标准,我们很容易会发现他们之间的密切关系
- 分布式服务组成的系统
- 按照业务而不是技术来划分组织
- 做有声明的产品而不是项目
- Smart endpoints and dumb pipes(我的理解是强服务个体和弱通信)
- 自动化运维
- 容错
- 快速演化
总结
- 定律一: 组织沟通方式会通过系统设计表达出来,就是说架构的布局和组织结构会有相似。
- 定律二: 时间再多一件事情也不可能做的完美,但总有时间做完一件事情。一口气吃不成胖子,先搞定能搞定的。
- 定律三: 线型系统和线型组织架构间有潜在的异质同态特性。种瓜得瓜,做独立自治的子系统减少沟通成本。
- 定律四: 大的系统组织总是比小系统更倾向于分解。合久必分,分而治之。
如若转载,请注明出处:开源字节 https://sourcebyte.cn/article/182.html