Net分佈式系統之六:微服務之API網關

  本人創建了我的技術、工做經驗的分享微信號,計劃後續公衆號同步更新分享,比在此更多具體。歡迎有興趣的同窗一塊兒加入相互學習。基於上篇微服務架構分享,今天分享其中一個重要的基礎組件「API網關」。node

1、引言nginx

  隨着互聯網的快速發展,當前以步入移動互聯、物聯網時代。用戶訪問系統入口也變得多種方式,由原來單一的PC客戶端,變化到PC客戶端、各類瀏覽器、手機移動端及智能終端等。同時系統之間大部分都不是單獨運行,常常會涉及與其餘系統對接、共享數據的需求。因此係統須要升級框架知足突飛猛進需求變化,支持業務發展,並將框架升級爲微服務架構。「API網關」核心組件是架構用於知足此些需求。redis

  不少互聯網平臺已基於網關的設計思路,構建自身平臺的API網關,國內主要有京東、攜程、惟品會等,國外主要有Netflix、Amazon等。設計模式


  

2、業界相關網關框架api

  業界爲了知足這些需求,已有相關的網關框架。瀏覽器

  一、基於nginx平臺實現的網關有:KONG、API Umbrella安全

  二、自研發的網關有:apigee、Zuul微信


 

 

3、API網關設計網絡

  API網關是微服務架構(Microservices Architecture)標準化服務的模式。API網關定位爲應用系統服務接口的網關,區別於網絡技術的網關,可是原理則是同樣。API網關統一服務入口,可方便實現對平臺衆多服務接口進行管控,對訪問服務的身份認證、防報文重放與防數據篡改、功能調用的業務鑑權、響應數據的脫敏、流量與併發控制,甚至基於API調用的計量或者計費等等。組件設計以下:架構

    

                                                                                圖1- API網關功能結構示意圖

  多種客戶端程序,例如:移動APP、PC端和智能終端設備等。客戶端程序經過互聯網或者專網訪問API網關,由API網關統一接收請求後,經過一系列模塊定位具體處理的微服務機,並將其轉發至目標服務處理,網關與微服務之間通訊是內部局域網。API網關統一規範平臺對外的服務,同時充當了平臺的PaaS層。如上圖所示,API網關功能結構基於管道模型和支持可插拔式的設計開發,提供統一基於http協議的WebAPI訪問接口,內部每一個模塊各自實現功能,包括:黑白名單、日誌、協議適配、身份認證、計流限流及路由。而且依賴「訪問認證中心、服務發佈管理中心」分別實現API網關訪問權限控制和定位目標微服務。各模塊功能說明以下:

  一、黑白名單:實現經過IP地址控制禁止訪問網關功能,此功能是應用層面控制實現,再往前也能夠經過網絡傳輸方面進行控制訪問。

  二、日誌:實現訪問日誌的記錄,可用於分析訪問、處理性能指標,同時將分析結果支持其餘模塊功能應用。

  三、協議適配:實現通訊協議校驗、適配轉換的功能。

  四、身份認證:負責網關訪問身份認證驗證,此模塊與「訪問認證中心」通訊,實際認證業務邏輯交移「訪問認證中心」處理。

  五、計流限流:實現微服務訪問流量計算,基於流量計算分析進行限流,能夠定義多種限流規則。

  六、路由:路由是API網關很核心的模塊功能,此模塊實現根據請求,鎖定目標微服務並將請求進行轉發。此模塊須要與「服務發佈管理中心」通訊。「服務發佈管理中心」實現微服務發佈註冊管理功能,與其通訊得到目標微服務信息。


 

 

4、API網關部署

  API網關是一個公共基礎組件,無狀態,可支持多套分佈式部署。以下圖所示:

           

                                                                      圖2- API網關部署示意圖


 

5、API網關實現技術

  一、技術:框架總體基於.NET平臺構建,因此API網關也暫定基於.NET4.6平臺和ASP.NET WebAPI2.0框架實現。具體軟件架構就用上一篇所介紹的。

  二、性能:部署於IIS7.0,1000個併發查詢請求,平均響應90ms。

  可能在IIS7.0和.Net4.6平臺,在大併發性能處理上會更不上,後續將考慮基於.net core進行升級開發,並部署於Linux平臺。

  API網關主要原理是相通,不一樣平臺結合自己平臺總體框架設計,可選用不一樣的技術實現,目前有些基於Spring MVC、node.js、Erlang技術進行研發。


 

6、結語

  以上是對API網關概要進行設計,還有其餘方面的內容此篇文章未討論,例如:安全性、高併發、擴展性等特性設計,同時做爲平臺其中一個組件,也涉及與其餘組件一併協同運行。此塊內容會後續分享。

 

 

做者:劉蔡濤
出處: http://www.cnblogs.com/Andon_liu 
關於做者:專一於微軟平臺項目架構、管理。熟悉設計模式、領域驅動、架構設計、敏捷開發和項目管理。現主要從事ASP.NET MVC、WCF/Web API、SOA、MSSQL、redis方面的項目開發、架構、管理工做。 若有問題或建議,請一塊兒學習討論! 
本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。 
若有問題,能夠郵件:568773262@qq.com 聯繫我,謝謝。


微信號: 

相關文章
相關標籤/搜索