使用API網關構建微服務


 

使用傳統的異步回調方法編寫API組合代碼會讓你迅速墜入回調地獄。代碼會變得混亂、難以理解且容易出錯。一個更好的方法是使用響應式方法以一種聲明式樣式編寫API網關代碼。
響應式抽象概念的例子有Scala中的Future、Java 8中的CompletableFuture和JavaScript中的Promise,還有最初是微軟為.NET平台開發的Reactive Extensions(RX)。Netflix創建了RxJava for JVM,專門用於他們的API網關。此外,還有RxJS for JavaScript,它既可以在瀏覽器中運行,也可以在Node.js中運行。使用響應式方法將使你可以編寫簡單但高效的API網關代碼。

http://www.infoq.com/cn/articles/construct-micro-service-using-api-gateway/

使用API網關

通常,一個更好的方法是使用所謂的API網關。API網關是一個服務器,是系統的唯一入口。
從面向對象設計的角度看,它與外觀模式類似。
API網關封裝了系統內部架構,為每個客戶端提供一個定制的API。
它可能還具有其它職責,如身份驗證、監控、負載均衡、緩存、“請求整形(request shaping)”與管理、靜態響應處理。


下圖展示了API網關通常如何融入架構:

 

API網關負責服務請求路由、組合及協議轉換。
客戶端的所有請求都首先經過API網關,然后由它將請求路由到合適的微服務。API網管經常會通過調用多個微服務並合並結果來處理一個請求。它可以在Web協議(如HTTP與WebSocket)與內部使用的非Web友好協議之間轉換。

API網關還能為每個客戶端提供一個定制的API。通常,它會向移動客戶端暴露一個粗粒度的API。例如,考慮下產品詳情的場景。API網關可以提供一個端點(/productdetails?productid=xxx),使移動客戶端可以通過一個請求獲取所有的產品詳情。API網關通過調用各個服務(產品信息、推薦、評論等等)並合並結果來處理請求。

Netflix API網關是一個很好的API網關實例。Netflix流服務提供給數以百計的不同類型的設備使用,包括電視、機頂盒、智能手機、游戲系統、平板電腦等等。最初,Netflix試圖為他們的流服務提供一個通用的API。然而他們發現,由於各種各樣的設備都有自己獨特的需求,這種方式並不能很好地工作。如今,他們使用一個API網關,通過運行特定於設備的適配器代碼來為每個設備提供一個定制的API。通常,一個適配器通過調用平均6到7個后端服務來處理每個請求。Netflix API網關每天處理數十億請求。

API網關的優點和不足

如你所料,使用API網關有優點也有不足。使用API網關的最大優點是,它封裝了應用程序的內部結構。客戶端只需要同網關交互,而不必調用特定的服務。API網關為每一類客戶端提供了特定的API。這減少了客戶端與應用程序間的交互次數,還簡化了客戶端代碼。

API網關也有一些不足。它增加了一個我們必須開發、部署和維護的高可用組件。還有一個風險是,API網關變成了開發瓶頸。為了暴露每個微服務的端點,開發人員必須更新API網關。API網關的更新過程要盡可能地簡單,這很重要。否則,為了更新網關,開發人員將不得不排隊等待。不過,雖然有這些不足,但對於大多數現實世界的應用程序而言,使用API網關是合理的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM