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