12.1 微服務(wù)的原則
微服務(wù)中有有一些關(guān)鍵原則,你可以選擇全部采用這些原則,或者定制采用一些再自己的組織中有意義的部分。組合使用這些原則的價值:整體使用的價值要大于部分使用之和。所以,如果決定要舍棄其中一個原則,請確保你明白其帶來的損失。

12.1.1 圍繞業(yè)務(wù)概念建模
圍繞業(yè)務(wù)的限界上下文定義的接口,比圍繞技術(shù)概念定義的接口更加穩(wěn)定。針對系統(tǒng)如何工作這個領(lǐng)域進(jìn)行建模,不僅可以幫助我們形成更穩(wěn)定的接口,也能確保我們能夠更好地反映業(yè)務(wù)流程的變化。
12.1.2 接受自動文化
微服務(wù)引入了很多復(fù)雜性,關(guān)鍵部分是:不得不管理大量的服務(wù)。解決這個問題的關(guān)鍵方法是:擁抱自動化文化。
自動化測試必不可少,相比單塊系統(tǒng),確保我們大量的服務(wù)能夠正常工作是一個更復(fù)雜的過程,這也是采用“持續(xù)交付”對每次提交后的產(chǎn)品質(zhì)量進(jìn)行快速反饋的一個關(guān)鍵部分。
12.1.3 隱藏內(nèi)部實現(xiàn)細(xì)節(jié)
為了使一個服務(wù)獨立于其他服務(wù),最大化獨自演化的能力,隱藏實現(xiàn)細(xì)節(jié)至關(guān)重要。服務(wù)還應(yīng)該隱藏它們的數(shù)據(jù)庫,以避免陷入數(shù)據(jù)庫耦合(報表屬于特例)
在可能的情況下,盡量選擇與技術(shù)無關(guān)的API,這能讓你自由地選擇使用不同的技術(shù)棧。
12.1.4 讓一起都去中心化
為了最大化微服務(wù)能帶來的自治性,給擁有服務(wù)的團(tuán)隊委派決策和控制權(quán),只要有可能,就嘗試使用資源自助服務(wù),允許人們按需部署軟件,使開發(fā)和測試盡可能簡單,并且避免讓獨立的團(tuán)隊來做這些事。
確保團(tuán)隊保持對服務(wù)的所有權(quán)是重要的一步,甚至可以讓團(tuán)隊自己決定什么時候讓哪些更改上線。
使用內(nèi)部開源模式,確保人們可以更改其他團(tuán)隊擁有的服務(wù)。
讓團(tuán)隊與組織保持一致,從而使康威定律起作用。
嘗試使用共同治理模型,使團(tuán)隊的每個成員共同對系統(tǒng)技術(shù)遠(yuǎn)景的演化負(fù)責(zé)。
12.1.5 可獨立部署
應(yīng)當(dāng)努力始終確保微服務(wù)可以獨立部署。當(dāng)使用居于RPC的集成時,避免使用像Java RMI提供的那種使用生成的樁代碼,緊密綁定客戶端/服務(wù)端的技術(shù)。
考慮使用藍(lán)/綠部署或金絲雀部署技術(shù),區(qū)分部署和發(fā)布,降低發(fā)布出錯的分線。
使用消費者驅(qū)動的契約測試,在破壞性的更改發(fā)生前捕獲它們。
你更改你負(fù)責(zé)的服務(wù),然后把它部署到生產(chǎn)環(huán)境,無需聯(lián)動地部署其他任何服務(wù),這應(yīng)該使常態(tài)而不是例外。你的消費者應(yīng)該自己決定何時更新,你需要適應(yīng)它們。
12.1.6 隔離失敗
我們心中持有反脆弱的心跳,預(yù)期在任何地方都會發(fā)生故障,這說明我們正走在正確的路上。
確保正確設(shè)置了超時,了解何時以及如何使用艙壁和斷路器,來限制故障組件的連帶影響。
明確在特定情況下,犧牲可用性或一致性是否使正確的決定
12.1.7 高度可觀察
我們需要從整體上看待正在發(fā)生的事情。通過注入合成事務(wù)到你的系統(tǒng),模擬真是用戶的行為,從而使用語義監(jiān)控來查看系統(tǒng)是否運行正常。聚合你的日志和數(shù)據(jù),這樣,當(dāng)你遇到問題時,就可以深入分析原因。關(guān)聯(lián)標(biāo)識可以幫助你跟蹤系統(tǒng)間的調(diào)用。
12.2 什么時候你不應(yīng)該使用微服務(wù)
當(dāng)你越不了解一個領(lǐng)域,為服務(wù)找到何時的限界上下文就越難。服務(wù)的界限劃分錯誤,可能會導(dǎo)致不得不頻繁地更改服務(wù)間的協(xié)作,而這種更改成本很高。
越不了解一個領(lǐng)域,越應(yīng)該從單塊系統(tǒng)開始,在熟悉和漸進(jìn)之后,再進(jìn)行拆分。
花費一定的時間來構(gòu)建工具和時間,幫助管理微服務(wù),無數(shù)的開發(fā)者經(jīng)驗驗證了這些工作的重要性。
12.3 臨別贈言
微服務(wù)架構(gòu)會給你帶來更多的選擇,也需要你做更多的決策。盡量縮小每個決策的影響范圍,這樣依賴,如果做錯了,只會影響系統(tǒng)的一小部分。不要去想大爆炸式的重寫,取而代之的使時間的推移。逐步對系統(tǒng)進(jìn)行一系列的更改,這樣做可以保持系統(tǒng)的靈活性。
使用微服務(wù),要習(xí)慣持續(xù)地改變和演進(jìn)系統(tǒng),變化無法避免,所以,擁抱它吧。