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),一個技術產品,一波人能夠作,另外一波人也能夠作,到底誰作的好,真很差說,無論誰作,都給業務套上了一副手銬。」
原文連接:《康威定律,做爲架構師還不會靈活運用?》