微服務(wù)和容器毫無爭議的成為了這個(gè)時(shí)代的主旋律,大家爭先恐后地讓自己的團(tuán)隊(duì)和企業(yè)去嘗試這樣的旋律,但往往發(fā)現(xiàn)曲高和寡,難以在整個(gè)組織內(nèi)形成共鳴。在本文中,我們嘗試揭開微服務(wù)和容器技術(shù)背后映射出的組織結(jié)構(gòu)的變遷,以及組織結(jié)構(gòu)對落地微服務(wù)和容器化架構(gòu)所帶來的反向制約,最后用INVEST原則來看看支撐這樣松耦合架構(gòu)的組織結(jié)構(gòu)應(yīng)有的特質(zhì)。希望能夠幫助迷茫中的企業(yè)和組織重新思考自己的微服務(wù)之路。
Microservices(微服務(wù))和docker(容器)成了近一年來軟件行業(yè)的新寵,每次參加相關(guān)活動(dòng)總會(huì)感到康威老先生站在背后邪邪地笑著:“我早告訴你們了”。
盡管Martin Fowler在“定義”微服務(wù)時(shí)十分小心的警告了大家所要付出的代價(jià),但好像微服務(wù)的優(yōu)點(diǎn)太過于吸引人,以至于大部分軟件開發(fā)組織和企業(yè)都把微服務(wù)這種架構(gòu)方式作為了未來的必選,大家都覺得我就是那個(gè)高個(gè)子(I'm that tall!)。

(Martin Fowler對伴隨微服務(wù)架構(gòu)的高工程實(shí)踐能力的比喻。)
隨著容器技術(shù)到達(dá)生產(chǎn)應(yīng)用的臨界點(diǎn),這種化學(xué)效應(yīng)好像一觸即發(fā),我們仿佛看到了未來一個(gè)不一樣的軟件微服務(wù)大集市在逐步展開!
在這個(gè)集市里會(huì)有淘寶這樣的平臺,為中小服務(wù)賣家搭起一個(gè)在線商城,買家可以根據(jù)自己的需要搜索及購買琳瑯滿目、各式各樣的服務(wù),在線或是二進(jìn)制、代碼質(zhì)量及自動(dòng)化覆蓋率等指標(biāo)成為同類服務(wù)評級的重要標(biāo)準(zhǔn)。
殺手級的服務(wù)如區(qū)塊鏈或者量子加密可能成為皇冠銷量服務(wù)。最后掀起一大波程序猿開微服務(wù)店的熱潮~ 很期待那是怎樣的賣家秀和買家秀啊!
這種幾乎接近于科幻的描述可能只適合作為微信上的談資,但微服務(wù)和容器技術(shù)的流行卻并非偶然。康威老先生用自己的定律揭示了一個(gè)更深刻的道理:
這不是一次技術(shù)架構(gòu)或者基礎(chǔ)設(shè)施的革命,而是為了保持組織靈活性的必由之路。
換句話說,軟件開發(fā)組織或企業(yè)開始意識到一切的管理和技術(shù)實(shí)踐都必須為保持盡可能高的組織靈活性服務(wù)。一定會(huì)有人問為啥要保持“盡可能高”的靈活性呢?鐵打的營盤流水的兵、穩(wěn)定的規(guī)章制度不也締造出了歷史上那么多成功的組織和企業(yè)嗎?
論盡可能高的組織靈活性
所以我在前面加了定語“軟件開發(fā)”,當(dāng)然現(xiàn)在我們有一個(gè)更廣泛的提法:科技企業(yè)。通常我們認(rèn)為產(chǎn)品或服務(wù)的技術(shù)含量比較高,具有核心競爭力,能不斷推出適銷對路的新產(chǎn)品,不斷開拓市場的企業(yè)為科技企業(yè)。
在我們所處的軟件時(shí)代,大量的科技企業(yè)都跟軟件沾上了邊。但歷史上我們可以回想大生產(chǎn)時(shí)代煉鋼也曾是高科技,信息時(shí)代發(fā)郵件也是高科技。前兩波的“科技企業(yè)”給我們的印象可不是靈活的:幾大鋼鐵巨擘讓人聯(lián)想到的應(yīng)該是當(dāng)年國家呼喚生產(chǎn)力全民建設(shè)的宏偉場景;信息時(shí)代佼佼者如Microsoft和IBM讓人聯(lián)想到的應(yīng)該是動(dòng)輒千人的大型工業(yè)軟件開發(fā)隊(duì)伍,一個(gè)部署都得來一個(gè)專家隊(duì)伍。那么為啥現(xiàn)在咱們的科技企業(yè)必須靈活,而且必須盡可能高呢?

這里我們再次使用康威老先生的定律來做推論,康威定律說
“一個(gè)產(chǎn)品或系統(tǒng)的設(shè)計(jì)(架構(gòu))受到其生產(chǎn)組織自身交流溝通結(jié)構(gòu)的制約”,
換句話說如果你有一個(gè)前端展現(xiàn)團(tuán)隊(duì)、一個(gè)后端服務(wù)團(tuán)隊(duì)和一個(gè)數(shù)據(jù)庫團(tuán)隊(duì),那么我們可以肯定,搞出來的系統(tǒng)會(huì)分前后臺和數(shù)據(jù)庫的設(shè)計(jì)。這本身是一個(gè)悲觀的定律,所以前面的團(tuán)隊(duì)發(fā)現(xiàn)新需求來了必須溝通三次,前后臺團(tuán)隊(duì)關(guān)心新需求對自身架構(gòu)的影響,數(shù)據(jù)庫設(shè)計(jì)關(guān)心對現(xiàn)有數(shù)據(jù)結(jié)構(gòu)的沖擊,最后總是會(huì)在各方的爭執(zhí)中得到一個(gè)別扭的解決方案。
很多團(tuán)隊(duì)早已經(jīng)習(xí)慣了這樣的痛苦,數(shù)字化時(shí)代的變化頻率將這樣的痛苦逐漸推向了頂峰。舉例感受一下:達(dá)到100億產(chǎn)值,首鋼用了71年,聯(lián)想用了13年,這個(gè)時(shí)代的小米用了僅僅3年!而今年的小米已經(jīng)不是站在浪潮之巔的科技新貴了。
所以康威老先生說:
如果要保持產(chǎn)品的持續(xù)競爭力,就要保持組織的靈活性。
曾經(jīng)有人跟我爭辯說:“我們做的是數(shù)字化時(shí)代的后臺系統(tǒng),不直接面對市場,需求很穩(wěn)定,搞那么靈活成本反而高?!庇谑俏抑钢麄冇兄f行代碼的系統(tǒng)說:“你們至少有30%代碼是冗余的,這就是組織缺乏靈活性的另外一個(gè)惡果?!?/p>

這里我們先收縮范圍到軟件開發(fā),非常有意思的是在咱們這個(gè)行業(yè)里,針對同一份需求,沒有兩個(gè)開發(fā)人員實(shí)現(xiàn)出來的代碼是一樣的(也許Hello World例外)。甚至,當(dāng)我發(fā)現(xiàn)兩個(gè)程序員使用的變量命名一樣的時(shí)候我會(huì)懷疑他們抄襲了。這說明軟件開發(fā)從需求提出到寫代碼實(shí)際都是在做設(shè)計(jì),不同的人設(shè)計(jì)出來的東西就會(huì)不同,像大家的簽名一樣。
設(shè)計(jì)甚至延續(xù)到了后面的軟件測試和部署,同樣的應(yīng)用在不同的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)下表現(xiàn)可能是完全不一樣的。那些追求穩(wěn)定的組織希望盡早結(jié)束設(shè)計(jì)這個(gè)高度不確定性的活動(dòng),從而能夠通過標(biāo)準(zhǔn)化來提高效率。
即使在敏捷開發(fā)主流化的今天,很多團(tuán)隊(duì)仍然是架構(gòu)師“畫圖”,碼農(nóng)堆砌代碼。所以這樣的組織很快發(fā)現(xiàn)自己深陷二進(jìn)制的泥潭,進(jìn)退維谷。我經(jīng)常跟這樣的團(tuán)隊(duì)講:你們?nèi)狈Α按a的響應(yīng)力”。而響應(yīng)力對組織的要求就是靈活,能夠從前到后駕馭設(shè)計(jì)活動(dòng)帶來的不確定性。
小結(jié)一下:數(shù)字化時(shí)代的市場變化是迅猛的,康威老先生已經(jīng)告訴我們,處在這樣時(shí)代背景下的科技企業(yè)保持組織靈活性是十分重要的。而軟件(廣義講新科技領(lǐng)域)本身由于強(qiáng)設(shè)計(jì)而帶來的不確定性又加重了對組織靈活性的訴求。
于是在這個(gè)時(shí)代我們看到了如Google、海爾這樣已然成功的企業(yè)開始大刀闊斧地改革自己的組織結(jié)構(gòu),這種對靈活性的極致追求成就了這些組織持續(xù)保持市場領(lǐng)先水平的核心競爭力。毫無疑問,微服務(wù)架構(gòu)的優(yōu)點(diǎn)也正反向映射出了組織結(jié)構(gòu)的靈活性,而容器技術(shù)的運(yùn)用降低了這種松散集市結(jié)構(gòu)的運(yùn)營成本,就如同淘寶平臺的出現(xiàn)給千千萬賣家和買家搭建了一個(gè)基礎(chǔ)的交易平臺。
彈性伸縮的容器化計(jì)算資源加上松耦合的微服務(wù)架構(gòu)必然會(huì)吸引追求組織靈活性的企業(yè)去打敗康威定律,保持組織活力。
組織結(jié)構(gòu)的INVEST原則
前面咱們辯證了數(shù)字化時(shí)代科技企業(yè)保持組織靈活性的必要,那么靈活的組織結(jié)構(gòu)應(yīng)該滿足什么原則呢?下面我們就借用敏捷開發(fā)中赫赫有名的需求管理原則INVEST來剖析一下怎樣的組織結(jié)構(gòu)才能夠真正落地微服務(wù)架構(gòu)和容器技術(shù)帶來的靈活性優(yōu)勢,或者從另外一個(gè)角度看支撐微服務(wù)架構(gòu)的運(yùn)用。

(兩種組織結(jié)構(gòu)對比示意)
獨(dú)立的:Independent
按照微服務(wù)架構(gòu)的團(tuán)隊(duì)?wèi)?yīng)該對外提供一種或多種服務(wù),服務(wù)和服務(wù)之間應(yīng)該是松耦合的,所以背后的團(tuán)隊(duì)也應(yīng)該是相對獨(dú)立的。遵循康威定律,如果一個(gè)大型組織沒有能夠劃分出服務(wù)導(dǎo)向的相對獨(dú)立團(tuán)隊(duì),那么最后對外提供的產(chǎn)品或系統(tǒng)的內(nèi)部結(jié)構(gòu)也不可能是簡單的服務(wù)組裝,而會(huì)是我們常說的“意大利面”,內(nèi)部結(jié)構(gòu)糾纏不清以至于最后響應(yīng)市場新需求越來越慢。
便于溝通的:Negotiable
“小“服務(wù)團(tuán)隊(duì)的結(jié)構(gòu)必然造成整個(gè)組織的集市化、社區(qū)化。如果沒有建立良好的團(tuán)隊(duì)間的溝通機(jī)制,很難想象這樣的組織里會(huì)有任何的產(chǎn)出。Amazon被認(rèn)為是一個(gè)微服務(wù)架構(gòu)運(yùn)用的成功典范,其2pizza團(tuán)隊(duì)的原則成為了業(yè)內(nèi)的標(biāo)桿。
但這樣服務(wù)導(dǎo)向小團(tuán)隊(duì)集合的底層是長期磨合形成的良好團(tuán)隊(duì)間溝通機(jī)制,甚至當(dāng)我們問到Amazon各個(gè)團(tuán)隊(duì)如何發(fā)現(xiàn)其它服務(wù)或要求其它團(tuán)隊(duì)協(xié)助完成需求時(shí),團(tuán)隊(duì)都說不出具體的流程機(jī)制,一切都變得很自然,全然像我們走進(jìn)自己熟悉的超市一樣,能夠很自然的找到日常所需。
有價(jià)值的:Valuable
毫無疑問,每個(gè)團(tuán)隊(duì)必然是面向價(jià)值交付的。敏捷開發(fā)方法的提出其實(shí)很早就指出了傳統(tǒng)方式下按照功能部門劃分的瀑布交付模式的原罪,即每個(gè)功能部門都不對最終的價(jià)值交付負(fù)責(zé)(Output over Outcome,輸出大于結(jié)果)。這樣的組織結(jié)構(gòu)必然造成對市場變化響應(yīng)的滯后。
值得一提的是面向價(jià)值交付的團(tuán)隊(duì)往往也是跨職能的,按照微服務(wù)的架構(gòu),團(tuán)隊(duì)需要負(fù)責(zé)服務(wù)從需求到部署運(yùn)營的全生命周期(Outcome over Output,結(jié)果大于輸出)。這也是為什么在基礎(chǔ)的工程交付平臺及實(shí)踐上團(tuán)隊(duì)必須是一個(gè)“高個(gè)子”。
可估計(jì)的:Estimable
這樣的服務(wù)團(tuán)隊(duì)交付周期應(yīng)該是很短且可以準(zhǔn)確估計(jì)的,上線應(yīng)該是家常便飯,而不是過去短則數(shù)月、長則一年的大爆炸模式。持續(xù)交付在這樣的組織里應(yīng)該是標(biāo)準(zhǔn)實(shí)踐,讓軟件系統(tǒng)時(shí)刻處于可發(fā)布狀態(tài)是團(tuán)隊(duì)的共同責(zé)任。從Amazon和Netfliex這樣的現(xiàn)代科技企業(yè)身上我們已經(jīng)看到了這樣組織結(jié)構(gòu)下逐步形成的工程能力優(yōu)勢,并最終轉(zhuǎn)換成了業(yè)務(wù)服務(wù)上的巨大成功。
短?。篠mall
前面提到了Amazon的2pizza團(tuán)隊(duì),人數(shù)10人以內(nèi),經(jīng)典的敏捷管理框架Scrum也建議5~9人的團(tuán)隊(duì),可見小團(tuán)隊(duì)成為組織靈活性的一個(gè)必要條件。中國俗語有“船小好調(diào)頭”樸實(shí)地揭示了小的靈活性,但為什么不再小一點(diǎn)呢?比如兩個(gè)人結(jié)對一個(gè)團(tuán)隊(duì)。
顯然大家很容易發(fā)現(xiàn)軟件開發(fā)本身的復(fù)雜性決定了要端到端交付價(jià)值兩個(gè)人的團(tuán)隊(duì)是搞不定的。從整個(gè)組織的健壯性來講,過小的團(tuán)隊(duì)也會(huì)增加企業(yè)形成單點(diǎn)依賴的風(fēng)險(xiǎn)。雖然沒有正式確認(rèn),但我們交流中發(fā)現(xiàn)Amazon這樣的微服務(wù)組織里其實(shí)也是存在服務(wù)冗余的,這樣的重復(fù)保證了組織在切割成小團(tuán)隊(duì)后風(fēng)險(xiǎn)得到適當(dāng)?shù)囊?guī)避。
可測試的:Testable
在面對市場情況高度不確定性時(shí),我們應(yīng)該直面試錯(cuò)這件事情。傳統(tǒng)職能型的大組織結(jié)構(gòu)往往是不能容錯(cuò)的,錯(cuò)誤的代價(jià)就是整個(gè)企業(yè)走偏了方向,或者一個(gè)部門在企業(yè)里失去了話語權(quán)。
在靈活性高的組織里我們卻應(yīng)該是能夠很容易進(jìn)行這樣的“測試”,企業(yè)更能夠利用這樣的結(jié)構(gòu)進(jìn)行動(dòng)態(tài)的投資組合管理,像Google著名的7:2:1投資比例,最后的一成就是利用組織的靈活性進(jìn)行創(chuàng)新的測試。測試的結(jié)果往往是失敗的,但正是這樣的不斷測試創(chuàng)造了Google歷史上很多著名的“黑天鵝”。
打破康威定律
最近很多以精益(LEAN)為關(guān)鍵字的理論框架在咱們這個(gè)領(lǐng)域冒了出來,也包括我前期撰文提到的精益企業(yè)(Lean Enterprise),于是有朋友揶揄說又開始炒概念了。我卻很嚴(yán)肅地澄清正是不希望炒概念,所以才回到了上個(gè)世紀(jì)就論證和發(fā)展起來的理念:精益。

來源于豐田制造的精益總結(jié)出了很多的原則和實(shí)踐,但有意無意中豐田完成了自身組織持續(xù)靈活性打造這項(xiàng)超越同期其它企業(yè)的偉業(yè)。其結(jié)果就是在響應(yīng)需求多樣化時(shí)展現(xiàn)出的更強(qiáng)適應(yīng)能力。
如果用我們前面的INVEST原則來看待精益組織,你會(huì)很快找到對應(yīng)的原則和實(shí)踐,即使在傳統(tǒng)的工業(yè)流水線上,豐田也在形成一個(gè)個(gè)的小團(tuán)隊(duì)(cell,單元生產(chǎn)),也在通過員工的多技能培養(yǎng)來完成小團(tuán)隊(duì)內(nèi)部的“跨職能”。其持續(xù)改進(jìn)(Kaizen)的核心思想有力保證了團(tuán)隊(duì)面向價(jià)值的工作方式和良好的跨團(tuán)隊(duì)溝通文化。
某種意義上講精益在康威定律定義之前就打破了康威定律!
微服務(wù)和容器技術(shù)無疑是這個(gè)時(shí)代工程架構(gòu)方面支撐組織靈活性的重要一步,然而我們不能忘記一個(gè)組織是五臟俱全的,如精益企業(yè)提到的,組織的財(cái)務(wù)審計(jì)、人力資源、采購合規(guī)等功能如何有效的“微服務(wù)”化和如何能夠合力構(gòu)建一個(gè)彈性的“容器”支撐平臺仍然需要諸君努力!