微服務設計最佳實踐
本文將從以下幾個維度進行闡述
為何選擇微服務?
什麼是微服務?
微服務架構的功能
微服務架構的優點
設計微服務的最佳實踐
1,為何選擇微服務?
現在,在我介紹微服務之前,讓我們看看在微服務之前流行的架構,即單體架構。
通俗地說,您可以說它類似於一個大容器,在這個容器中,應用程序的所有軟體組件被緊密地打包並部署在一起。
羅列一下單片架構的挑戰:
不靈活 - 單片應用程序無法使用不同的技術構建
不可靠 - 即使系統的某個功能不起作用,整個系統也不起作用
不可擴展 - 由於每次需要更新應用程序時都無法輕鬆擴展應用程序,因此必須重建整個系統
妨礙持續開發 - 無法同時構建和部署應用程序的多個功能
緩慢的開發 - 單體應用程序的開發需要花費大量的時間來構建,因為每個功能都必須一個接一個地構建
不適合複雜的應用程序 - 複雜應用程序的功能具有緊密耦合的依賴關係
上述挑戰是導致微服務發展的主要原因。
2、什麼是微服務?
微服務,又稱微服務架構,是一種架構風格,它將應用程序構建為以業務領域為模型的小型自治服務集合。
在微服務架構中,每個服務都是獨立的,並實現單一業務功能。
傳統架構與微服務架構之間的差異
以電子商務網站為例,了解它們之間的差異。
我們在上圖中觀察到的主要區別是,所有功能最初都在共享單個資料庫的單個實例下。 但是,通過微服務,每個功能都被分配了不同的微服務,處理自己的數據,並執行不同的功能。
現在,讓我們通過查看其架構來了解有關微服務的更多信息。請參考下圖:
微服務架構
1,來自不同設備的不同客戶端嘗試使用不同的服務,如搜索,構建,配置和其他管理功能2,所有服務都根據其域和功能分開,並進一步切分成各個微服務
3,這些微服務有自己的負載均衡器和執行環境來執行它們的功能,同時在自己的資料庫中捕獲數據
4,所有微服務都通過無狀態伺服器(REST或消息隊列)相互通信
5,微服務在服務發現中心的幫助下獲取其通信路徑,並執行自動化,監控等操作功能
6,然後,微服務執行的所有功能都通過API網關傳達給客戶端
7,所有內部點都從API網關連接。因此,任何連接到API網關的人都會自動連接到整個系統
現在,讓我們通過查看其功能來了解有關微服務的更多信息。
3、微服務功能
解耦 - 系統內的服務很大程度上是分離的。因此,整個應用程序可以輕鬆構建,更改和擴展
組件化 - 微服務被視為可以輕鬆更換和升級的獨立組件
業務能力 - 微服務非常簡單,專註於單一功能
自治 - 開發人員和團隊可以彼此獨立工作,從而提高速度
持續交付 - 通過軟體創建,測試和審批的系統自動化,允許頻繁發布軟體
職責 - 微服務不關注作為項目的應用程序。相反,他們將應用程序視為他們負責的產品
分散治理 - 重點是使用正確的工具來做正確的工作。這意味著沒有標準化模式或任何技術模式。開發人員可以自由選擇最有用的工具來解決他們的問題
敏捷 - 微服務支持敏捷開發。任何新功能都可以快速開發並再次丟棄。
4、微服務的優點
獨立開發 - 所有微服務都可以根據各自的功能輕鬆開發
獨立部署 - 基於其服務,可以在任何應用程序中單獨部署它們
故障隔離 - 即使應用程序的一項服務不起作用,系統仍可繼續運行
混合技術堆棧 - 可以使用不同的語言和技術來構建同一應用程序的不同服務
粒度縮放 - 單個組件可根據需要進行部署節點縮放,無需將所有組件部署縮放在一起
5、設計微服務的最佳實踐
在當今世界,複雜性已經蔓延到互聯網的每個產品當中。微服務架構有望保持團隊規模和功能更好。
現在,讓我們看一個案列來更好地理解微服務。
案例:購物網站
當您打開購物網站時,您看到的只是一個購買頁面。但是,在幕後,購物網站具有接受付款的服務,用於客戶諮詢的服務等。
假設此網站的開發人員已在單一框架中創建它。請參閱下圖:
因此,所有功能都放在一個代碼庫中,並且位於單個底層資料庫下。現在,讓我們假設市場上出現了一個新的品牌,開發商希望將即將到來的品牌所有細節都放在這個網站中,原有的資料庫結構和UI展示已經無法滿足。
然後,他們不僅需要為新標籤重做服務,而且還必須重新構建整個系統並相應地進行部署。
為避免此類挑戰,購物網站的開發人員決定將其應用程序從單片架構轉移到微服務。請參閱下圖了解購物網站的微服務架構。
這意味著開發人員不會創建Web微服務,邏輯微服務或資料庫微服務。相反,他們為搜索,推薦,客戶服務等創建單獨的微服務。
這種類型的應用程序架構不僅可以幫助開發人員克服以前架構所面臨的所有挑戰,還可以幫助輕鬆構建,部署和擴展購物車應用程序。
通過上述案列,我們可以總結出來,設計微服務的最佳實踐:
1,為每個微服務分別存儲數據
2,將代碼保持在類似的成熟度級別
3,為每個微服務單獨構建
4,部署到容器
5,將服務設計為無狀態服務
推薦閱讀: