天天看點

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

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

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

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

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

将所有代碼保持在相似的成熟度級别

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

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

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

在容器中部署

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

不要依賴單個伺服器

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

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

繼續閱讀