小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

統(tǒng)一開發(fā)框架——API網關構建微服務

 漢無為 2018-08-26

(一)背景介紹

目前,隨著微服務架構的流行,大家紛紛采用微服務來實現新的系統(tǒng)或者進行老系統(tǒng)的改造。而微服務架構的優(yōu)勢正是讓敏捷開發(fā)和復雜的企業(yè)應用持續(xù)交付成為可能。

雖然微服務架構沒有公認的技術標準和規(guī)范草案,但業(yè)界已經有一些很有影響力的開源微服務架構平臺。根據公司的業(yè)務系統(tǒng)項目現狀及公司的技術優(yōu)勢,統(tǒng)一開發(fā)框架團隊采用了Spring-Cloud作為微服務的架構平臺。Spring-Cloud作為一系列JAVA系統(tǒng)框架的有序集合,通過利用Spring-Boot的開發(fā)便利性簡化了分布式系統(tǒng)基礎設施的開發(fā),成為微服務架構的集大成者和云計算的最佳業(yè)務實踐。

當然,微服務在帶給我們太多好處的同時, 同時也帶給我們許多問題需要解決。采用微服務后,所有的服務都變成了一個個細小的API。那么這些服務API該怎么正確的管理?API認證授權如何實現?如何實現服務的負載均衡,熔斷,灰度發(fā)布,限流流控?如何合理的治理這些API服務尤其重要。在微服務架構中,API Gateway作為整體架構的重要組件,它抽象了微服務中都需要的公共功能,同時提供了客戶端負載均衡,服務自動熔斷,灰度發(fā)布,統(tǒng)一認證,限流流控,日志統(tǒng)計等豐富的功能,幫助我們解決很多API管理難題。

(二)API網關及主要功能

2.1 什么是API網關

API Gateway 是微服務架構體系中的一類型特殊服務,它是所有微服務的入口,它的職責是執(zhí)行路由請求、協(xié)議轉換、聚合數據、認證、限流、熔斷等公共基礎服務。

統(tǒng)一開發(fā)框架——API網關構建微服務

從部署結構上說,上圖是不采用API Gateway的微服務部署模式,我們可以清晰看到,這種部署模式下,客戶端與負載均衡器(一般是Nginx)直接交互,完成服務的調用。但這是這種模式下,也有它的不足。

  • 不支持動態(tài)擴展,系統(tǒng)每多一個服務,就需要部署或修改負載均衡器。
  • 無法做到動態(tài)的開關服務,若要下線某個服務,需要運維人員將服務地址從負載均衡器中移除。
  • 對于API的限流,安全等控制,需要每個微服務去自己實現,增加了微服務的復雜性,同時也違反了微服務設計的單一職責原則。

Chris Richardson在http:///中也提及到,在微服務的架構模式下,API Gateway是微服務架構中一個非常通用的模式,利用API Gateway可以解決調用方如何調用獨立的微服務這個問題。

統(tǒng)一開發(fā)框架——API網關構建微服務

上圖為采用API Gateway模式,我們通過上圖可以看到,API Gateway做為系統(tǒng)統(tǒng)一入口,實現了對各個微服務間的整合,同時又做到了對客戶端友好,屏蔽系統(tǒng)了復雜性和差異性。對比之前無API Gateway模式,API Gateway具有幾個比較重要的優(yōu)點:

  • 采用API Gateway可以與微服務注冊中心連接,實現微服務無感知動態(tài)擴容。
  • API Gateway對于無法訪問的服務,可以做到自動熔斷,無需人工參與。
  • API Gateway可以方便的實現藍綠部署,金絲雀發(fā)布或A/B發(fā)布。
  • API Gateway做為系統(tǒng)統(tǒng)一入口,我們可以將各個微服務公共功能放在API Gateway中實現以盡可能減少各服務的職責。
  • 幫助我們實現客戶端的負載均衡策略。

2.2 API的網關分類

Chris Richardson 在他的博客中把 API 網關劃分為以下兩種:

  • 單節(jié)點 API 網關
  • Backends for frontends 網關(BFF模式)

單節(jié)點網關:單節(jié)點的 API網關為每個客戶端提供不同的API,而不是提供一種萬能風格的API。

統(tǒng)一開發(fā)框架——API網關構建微服務

Backends for frontends 網關:這種模式是針對不同的客戶端來實現一個不同的API網關。

統(tǒng)一開發(fā)框架——API網關構建微服務

2.3 API Gateway中的主要功能

下面我們用圖來說明API Gateway中一些重要的功能:

Gateway 職責之1 :負載均衡

統(tǒng)一開發(fā)框架——API網關構建微服務

API Gateway可以幫助我們輕松的實現負載均衡,利用服務發(fā)現知道所有Service的地址和位置,通過在API Gateway中實現負載均衡算法,ZUUL默認使用RR算法實現負載均衡效果。

Gateway 職責之2 :接口路由

統(tǒng)一開發(fā)框架——API網關構建微服務

需要根據各種條件將請求路由到正確的目的地。在實現上采用了路由服務,Gateway定期從路由服務獲取路由表,達到了解耦、實時更新的效果;經過通用邏輯預處理后,無線接口請求將進一步分發(fā)給后端處理。URL或者ServiceID在配置文件或者系統(tǒng)里做映射,分發(fā)邏輯根據請求中的URL信息,找到對應的業(yè)務后端ServiceID或者URL,然后把請求交給業(yè)務后端做相應處理。

Gateway 職責之3: 服務熔斷

統(tǒng)一開發(fā)框架——API網關構建微服務

在實際生產中,一些服務很有可能因為某些原因發(fā)生故障,如果此時不采取一些手段,會導致整個系統(tǒng)“雪崩”?;蛞蛳到y(tǒng)整體負載的考慮,會對服務訪問次數進行限制。服務熔斷、服務降級就是解決上述問題的主要方式。API Gateway可以幫助我們實現這些功能,對于服務的調用次數的限制,當某服務達到上限時,API Gateway會自動停止向上游服務發(fā)送請求,并像客戶端返回錯誤提示信息或一個統(tǒng)一的響應,進行服務降級。對于需要臨時發(fā)生故障的服務,API Gateway自動可以打開對應服務的斷路器,進行服務熔斷,防止整個系統(tǒng)“雪崩”。

Gateway 職責之4 : 灰度發(fā)布

統(tǒng)一開發(fā)框架——API網關構建微服務

服務發(fā)布上線過程中,我們不可能將新版本全部部署在生產環(huán)節(jié)中,因為新版本并沒有接受真實用戶、真實數據、真實環(huán)境的考驗,此時我們需要進行灰度發(fā)布,灰度發(fā)布可以保證整體系統(tǒng)的穩(wěn)定,在初始灰度的時候就可以發(fā)現、調整問題,同時影響小。API Gateway可以幫助我們輕松的完成灰度發(fā)布,只需要在API Gateway中配置我們需要的規(guī)則,按版本,API Gateway會自動為我們完成實際的請求分流。

Gateway 職責之5: 權限認證

統(tǒng)一開發(fā)框架——API網關構建微服務

不同的服務之間常常有一些共有的邏輯需要處理,比如權限認證,由于 Gateway 恰巧在各個微服務的前端,可以在 Gateway 實現權限的認證,比如可以在 Gateway 層實現 cookie 或 token 的認證。

Gateway 職責之6:限流

對于任何一類請求,都設置了容量上限,并不能無限制處理。Gateway可以為每類請求設置并發(fā)上限,當到達上限時,Gateway將不在轉發(fā)請求,而是直接返回,保護后端服務。如果在后端服務過載的情況下,仍然轉發(fā)請求,只會惡化問題。

Gateway 職責之7: 服務演進

借助 Gateway 你可以很方便的在 Gateway 之后部署不同的服務,也就是可以同時存在兩種不同的服務,這樣可以幫助單體應用向微服務漸進式的演化.

Gateway 職責之8:數據聚合

由于不同的客戶端往往需要的數據完全不同,而這些數據又是不同的 service 提供的,借助 Gateway 我們可以方便完成來自不同 service 的數據聚合,以達到根據不同 client 進行數據定制的目的

Gateway 職責之9:協(xié)議轉換

統(tǒng)一開發(fā)框架——API網關構建微服務

鑒于不同的團隊采用的數據協(xié)議可能完全不同,Gateway 可以根據場景需要對不同的微服務之間進行協(xié)議轉換,上圖是HTTP協(xié)議與Dubbo協(xié)議轉換的架構圖實現。

Gateway 職責之10:監(jiān)控報警

Gateway可以對接運維報警工具。當出現問題時,會及時報警,盡早發(fā)現問題,減少損失。

(三)API網關技術選型

主流API網關技術棧比較:

統(tǒng)一開發(fā)框架——API網關構建微服務

主流API網關技術說明:

目前比較成熟以及用的比較廣泛的網關有以下幾種:

  • Kong/kong:基于 OpenResty 那一套做的,依賴于 Nginx 強悍的性能,添加了動態(tài)服務管理功能,以及插件機制,語言是 lua.
  • Tyk:Tyk是一個開放源碼的API網關,它是快速、可擴展和現代的。Tyk提供了一個API管理平臺,其中包括API網關、API分析、開發(fā)人員門戶和API管理面板。Try 是一個基于Go實現的網關服務。
  • apiaxle: Nodejs 實現的一個 API 網關,適合非阻塞IO處理
  • Netflix zuul:Zuul是一種提供動態(tài)路由、監(jiān)視、彈性、安全性等功能的邊緣服務。Zuul是Netflix出品的一個基于JVM路由和服務端的負載均衡器。
  • SpringCloud gateway:SpringCloud社區(qū)推出的一個網關解決方案,成熟度上相比ZUUL來說還是差很多,沒有經過像ZUUL在Netflix的商用驗證。

選型考慮:

業(yè)務場景支持:

  • ZUUL作為一個網關平臺集,支持標準的Filter機制更容易和業(yè)務系統(tǒng)做集成,作為路由和過濾的公共功能機制更容易支持業(yè)務場景,更容易實現業(yè)務邏輯在網關平臺的落地。

技術成熟度及生態(tài):

  • ZUUL1,X基于Nefilx微服體系,本身經過Netflix商用,相對成熟,在加入SpringCloud微服務體系后如虎添翼,得到了SpringCloud/SpringBoot周邊基礎設施及生態(tài)體系在開發(fā)及運行時的大力支持。并且諸多互聯網公司采用ZUUL做API- 網關二次開發(fā), 例如:攜程,阿里巴巴等互聯網公司

成本效率:

  • ZUUL1在編程模型上基于消息線程1V1映射模型,相對控制邏輯比較簡單,在二次開發(fā)成本及與業(yè)務集成成本都是非常低的。

性能:

  • 在單機多核情況下ZUUL原始性能非常接近Nginx. 并且可以通過ZUUL集群水平擴展網關性能。

綜上我們采用了ZUUL作為我們的二次開發(fā)平臺。

(四)API網關架構與設計

4.1 物理架構部署圖:

網關的調用方主要包括瀏覽器,應用服務,App應用,以及三方開發(fā)者和其他業(yè)務調用方。通過LVS做負載均衡,網關應用調用到實際的業(yè)務集群。

統(tǒng)一開發(fā)框架——API網關構建微服務

4.2 網關邏輯架構圖:

API網關基于ZUUL-Core及SpringCloud體系架構,對Zuul-Core中的FilterLoader及基于ZUUL中的Locator機制都做了相應的二次開發(fā),支持相應的特性功能。下圖是API-GateWay的整體架構圖。

統(tǒng)一開發(fā)框架——API網關構建微服務

4.3 網關業(yè)務模塊圖:

網關生態(tài)基于統(tǒng)一開發(fā)框架,內部主要包含控制臺、網關核心、網關統(tǒng)計與監(jiān)控三大模塊:

  • 控制臺主要對API生命周期進行管理,以及ACL、流量管控等功能;
  • 網關核心主要處理API調用,包含鑒權、限流、路由、第三方Filter動態(tài)加載等功能;

統(tǒng)計與監(jiān)控模塊主要完成API調用的統(tǒng)計和監(jiān)控報警

統(tǒng)一開發(fā)框架——API網關構建微服務

4.5 網關核心設計

  • 動態(tài)路由:實現路由表的動態(tài)創(chuàng)建,動態(tài)加載,動態(tài)發(fā)布,下線等服務。

統(tǒng)一開發(fā)框架——API網關構建微服務

動態(tài)Filter:改變了ZUUL默認基于Groovy的Filter加載機制,采用基于JAVA-jar包的動態(tài)Filter加載,對業(yè)務邏輯集成到網關平臺更加方便友好,業(yè)務同事只需要關注業(yè)務邏輯,屏蔽了網關底層的技術實現細節(jié)。

統(tǒng)一開發(fā)框架——API網關構建微服務

  • 靈活的路由綁定: 實現可視化的路由ID與服務組件的動態(tài)綁定功能

統(tǒng)一開發(fā)框架——API網關構建微服務

二級緩存:網關高性能特性要求,需要一個高性能的本地緩存負責一些配置關鍵信息:例如;路由表;黑白名單等等。

統(tǒng)一開發(fā)框架——API網關構建微服務

藍綠部署:在服務不停機的情況下, 實現根據版本信息的流量切換,增加系統(tǒng)的SLA水平。目前可以實現基于相同服務名下,不同版本服務注冊在同一個Eureka注冊中心的新舊版本服務切換。

統(tǒng)一開發(fā)框架——API網關構建微服務

控制臺:控制臺功能是API網關的一個主要功能, 開發(fā)人員只需要通過控制臺就可以自助的完成路由的創(chuàng)建,公共組件的路由綁定等服務。

統(tǒng)一開發(fā)框架——API網關構建微服務

統(tǒng)一開發(fā)框架——API網關構建微服務

統(tǒng)一開發(fā)框架——API網關構建微服務

統(tǒng)一開發(fā)框架——API網關構建微服務

  • 數據統(tǒng)計,預警,日志:這些是網關OLAP方面的服務,通過網關可以增強對業(yè)務系統(tǒng)的監(jiān)控預警和輔助管理等功能。

統(tǒng)一開發(fā)框架——API網關構建微服務

此外,我們還會對ZUUL自帶的線程池隔離機制;鏈式處理機制做進一步的深度開發(fā)整合,以及后續(xù)我們陸續(xù)會開發(fā)和SLA相關的一些功能包括熔斷降級;限流保護等等功能

(五)總結

API Gateway在微服務架構中起到了至關重要的作用。在文章中我們介紹了什么是API Gateway以及為什么需要API Gateway。API Gateway它作為微服務系統(tǒng)的大門,向我們提供了請求轉發(fā),服務熔斷,限流流控等公共功能,它又統(tǒng)一整合了各個微服務,對外屏蔽了系統(tǒng)的復雜性和差異性。

介紹了我們在網關技術選型主要基于什么考慮做技術選型方面的工作,以及API網關系統(tǒng)的架構設計,及主要功能模塊等內容。

隨后我們會給業(yè)務系統(tǒng)開發(fā)同事提供接入網關平臺的第三方組件開發(fā)規(guī)范;以及后續(xù)在測試環(huán)境,生產環(huán)境部署發(fā)布服務流程及使用文檔說明,使網關平臺逐漸工具化,幫助業(yè)務系統(tǒng)更好實踐微服務及提升整體SLA水準。

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多