微服務架構的優勢與不足(二)

2021-08-22 11:29:32 字數 1792 閱讀 2904

微處理架構——處理複雜事物

許多公司,比如amazon、ebay和netflix,通過採用微處理結構模式解決了上述問題。其思路不是開發乙個巨大的單體式的應用,而是將應用分解為小的、互相連線的微服務。

乙個微服務一般完成某個特定的功能,比如下單管理、客戶管理等等。每乙個微服務都是微型六角形應用,都有自己的業務邏輯和介面卡。一些微服務還 會發布api給其它微服務和應用客戶端使用。其它微服務完成乙個web ui,執行時,每乙個例項可能是乙個雲vm或者是docker容器。

比如,乙個前面描述系統可能的分解如下:

每乙個應用功能區都使用微服務完成,另外,web應用會被拆分成一系列簡單的web應用(比如乙個對乘客,乙個對計程車駕駛員)。這樣的拆分對於不同使用者、裝置和特殊應用場景部署都更容易。

每乙個後台服務開放乙個rest api,許多服務本身也採用了其它服務提供的api。比如,駕駛員管理使用了告知駕駛員乙個潛在需求的通知服務。ui服務啟用其它服務來更新web頁面。所有服務都是採用非同步的,基於訊息的通訊。微服務內部機制將會在後續系列中討論。

一些rest api也對乘客和駕駛員採用的移動應用開放。這些應用並不直接訪問後台服務,而是通過api gateway來傳遞中間訊息。api gateway負責負載均衡、快取、訪問控制、api 計費監控等等任務,可以通過nginx方便實現,後續文章將會介紹到api gateway。

微服務架構模式在上圖中對應於代表可擴充套件scale cube的y軸,這是乙個在《the art of scalability》書中描述過的三維擴充套件模型。另外兩個可擴充套件軸,x軸由負載均衡器後端執行的多個應用副本組成,z軸是將需求路由到相關服務。

應用基本可以用以上三個維度來表示,y軸代表將應用分解為微服務。執行時,x軸代表執行多個隱藏在負載均衡器之後的例項,提供吞吐能力。一些應用可能還是用z軸將服務分割槽。下面的圖演示行程管理服務如何部署在執行於aws ec2上的docker上。

執行時,行程管理服務由多個服務例項構成。每乙個服務例項都是乙個docker容器。為了保證高可用,這些容器一般都執行在多個雲vm上。服務例項前是 一層諸如nginx的負載均衡器,他們負責在各個例項間分發請求。負載均衡器也同時處理其它請求,例如快取、許可權控制、api統計和監控。

這種微服務架構模式深刻影響了應用和資料庫之間的關係,不像傳統多個服務共享乙個資料庫,微服務架構每個服務都有自己的資料庫。另外,這種思路也影響到了企業級資料模式。同時,這種模式意味著多份資料,但是,如果你想獲得微服務帶來的好處,每個服務獨有乙個資料庫是必須的,因為這種架構需要這種松耦合。下面的圖演示示例應用資料庫架構。

每種服務都有自己的資料庫,另外,每種服務可以用更適合自己的資料庫型別,也被稱作多語言一致性架構。比如,駕駛員管理(發現哪個駕駛員更靠近乘客),必須使用支援地理資訊查詢的資料庫。

表面上看來,微服務架構模式有點像soa,他們都由多個服務構成。但是,可以從另外乙個角度看此問題,微服務架構模式是乙個不包含web服務 (ws-)和esb服務的soa。微服務應用樂於採用簡單輕量級協議,比如rest,而不是ws-,在微服務內部避免使用esb以及esb類似功能。微服 務架構模式也拒絕使用canonical schema等soa概念。

微服務架構的優勢與不足

上篇文章給大家簡單介紹了一下微處理架構,現在我來為大家分析微服務架構的優勢與不足。微處理架構 處理複雜事物 許多公司,比如amazon ebay和netflix,通過採用微處理結構模式解決了上述問題。其思路不是開發乙個巨大的單體式的應用,而是將應用分解為小的 互相連線的微服務。乙個微服務一般完成某個...

微服務架構優勢

複雜度可控 在將應用分解的同時,規避了原本複雜度無止境的積累。每乙個微服務專注於單一功能,並通過定義良好的介面清晰表述服務邊界。由於體積小 複雜度低,每個微服務可由乙個小規模開發團隊完全掌控,易於保持高可維護性和開發效率。獨立部署 由於微服務具備獨立的執行程序,所以每個微服務也可以獨立部署。當某個微...

微服務架構的優勢

微服務可通過分布式部署,大幅提公升您的團隊和日常工作效率。您還可以並行開發多個微服務。這意味著更多開發人員可以同時開發同乙個應用,進而縮短開發所需的時間。由於開發周期縮短,微服務架構有助於實現更加敏捷的部署和更新。隨著某些服務的不斷擴充套件,您可以跨多個伺服器和基礎架構進行部署,充分滿足自身需求。只...