1. 程式人生 > >Netflix的設計微服務體系架構的最佳實踐

Netflix的設計微服務體系架構的最佳實踐

Netflix在微服務上做的很出色,他的開發團隊為設計和實現微服務體系結構建立了幾個最佳實踐。他提出的最佳實踐值得借鑑,下面對這些實踐做一些介紹。

為每個微服務建立一個單獨的資料儲存

不要在微服務中使用共同的後端資料儲存。每個微服務的團隊選擇最適合該服務的資料庫。此外,對於單個數據儲存,共享資料庫結構是非常容易的,同時也減少工作的重複。最後,如果一個團隊更新了資料庫結構,其他使用該結構的服務也必須更改。

分離資料可能會使資料管理變得更加複雜,因為單獨的儲存系統很容易在本地被更改,特別是資料的外來鍵也可以被更改,但是實現同步資料卻需要額外的工作,這就使得資料變得不一致。您需要新增一個工具來執行主資料管理(MDM),通過在後臺操作來查詢和修復資料的不一致。你可以寫自己的工具或者購買商業產品。許多商業關係資料庫管理系統提供這樣的產品。

將所有程式碼保持在相似的成熟度級別

將微服務中所有程式碼保持一個相似的成熟度和穩定性。換句話說,如果您需要在已部署的微服務中新增或重寫某些程式碼,那麼最好的方法通常是將新的或更改的程式碼建立成一個新的微服務,從而保留現有的微服務。通過這種方式,您可以迭代地部署和測試新的程式碼,直到它沒有Bug,並且最大限度地提高效率,同時又不會在現有的微服務中帶來系統崩潰或效能下降的風險。一旦新的微服務與原來一樣穩定,如果它們確實執行同一個單獨的功能,或者合併後可以帶來更高的效率,您就可以將它們合併在一起。然而,在Cockcroft的經驗中,更常見的是,你應該拆分微服務,以防止他變大。

為提高交付的速度為每個微服務做一個單獨的編譯

為每個微服務做一個單獨的編譯,這樣就會在版本控制系統中新增這次編譯的版本資訊檔案。這有時會導致相同微服務在版本控制系統中有很多相似的資訊。這就使得舊版本程式碼清理變得更加困難(因為您需要更仔細地驗證一個版本是否不再被使用),但是在構建新的微服務時新增版本是很容易,這是一個可以接受的交易,因為我們的目的還是快速交付。

在容器中部署

在容器中部署微服務非常重要,因為這意味著您只需要一個工具就可以部署所有的東西。只要微服務在一個容器中,部署工具就知道如何部署它。容器是什麼並不重要。但是DocKer 是值得推薦的,因為Docker似乎很快就成為了容器技術的實際標準。

不要依賴單個伺服器

對待伺服器,特別是那些執行客戶端程式碼的伺服器,把他們設計成可以相互代替的架構。它們都執行相同的功能,沒有輕重之分,所以您不需要單獨關注它們。你唯一關心的是有足夠多的伺服器來提供你需要的服務,你可以使用自動伸縮來調整伺服器數量。如果一個停止工作,它會自動被另一個取代。避免將服務依託於那些脆弱的系統,不要依賴於單個伺服器來執行特定的功能。

你要把伺服器想象為牛,而不是寵物。如果你的生產環境中有一個專門的功能,你知道它的名字,當它崩潰的時候每個人都會收到影響,這樣你就把這個伺服器當成一個寵物。相反,你應該把你的伺服器想象為一群牛,你關心的是你喝了多少加侖的牛奶。如果有一天你發現你的牛奶比平時少了,你只需要發現哪些奶牛產的不是很好,取而代之就好。