2018-04-23

康威定律。

几天讨论了一下如何拆分微服务,拆分粒度?

按照单一职责原则和康威定律,在业务域、团队还有技术上平衡粒度。

延伸讨论了  什么是康威定律


康威定律

第一定律

        Communication dictates design

        组织沟通方式会通过系统设计表达出来

沟通成本  = n(n-1)/2

0人====>0

1人====>0

2人====>1

3人====>3

4人====>6

5人====>10

6人====>15

7人====>21

8人====>28

9人====>36

Mike还举了一个非常有意思的理论,叫“Dunbar Number”,这是一个叫Dunbar(废话)生物学家在1992年最早提出来的。最初,他发现灵长类的大脑容量和其对应的族群大小有一定关联,进而推断出人类的大脑能维系的关系的一些有趣估计。举例来说

亲密(intimate)朋友: 5

信任(trusted)朋友: 15

酒肉(close)朋友: 35

照面(casual)朋友: 150

    第二定律

        There is never enough time to do something right, but there is always enough time to do it over

        时间再多一件事情也不可能做的完美,但总有时间做完一件事情

Eric认为做到安全有两种方式:

    常规的安全指的是尽可能多的发现并消除错误的部分,达到绝对安全,这是理想。

    另一种则是弹性安全,即使发生错误,只要及时恢复,也能正常工作,这是现实。

对于一个分布式系统,我们几乎永远不可能找到并修复所有的bug,单元测试覆盖1000%也没有用,错误流淌在分布式系统的血液里。解决方法不是消灭这些问题,而是容忍这些问题,在问题发生时,能自动回复,微服务组成的系统,每一个微服务都可能挂掉,这是常态,我们只有有足够的冗余和备份即可。即所谓的 弹性设计(Resilience) 或者叫高可用设计(High Availability)。

种瓜得瓜,做独立自治的字系统减少沟通成本

    第三定律

        There is a homomorphism from the linear graph of a system to the linear graph of its design organization

        线型系统和线型组织架构间有潜在的异质同态特性

微服务的理念团队间应该是 inter-operate, not integrate 。inter-operate是定义好系统的边界和接口,在一个团队内全栈,让团队自治,原因就是因为如果团队按照这样的方式组建,将沟通的成本维持在系统内部,每个子系统就会更加内聚,彼此的依赖耦合能变弱,跨系统的沟通成本也就能降低。

    第四定律

        The structures of large systems tend to disintegrate during development, qualitatively more so than with small systems

        大的系统组织总是比小系统更倾向于分解

所以,一个大的组织因为沟通成本/管理问题,总为被拆分成一个个小团队。

    创业的想法太好了,反正风投钱多,多招点程序猿

    人多管不过来啊,找几个经理帮我管,我管经理

    最后, 康威定律 告诉我们组织沟通的方式会在系统设计上有所表达,每个经理都被赋予一定的职责去做大系统的某一小部分,他们和大系统便有了沟通的边界,所以大的系统也会因此被拆分成一个个小团队负责的小系统(微服务是一种好的模式)

带来的具体的实践建议是:

    我们要用一切手段提升沟通效率,比如slack,github,wiki。能2个人讲清楚的事情,就不要拉更多人,每个人每个系统都有明确的分工,出了问题知道马上找谁,避免踢皮球的问题。

    通过MVP的方式来设计系统,通过不断的迭代来验证优化,系统应该是弹性设计的。

    你想要什么样的系统设计,就架构什么样的团队,能扁平化就扁平化。最好按业务来划分团队,这样能让团队自然的自治内聚,明确的业务边界会减少和外部的沟通成本,每个小团队都对自己的模块的整个生命周期负责,没有边界不清,没有无效的扯皮,inter-operate, not integrate。

    做小而美的团队,人多会带来沟通的成本,让效率下降。亚马逊的Bezos有个逗趣的比喻,如果2个披萨不够一个团队吃的,那么这个团队就太大了。事实上一般一个互联网公司小产品的团队差不多就是7,8人左右(包含前后端测试交互用研等,可能身兼数职)。

再对应下衡量微服务的标准,我们很容易会发现他们之间的密切关系:

    分布式服务组成的系统

    按照业务而不是技术来划分组织

    做有生命的产品而不是项目

    Smart endpoints and dumb pipes(我的理解是强服务个体和弱通信)

    自动化运维(DevOps)

    容错

    快速演化

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 如果你看好区块链的未来,认可通证经济,那就应该会认可数字货币时代终会到来,区块链技术改变的是商业经济模型,未来每个...
    大鹏_9a76阅读 294评论 0 0
  • 王甲佳:CIO的业务现场力决定系统的抽象水平 如果你问CIO或者信息部门的人“最近忙什么呢?”他的回答一般是“项目...
    颖果_ad3d阅读 169评论 0 0
  • 概述 微服务架构是一种非常流行的新概念,即便可供以借鉴的经验比较少,当然不能阻挡它成为热门话题与研究对象。 令人惊...
    优云数智阅读 1,099评论 0 5
  • 【日精进打卡第45天】 【知~学习】 《六项精进》2遍 共29遍 《大学》2遍 共31遍 【经典名句分享】 道不同...
    李知言阅读 143评论 0 0
  • 几天前和父亲通电话,我说:爸我真的很急,我需要钱。我爸问:问要钱干什么?我就说了很多,谁谁买车了,谁又买房了。我爸...
    横出的虫阅读 313评论 1 0