IT行業(yè)正在經(jīng)歷從單一應用程序到基于微服務的體系結構的轉變。這種新方法的好處包括:
獨立開發(fā)和自由選擇技術–開發(fā)人員可以同時處理不同的微服務,并為他們要解決的問題選擇最佳技術。
獨立的部署和發(fā)布周期–微服務可以按自己的時間表進行單獨更新。
粒度擴展–單個微服務可以獨立擴展,從而降低了總體成本并提高了可靠性。
簡便性–較小的服務更易于理解,從而加快了產(chǎn)品的開發(fā),測試,調試和發(fā)布的速度。
故障隔離–微服務的故障不必轉化為其他服務的故障。
在此博客文章中,我們將探討:
如何設計簡化的在線商店系統(tǒng)以實現(xiàn)上述好處。
為什么以及如何在基于微服務的體系結構中管理面向公眾的API。
如何開始使用Azure API管理和微服務。
示例:使用微服務實現(xiàn)的在線商店
讓我們考慮一個簡化的在線商店系統(tǒng)。網(wǎng)站的訪問者需要能夠查看產(chǎn)品的詳細信息,下訂單,查看下訂單。
每當下訂單時,系統(tǒng)都需要處理訂單明細并發(fā)出運輸請求。根據(jù)用戶方案和業(yè)務需求,系統(tǒng)必須具有以下屬性:
細粒度縮放-查看產(chǎn)品詳細信息的頻率平均比下訂單至少高1000倍。
簡便性–明確定義了獨立的用戶操作,這種分離需要反映在系統(tǒng)的體系結構中。
故障隔離–運輸功能的故障不會影響查看產(chǎn)品或下訂單。
他們暗示將通過三種微服務來實施該系統(tǒng):
1、使用公共GET和POST API的訂單-負責查看和下訂單。
2、具有公共GET API的產(chǎn)品-負責查看產(chǎn)品的詳細信息。
3、由事件在內部觸發(fā)的裝運–負責處理和裝運訂單。
為此,Azure將使用易于實現(xiàn)和管理的Azure功能。它們的事件驅動性質意味著它們將在交互上執(zhí)行并為其付費。當商店流量不可預測時,此功能將非常有用。在沒有流量的情況下,基礎架構會縮減為零。在市場營銷活動如病毒般傳播或在購物假期(例如美國的黑色星期五)期間負載增加的情況下,它還可以提供大量流量。
為了保持縮放粒度,確保簡單性并保持發(fā)布周期獨立,每個微服務都應在單獨的Function App中實現(xiàn)。
在單個功能應用程序中實現(xiàn)微服務的流程圖
訂單和產(chǎn)品微服務是帶有HTTP觸發(fā)器的外部函數(shù)。運輸微服務由訂單微服務間接觸發(fā),該訂單微服務在Azure Service Bus中創(chuàng)建一條消息。例如,當您訂購商品時,網(wǎng)站會發(fā)出POST Order API調用來執(zhí)行訂購功能。接下來,您的訂單在Azure Service Bus實例中作為消息排隊,然后觸發(fā)運送功能進行處理。
在基于微服務的架構中管理外部API通信的主要理由
所提出的體系結構具有一個基本問題,即處理來自外部的通信的方式。
客戶端應用程序耦合到內部微服務。當您希望拆分,合并或重寫微服務時,這尤其麻煩。
API不在同一域或IP地址下出現(xiàn)。
通用API規(guī)則無法輕松地跨微服務應用。
管理API更改和引入新版本很困難。
盡管Azure Functions代理提供了統(tǒng)一的API平面,但在其他情況下它們還是不足的。應該通過在Azure函數(shù)之前使用Azure API管理來解決這些限制,現(xiàn)在可以在無服務器的消費層中使用。
流程圖顯示Azure API Managemnet到Azure Functions的前沿
API管理從其實現(xiàn)中抽象出API,并將它們托管在相同的域或靜態(tài)IP地址下。它使您可以將客戶端應用程序與內部微服務分離。Azure API管理中的所有API共享一個主機名和一個靜態(tài)IP地址。您也可以分配自定義域。
使用APIManagement通過在Azure API Management中聚集API來確保API的安全,而不是直接公開您的微服務。這可以幫助您減少潛在攻擊的表面積。您可以使用訂閱密鑰,JWT令牌,客戶端證書或自定義標頭來驗證API請求。流量只能過濾到受信任的IP地址。
使用APIManagement,還可以在API上執(zhí)行規(guī)則。您可以按API或按API操作全局定義傳入請求和傳出響應的API策略。幾乎有50種策略,例如身份驗證方法,限制,緩存和轉換。通過訪問我們的文檔“API管理政策”了解更多信息。
API管理簡化了不斷變化的API。從設計階段到引入新版本或修訂版,您都可以在API的整個生命周期中進行管理。與修訂版本相反,版本應包含重大更改,例如刪除API操作或更改身份驗證。
可以在使用API管理時監(jiān)視API,在Azure API管理實例中查看使用情況指標,在Azure Application Insights中記錄API調用以創(chuàng)建圖表,監(jiān)視實時流量并簡化調試。
API管理使向外部開發(fā)人員發(fā)布API變得容易。Azure API管理提供了一個開發(fā)人員門戶,該門戶是一個自動生成的,完全可自定義的網(wǎng)站,訪問者可以在其中發(fā)現(xiàn)API,學習如何使用它們,以交互方式試用它們,下載其OpenAPI規(guī)范并最終注冊以獲取API密鑰。
如何通過微服務使用API管理
Azure API管理最近已在新的定價層中可用。通過按執(zhí)行計費,消費層特別適合基于微服務的體系結構和事件驅動的系統(tǒng)。例如,對于我們假設的在線商店而言,這將是一個不錯的選擇。
對于更高級的系統(tǒng),API管理的其他層提供了更豐富的功能集。