Soft skills are always hard than hard skills. 软技能比硬技能难。后端
老板据说最近流行“微服务”,问架构师我们的系统要不要来一套?老板又据说最近流行“中台系统”,问架构师我们要不要搞起来?其实,这些问题不用老板问,关注技术发展趋势的架构师每当听到新的技术或解决方案,都会暗中思忖是否应用到系统中。然而,用或不用,总不能凭感受吧。此时,若是你能灵活运用康威定律,那么作出的判断将更加完美。架构
康威定律是马尔文·康威1967提出的:“设计系统的架构受制于产生这些设计的组织的沟通结构。”通俗的来说:产品必然是其(人员)组织沟通结构的缩影。前后端分离
跨部门沟通是很是难的,系统各个模块的接口也反映了它们之间的信息流动和合做方式。运维
康威定律可谓软件架构设计中的第必定律,起初只是在杂志上的发表,后通过《人月神话》这本软件界圣经的引用,并命名为康威定律(Conway’s law),所以得以推广。分布式
只经过简单的描述可能没法理解康威定律的精髓所在,原文中康威定律可总结为四个定律:微服务
Communication dictates design。
组织沟通方式决定系统设计。测试
这条定律重点是讲组织架构和沟通对系统设计的影响。组织的沟通和系统的设计之间紧密相连,特别是复杂系统,解决好人与人的沟通才能有一个更好的系统设计。架构设计
《人月神话》中总结出了随着人员的增长沟通成本呈指数增加的规律:沟通成本 = n(n-1)/2。举例说明一下:设计
这也是为何互联网公司都追求小团队的缘由之一。沟通的问题会带来系统设计的问题,进而影响整个系统的开发效率和最终产品结果。blog
There is never enough time to do something right, but there is always enough time to do it over。
时间再多一件事情也不可能作的完美,但总有时间作完一件事情。
人手永远是不够的,事情永远是作不完的,但能够一件一件来。这不就是软件行业中“敏捷开发”模式所解决的问题吗。面对这样的情况,敏捷开发能够作到不断迭代、持续交付、快速验证和反馈,并持续改进。
再牛的开发也会写出bug,再全面的测试覆盖率也没法测出全部的问题。解决方案不是消灭这些问题,是容忍一些问题的存在,而后经过适当的设计(冗余、监控、高可用设计)当问题发生时可以快速解决。
几个开发人员的小公司,去追求微服务、去追求中台架构,这是追求完美吗?不是,是找死。
好的架构不是买来的,也不是设计出来的,而是根据业务落地生根长期演化来的。
There is a homomorphism from the linear graph of a system to the linear graph of its design organization。
线型系统和线型组织架构间有潜在的异质同态特性。
这必定律是第必定律的具体应用。想象一下若是公司的组织架构是这样的:团队是分布式,每一个团队都包含产品、研发、测试、运维等角色。而此时系统是单块的,项目沟通和协调的成本是巨大的,弄很差还会打起来。
若是将单块的系统拆分红微服务,每一个团队负责本身的部分,对外提供对应的接口便可,互不干扰。系统效率将获得提高。这与软件设计中的高内聚、低耦合是相通的。
直白的说就是想要什么的系统就搭建什么样的团队,有什么样的团队就搭建什么样的系统。须要先后端分离的系统就搭建先后端分离的团队,反之,拥有先后端分离的团队,能够设计先后端分离的系统。固然,若是能统筹管理,拥有重组团队或设计系统架构的权利,那就再好不过了。一般状况下让二者造成1:1的映射关系,更加高效。
The structures of large systems tend to disintegrate during development, qualitatively more so than with small systems。
大的系统组织老是比小系统更倾向于分解。
“话说天下大势,分久必合,合久必分。”系统越复杂,越须要增长人手,人手越多,沟通成本也呈指数增加。分而治之即是大多数公司选择的解决方案。分不一样的层级,分不一样的小团队,让团队内部完成自治理,而后统一对外沟通。
架构不只仅须要技术,在大公司尤为须要政治,所谓的架构的政治。
杨波老师曾在他的文章《每一个架构师都应该研究下康威定律》中提到:“政治指的是和他人协做将事情搞定的艺术,架构是一种社交活动,在技术的世界里,我的主义很容易被战胜,即便你的目的是好的技术是最优的,技术决策是政治决策(technical decisions are political decisions),一个技术产品,一波人能够作,另外一波人也能够作,到底谁作的好,真很差说,无论谁作,都给业务套上了一副手铐。”
原文连接:《康威定律,做为架构师还不会灵活运用?》