Soft skills are always hard than hard skills. 软技能比硬技能难 。老板听说最近流行“微服务”,问架构师咱们的系统要不要来一套?老板又听说最近流行“中台系统”,问架构师咱们要不要搞起来?其实,这些问题不用老板问,关注技术发展趋势的架构师每当听到新的技术或解决方案,都会暗中思忖是否应用到系统中 。然而,用或不用,总不能凭感觉吧 。此时,如果你能灵活运用康威定律,那么做出的判断将更加完美 。
康威定律
康威定律是马尔文·康威1967提出的:“设计系统的架构受制于产生这些设计的组织的沟通结构 。”通俗的来讲:产品必然是其(人员)组织沟通结构的缩影 。
跨部门沟通是非常难的,系统各个模块的接口也反映了它们之间的信息流动和合作方式 。
文章插图
康威定律可谓软件架构设计中的第一定律,起初只是在杂志上的发表,后经过《人月神话》这本软件界圣经的引用,并命名为康威定律(Conway’s law),因此得以推广 。
只通过简单的描述可能无法理解康威定律的精髓所在,原文中康威定律可总结为四个定律:
- 第一定律 组织沟通方式会通过系统设计表达出来 。
- 第二定律 时间再多一件事情也不可能做的完美,但总有时间做完一件事情 。
- 第三定律 线型系统和线型组织架构间有潜在的异质同态特性 。
- 第四定律 大的系统组织总是比小系统更倾向于分解 。
Communication dictates design 。这条定律重点是讲组织架构和沟通对系统设计的影响 。组织的沟通和系统的设计之间紧密相连,特别是复杂系统,解决好人与人的沟通才能有一个更好的系统设计 。
组织沟通方式决定系统设计 。
《人月神话》中总结出了随着人员的增加沟通成本呈指数增长的规律:沟通成本 = n(n-1)/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
第二定律
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的映射关系,更加高效 。
推荐阅读
- 制茶大师博物馆开讲
- 医保卡里面是不是每个月有300块可以花,看病花三百块社保卡能报销么
- 茶老师的自我修养
- 茶老师吴语大梅禅茶桃然云水
- 茶老师吴瑜如元朱
- 男生脸颊长毛怎么去除
- 听诊器的发明者雷奈克医生是哪国人 听诊器是法国医师什么于什么年发明的
- 茶艺师 绝不是简单的端茶送水
- 师父|“中国钓王”的疯狂人生
- 淘宝新店怎么做起来? 淘宝新店如何做起来