美文网首页
2018-04-23

2018-04-23

作者: zuaa | 来源:发表于2018-04-23 19:36 被阅读0次

康威定律。

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

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

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

康威定律

第一定律

        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)

    容错

    快速演化

相关文章

  • 读书日感想

    2018-04-23 我对...

  • 2018-04-23

    2018-04-23 戴师傅简书作者 2018-04-23 22:20 打开App (稻盛哲学学习会)打卡第45天...

  • 清明小图

    难得画得这么有意思 2018-04-23

  • 【周检视】把生活花朵过成生命花园的秘密

    AprilCamellia 2018-04-23✨周检视鲁榕#2018年4月第2周(4.15~4.22)❤把生活花...

  • 17-2018周检视

    2018年第17周 起始时间:2018-04-23 结束时间:2018-04-29 一、目标完成情况...

  • 2018-04-23

    ZFQ_dacf 2018-04-23· 字数 506· 阅读 53· 日记本 姓名:周富强 公司:厦门大科机械有...

  • 2018-04-24

    2018-04-23 多云,心情好还好 人生目标:事业/美丽/健康/提升/家人/人际 /情商/理财/ 当日目标:美...

  • 2018-04-23

    为自己的高挑而自卑 王施妍 2018-04-23 03:12 · 字数 330 · 阅读 0 · 日记本 图片发自...

  • 英语

    2018-04-23 星期一 阴 晚上,全家正在吃晚饭,接到了wendy老师的电话,原来是老师来...

  • 3. Hive安装

    qdice007@gmail.com 2018-04-23 15:00 写在前面的废话 我们要基于之前搭建的Ha...

网友评论

      本文标题:2018-04-23

      本文链接:https://www.haomeiwen.com/subject/gkzllftx.html