微服務(wù)這個概念一直很火,現(xiàn)在ServiceMesh概念更火,最近我經(jīng)手的多個項目也都采用微服務(wù)的方式開發(fā)。但實踐發(fā)現(xiàn),當(dāng)一個RD同時開發(fā)超過2個微服務(wù)的時候,出現(xiàn)bug或故障的概率會提升。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名注冊、網(wǎng)頁空間、營銷軟件、網(wǎng)站建設(shè)、平果網(wǎng)站維護(hù)、網(wǎng)站推廣。我現(xiàn)在看項目的時候會不自覺的關(guān)注工程服務(wù)拆分個數(shù)和研發(fā)人數(shù)的比值。雖然這么做,我卻說不出來個所以然,也沒有找到一個理論依據(jù)。
一、引子
最近讀到Spring Cloud Alibaba成員姬望(彭文杰)的一篇采訪稿,解開了我的一些疑惑。原文在這里
https://mp.weixin.qq.com/s/jArp9LUnLv9jveh9qTndfA
我摘錄了比較關(guān)鍵的一段
微服務(wù)解決的本質(zhì)問題是團(tuán)隊分工
SOA 也好、微服務(wù)也好,解決的根本問題是團(tuán)隊分工問題,詳見康威定律,這是大型軟件發(fā)展的必然,不因為人的喜好而改變。當(dāng)你讀懂康威定律,就會發(fā)現(xiàn)“服務(wù)拆分粒度難以準(zhǔn)確把握”根本不是本質(zhì)問題。
你有幾個 2 pizza 團(tuán)隊,最好就拆成幾個微服務(wù)。舉一個現(xiàn)實的例子:只有一個開發(fā)人員時,盡量就做單體應(yīng)用,不要沒事找刺激拆成 10 個微服務(wù),最終這個開發(fā)人員還會把他合成一個。微服務(wù)要求縱向的 2 pizza 團(tuán)隊(無數(shù)個小團(tuán)隊,包含開發(fā)、測試、運維),當(dāng)然我們也實施過一些傳統(tǒng)大型企業(yè),但團(tuán)隊還是處在橫向結(jié)構(gòu)的場景下(開發(fā)、運維、測試各是一個團(tuán)隊),拆分微服務(wù)讓他們很痛苦,尤其是運維團(tuán)隊。
這段話里有兩個概念2 pizza團(tuán)隊和康威定律
2 pizza團(tuán)隊
兩個披薩原則是指與會人數(shù)不能多到兩個披薩餅還不夠他們吃的地步。亞馬遜CEO杰夫·貝索斯(JeffBezos)認(rèn)為事實并非公司開會參與人數(shù)越多越好,他認(rèn)為人數(shù)越多的會議將不利于決策的形成,而是會導(dǎo)致與會人員的人云亦云,稱之為兩個披薩原則。2 pizza團(tuán)隊可以簡單理解為做某件事情的小團(tuán)隊。
康威定律
出乎很多人意料,微服務(wù)很多核心理念在半個世紀(jì)前(1968年)的《How Do Committees Invent?》一文中就被闡述過了,這篇文章中的很多論點在軟件開發(fā)飛速發(fā)展的這半個世紀(jì)中竟然一再被驗證,這就是康威定律(Conway's Law)
有意思的是該論點在提出多年后一直默默無名,后來Brooks Law著名的人月神話引用這個論點,“康威定律” 從此進(jìn)入大眾視野。
二、康威定律
wikipedia顯示,康威定律(http://www.melconway.com/Home/Committees_Paper.html)最著名的一句話這這樣的
“organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations.”
大致的意思是:系統(tǒng)設(shè)計(產(chǎn)品結(jié)構(gòu))等同組織形式,每個設(shè)計系統(tǒng)的組織,其產(chǎn)生的設(shè)計等同于組織之間的溝通結(jié)構(gòu)(簡單點說就是,系統(tǒng)的設(shè)計受限于設(shè)計系統(tǒng)的組織的人員架構(gòu)形式。我們也經(jīng)常說微服務(wù)不光是一個技術(shù)問題,更是一個研發(fā)組織問題)
想一想你用過的產(chǎn)品,看一看下邊這張圖,也許能加深對康威定律的理解
Mike Amundsen (Design RESTful API的作者),在《遠(yuǎn)距離條件下的康威定律——分布式世界中實現(xiàn)團(tuán)隊構(gòu)建》的一次技術(shù)分享中,從他的角度歸納這篇論文(《How Do Committees Invent?》)中的其他一些核心觀點
1、Communication dictates design(組織溝通方式會通過系統(tǒng)設(shè)計表達(dá)出來)
2、There is never enough time to do something right, but there is always enough time to do it over(時間再多一件事情也不可能做的完美,但總有時間做完一件事情)
3、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)特性)
4、The structures of large systems tend to disintegrate during development, qualitatively more so than with small systems(大的系統(tǒng)組織總是比小系統(tǒng)更傾向于分解)
Mike Amundsen的更多細(xì)節(jié)不展開了,感興趣可以自行搜索。
三、支持康威定律的證據(jù)
wikipedia在康威定律條目的Supporting evidence章節(jié)有如下描述。
麻省理工學(xué)院和哈佛商學(xué)院研究小組發(fā)表了支持康威定律的證據(jù),他們使用“鏡像假設(shè)”作為康威定律的等效術(shù)語,發(fā)現(xiàn)“支持鏡像假設(shè)”的有力證據(jù),“[產(chǎn)品]模塊化的顯著差異”與“分布式團(tuán)隊傾向于開發(fā)更多模塊化產(chǎn)品的觀點一致”。
馬里蘭大學(xué)的Nagappan、Murphy和Basili與微軟合作,以及芬蘭坦佩雷理工大學(xué)的Syeed和Hammouda的案例研究,同樣支持康威定律。
四、康威定律如何解釋微服務(wù)的合理性
了解了康威定律是什么,再來看看他如何在半個世紀(jì)前就奠定了微服務(wù)架構(gòu)的理論基礎(chǔ)。
人與人的溝通是非常復(fù)雜的,一個人的溝通精力是有限的,所以當(dāng)問題太復(fù)雜需要很多人解決的時候,我們需要做拆分組織來達(dá)成對溝通效率的管理
組織內(nèi)人與人的溝通方式?jīng)Q定了他們參與的系統(tǒng)設(shè)計,管理者可以通過不同的拆分方式帶來不同的團(tuán)隊間溝通方式,從而影響系統(tǒng)設(shè)計
如果子系統(tǒng)是內(nèi)聚的,和外部的溝通邊界是明確的,能降低溝通成本,對應(yīng)的設(shè)計也會更合理高效
復(fù)雜的系統(tǒng)需要通過容錯彈性的方式持續(xù)優(yōu)化,不要指望一個大而全的設(shè)計或架構(gòu),好的架構(gòu)和設(shè)計都是慢慢迭代出來的
帶來的具體的實踐建議是
我們要用一切手段提升溝通效率,比如slack,github,wiki。能2個人講清楚的事情,就不要拉更多人,每個人每個系統(tǒng)都有明確的分工,出了問題知道馬上找誰,避免踢皮球的問題。
通過MVP的方式來設(shè)計系統(tǒng),通過不斷的迭代來驗證優(yōu)化,系統(tǒng)應(yīng)該是彈性設(shè)計的。
你想要什么樣的系統(tǒng)設(shè)計,就架構(gòu)什么樣的團(tuán)隊,能扁平化就扁平化。最好按業(yè)務(wù)來劃分團(tuán)隊,這樣能讓團(tuán)隊自然的自治內(nèi)聚,明確的業(yè)務(wù)邊界會減少和外部的溝通成本,每個小團(tuán)隊都對自己的模塊的整個生命周期負(fù)責(zé),沒有邊界不清,沒有無效的扯皮,inter-operate, not integrate。
做小而美的團(tuán)隊,人多會帶來溝通的成本,讓效率下降。亞馬遜的Bezos有個逗趣的比喻,如果2個披薩不夠一個團(tuán)隊吃的,那么這個團(tuán)隊就太大了。事實上一般一個互聯(lián)網(wǎng)公司小產(chǎn)品的團(tuán)隊差不多就是7,8人左右。
公司級的組織結(jié)構(gòu)設(shè)置看起來層次很高,回到最初的問題,你的小團(tuán)隊微服務(wù)到底拆分多少合適呢?
《How Do Committees Invent?》文中提到任務(wù)的拆解可以嵌套進(jìn)行,意思是先按照大力度拆,拆分出的部分繼續(xù)按照更細(xì)的粒度拆分,直到不需要拆分為止。
結(jié)合阿里姬望和我個人的經(jīng)驗。如果你還是新手,那么你預(yù)期項目有幾個人開發(fā)就拆成幾個部分一般不會有大的問題;如果你比較有經(jīng)驗,可以結(jié)合公司微服務(wù)的治理能力靈活發(fā)揮。
總之,只要說得清楚,運維能力又能跟上,一般就是合理的!
網(wǎng)頁題目:微服務(wù)拆分到什么粒度合適——康威定律-創(chuàng)新互聯(lián)
分享鏈接:http://www.rwnh.cn/article28/cseecp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、網(wǎng)站建設(shè)、營銷型網(wǎng)站建設(shè)、微信小程序、網(wǎng)站改版、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容