原文鏈接:https://www.solves.com.cn/it/cxkf/jiagou/2019-10-14/6061.html
Soft skills are always hard than hard skills. 軟技能比硬技能難。
老板聽說最近流行“微服務(wù)”薯鳍,問架構(gòu)師咱們的系統(tǒng)要不要來一套踩验?老板又聽說最近流行“中臺系統(tǒng)”岳掐,問架構(gòu)師咱們要不要搞起來菜谣?其實,這些問題不用老板問人柿,關(guān)注技術(shù)發(fā)展趨勢的架構(gòu)師每當聽到新的技術(shù)或解決方案此再,都會暗中思忖是否應(yīng)用到系統(tǒng)中讼渊。然而棍潘,用或不用瓶籽,總不能憑感覺吧匠童。此時,如果你能靈活運用康威定律塑顺,那么做出的判斷將更加完美汤求。
康威定律
康威定律是馬爾文·康威1967提出的:“設(shè)計系統(tǒng)的架構(gòu)受制于產(chǎn)生這些設(shè)計的組織的溝通結(jié)構(gòu)俏险。”通俗的來講:產(chǎn)品必然是其(人員)組織溝通結(jié)構(gòu)的縮影扬绪。
跨部門溝通是非常難的竖独,系統(tǒng)各個模塊的接口也反映了它們之間的信息流動和合作方式。
康威定律可謂軟件架構(gòu)設(shè)計中的第一定律,起初只是在雜志上的發(fā)表墓赴,后經(jīng)過《人月神話》這本軟件界圣經(jīng)的引用竞膳,并命名為康威定律(Conway’s law),因此得以推廣诫硕。
只通過簡單的描述可能無法理解康威定律的精髓所在坦辟,原文中康威定律可總結(jié)為四個定律:
- 第一定律 組織溝通方式會通過系統(tǒng)設(shè)計表達出來。
- 第二定律 時間再多一件事情也不可能做的完美章办,但總有時間做完一件事情锉走。
- 第三定律 線型系統(tǒng)和線型組織架構(gòu)間有潛在的異質(zhì)同態(tài)特性。
- 第四定律 大的系統(tǒng)組織總是比小系統(tǒng)更傾向于分解藕届。
第一定律
Communication dictates design挪蹭。
組織溝通方式?jīng)Q定系統(tǒng)設(shè)計。
這條定律重點是講組織架構(gòu)和溝通對系統(tǒng)設(shè)計的影響休偶。組織的溝通和系統(tǒng)的設(shè)計之間緊密相連梁厉,特別是復(fù)雜系統(tǒng),解決好人與人的溝通才能有一個更好的系統(tǒng)設(shè)計椅贱。
《人月神話》中總結(jié)出了隨著人員的增加溝通成本呈指數(shù)增長的規(guī)律:溝通成本 = 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
這也是為什么互聯(lián)網(wǎng)公司都追求小團隊的原因之一山橄。溝通的問題會帶來系統(tǒng)設(shè)計的問題,進而影響整個系統(tǒng)的開發(fā)效率和最終產(chǎn)品結(jié)果舍悯。
第二定律
There is never enough time to do something right, but there is always enough time to do it over航棱。
時間再多一件事情也不可能做的完美,但總有時間做完一件事情萌衬。
人手永遠是不夠的饮醇,事情永遠是做不完的,但可以一件一件來秕豫。這不就是軟件行業(yè)中“敏捷開發(fā)”模式所解決的問題嗎朴艰。面對這樣的狀況观蓄,敏捷開發(fā)可以做到不斷迭代、持續(xù)交付祠墅、快速驗證和反饋侮穿,并持續(xù)改進。
再牛的開發(fā)也會寫出bug毁嗦,再全面的測試覆蓋率也無法測出所有的問題亲茅。解決方案不是消滅這些問題,是容忍一些問題的存在狗准,然后通過適當?shù)脑O(shè)計(冗余克锣、監(jiān)控、高可用設(shè)計)當問題發(fā)生時能夠快速解決驶俊。
幾個開發(fā)人員的小公司娶耍,去追求微服務(wù)、去追求中臺架構(gòu)饼酿,這是追求完美嗎榕酒?不是,是找死故俐。
好的架構(gòu)不是買來的想鹰,也不是設(shè)計出來的,而是根據(jù)業(yè)務(wù)落地生根長期演化來的药版。
第三定律
There is a homomorphism from the linear graph of a system to the linear graph of its design organization辑舷。
線型系統(tǒng)和線型組織架構(gòu)間有潛在的異質(zhì)同態(tài)特性。
這一定律是第一定律的具體應(yīng)用槽片。想象一下如果公司的組織架構(gòu)是這樣的:團隊是分布式何缓,每個團隊都包含產(chǎn)品、研發(fā)还栓、測試碌廓、運維等角色。而此時系統(tǒng)是單塊的剩盒,項目溝通和協(xié)調(diào)的成本是巨大的谷婆,弄不好還會打起來。
如果將單塊的系統(tǒng)拆分成微服務(wù),每個團隊負責自己的部分跟匆,對外提供對應(yīng)的接口即可异袄,互不干擾。系統(tǒng)效率將得到提升玛臂。這與軟件設(shè)計中的高內(nèi)聚烤蜕、低耦合是相通的埠帕。
直白的說就是想要什么的系統(tǒng)就搭建什么樣的團隊敛瓷,有什么樣的團隊就搭建什么樣的系統(tǒng)。需要前后端分離的系統(tǒng)就搭建前后端分離的團隊斑匪,反之呐籽,擁有前后端分離的團隊,可以設(shè)計前后端分離的系統(tǒng)蚀瘸。當然狡蝶,如果能統(tǒng)籌管理,擁有重組團隊或設(shè)計系統(tǒng)架構(gòu)的權(quán)利贮勃,那就再好不過了贪惹。通常情況下讓兩者形成1:1的映射關(guān)系,更加高效寂嘉。
第四定律
The structures of large systems tend to disintegrate during development, qualitatively more so than with small systems奏瞬。
大的系統(tǒng)組織總是比小系統(tǒng)更傾向于分解。
“話說天下大勢泉孩,分久必合硼端,合久必分≡幔”系統(tǒng)越復(fù)雜珍昨,越需要增加人手,人手越多句喷,溝通成本也呈指數(shù)增長镣典。分而治之便是大多數(shù)公司選擇的解決方案。分不同的層級唾琼,分不同的小團隊兄春,讓團隊內(nèi)部完成自治理,然后統(tǒng)一對外溝通父叙。
小結(jié)
架構(gòu)不僅僅需要技術(shù)神郊,在大公司尤其需要政治肴裙,所謂的架構(gòu)的政治趾唱。