翻譯自
https://martinfowler.com/bliki/MicroservicePrerequisites.html
當我和其他人談到微服務架構時,我聽到很多樂觀的想法。開發者很享受以較小的單位進行開發,並對新架構會帶來比起巨大系統更好的模組化充滿期待。不過和所有架構的選擇一樣,這是有取捨的。對微服務來說,取捨錯誤特別會帶來嚴重的後果,因為一但選用微服務,你就不再是管理一個單一完整的巨大系統,而是要處理一堆小服務所組成的生態系。因此,如果你不具備某些基本條件,那就不應該考慮使用微服務架構。
快速配置:你應該要可以在幾個小時之內開一個新的伺服器。如果使用雲端系統的話,這是很自然的。不過即使不全部使用雲端服務這也是可以達成的。要做到這麼快速的配置,你需要很多的自動化——一開始可能不需要完全自動化,但是要認真的做微服務最終還是需要做到。
基本監控:在正式環境內有這麼多鬆耦合的服務同時運作,一定會有測試環境內不好察覺的問題出現,所以設立一個能快速偵測嚴重問題的監控機制是很重要的。底線是你要能偵測出技術上的問題,像是計算錯誤,服務是否還可用等等。另外有許多商務問題也很值得偵測,比方說訂單遺漏等等的情況。
如果突然出現問題,你要能夠馬上退回到沒問題的版本,所以你需要⋯⋯
快速應用部署:要處理這麼多服務,你必須要能夠在測試環境或者正式環境下都能夠快速部署服務。通常這會牽涉到使用自動部署,並且部署時間不會超過幾個小時。早期需要部分手動操作是可以接受的,但是要能很快的做到全自動部署。
這些能力又需要一個很重要的組織架構轉移,要求開發者和部署者必須有密切的合作關係:也就是 devOps 文化。要能夠快速的監控和部署,這種密切的合作是必須的。
另外當你監控到問題時能很快反應的能力也很重要。特別是處理問題時應該要開發團隊和運營團隊參與,兩個團隊應該要同時處理線上問題以及一起分析根本原因,以確保問題的癥結被修正。
準備好所有的東西之後,你可以開始在第一個系統上面使用幾個微服務了。部署並正式使用這些系統時,要有心理準備會學習很多怎麼維持系統運轉以及 devops 團隊合作的經驗。給自己一些時間去處理這些事情,從中學習,並在你提高服務的數量時提升上述的能力。
如果你現在還不具備上述的能力,為了開始在正式環境上使用微服務,你應該要開始鍛鍊這些能力。這些能力在單一系統上也是應該具備的,雖然不是所有軟體團隊都有這些能力,但是幾乎所有情境下,這些能力對營運都非常重要。
要處理更多的服務,會需要更多的能力。你會需要追蹤貫穿多個服務的商業交易,需要完全使用自動部署來自動化系統監控以及系統部署的事項。
另外之前以產品為中心的團隊架構也需要開始轉變,你需要規劃好開發環境,讓工程師可以快速的在不同的程式語言,函式庫,以及專案中自由切換。一些和我討論的人感覺在協助組織實作更多微服務時,可能有一個成熟的模型逐漸出現。我們應該在之後幾年會看到相關的討論。