作者:翁揚慧,網易杭州研究院雲計算技術部工程師

在上篇《網易雲輕舟微服務框架:服務治理無侵入的設計》中,我們解析了無侵入式的NSF Agent增強設計,實現無侵入的微服務治理,還需要與微服務開源組件完美結合。

業界知名的開源微服務開發框架當屬Spring Cloud和Dubbo,NSF微服務框架中深度整合了Spring Cloud,但又不僅僅局限於整合,我們在開源組件的基礎上做了很多改進,目的就是讓用戶能夠做到開箱即用,甚至都不需要了解其內部的工作原理、使用方式,無門檻就能在短時間內上手使用,應用到實際的開發項目中。

實時可視化斷路器配置

在微服務架構體系中,由於各個服務是獨立運行的,有可能由於網路原因或者服務自身問題導致調用故障或延遲,隨著服務調用的積壓,可能會出現「雪崩效應」,從而導致整體的服務崩潰;Netflix開源框架 Hystrix正是針對該問題設計實現了斷路器、線路隔離等一系列服務保護功能,該組件的目標在於通過控制那些訪問遠程系統、服務和第三方庫的節點,對延遲和故障提供更強大的容錯能力,使其具備服務降級、服務熔斷、線程和信號隔離、請求緩存、請求合併以及服務監控等強大功能。

原生的Hystrix參數配置基於另外一個Netflix開源組件Archaius,允許用戶能都動態配置參數並實時更新生效,但是Hystrix針對每一以單獨的方法都有將近幾十個參數,如何更有效的存放、快速修改生效這些參數成了開發者另外一個頭疼的問題。

在NSF微服務框架中,NSF Agent與NSF控制中心是基於GRPC長連接的,我們可以將所有的配置都存放在控制中心的資料庫上,並且在每次應用啟動的時候,通過長連接將配置動態下發到用戶的本地應用程序里實現動態更新。此外,結合Web可視化的配置設置界面,整個流程對於用戶來說可以說是非常便捷直觀,無需任何額外開發工作。

可細到方法級別的限流

NSF Agent提供了更加豐富的限流配置,上文提到的Hystrix本身提供了一種基於線程池數的配置,算是一種特殊的限流方式,可以直接通過管理平台進行配置從而控制某個業務的線程池數量佔用。

此外,傳統的基於QPS的限流也是能夠被支持的,NSF Agent基於開源的Google guava組件實現了更加精確的傳統意義上的限流功能;在大多數業務場景中,限流應該是針對介面級別的,例如一個電商業務,我們要控制後端的訂單服務在單位時間內的接收業務數量,從而保護業務不會因為活動促銷等導致流量飆升引起服務不可用,這是一種典型的介面級別的流量控制。

在實際的開發過程中,僅僅是精確到介面級別的限流往往是不夠的,介面級別能夠有效控制外部流量或者遠程調用,但卻無法控制到內部調用;例如一些特殊的場景下,比如涉及到付費的簡訊調用,由於簡訊業務的提供方式一個外部服務,我們無法在外部服務上做修改來實現流控,只能是在自身的服務里去做控制,這個時候基於方法級別的流控就能夠覆蓋這種場景,從而避免由於自身業務問題或者bug導致的大量調用產生巨額費用。

更豐富的負載均衡策略

NSF微服務框架中負載均衡是基於Ribbon組件,它也是Netflix的開源頂目,主要作用是提供客戶端的軟體負均衡演算法,它可以與服務發現Eureka無縫結合,將Netflix的中間層服務連接在一起。Ribbon窖戶端組件提供一系列完善配置項如連接超時,重試等。

通過Ribbon組件,用戶可以在配置文件中列出負載均衡需要備選的所有的機器,Ribbon會自動基於某種規則去連接這些機器,在多次請求過程中,從而可以實現一個負載均衡的流量處理規則。

默認Ribbon只提供了幾種基本的負載均衡演算法,比如簡單輪訓、隨機選擇、可用性過濾等等,相比於一些其它的RPC框架,在負載均衡的候選策略中可能會顯得稍顯單一,幸好Ribbon提供了一套完善的擴展機制,允許我們能夠自定義負載均衡演算法,NSF Agent正是基於這種便利性,在Ribbon默認的演算法基礎上額外擴展了一些負載均衡演算法,例如會話黏連等,這些擴展的負載均衡策略對用戶來說也是開箱即用。

支持複雜參數的分流規則

NSF Agent在Ribbon的基礎上額外擴展了一套分流組件,允許用戶可以通過管理平台的界面配置,根據實際每次調用的信息進行請求的分流;默認提供了3種參數分流判斷規則,分別是HTTP請求參數、HTTP請求Header以及Cookie欄位,用戶可以根據每個請求參數條件以及參數里對應具體某個欄位的值進行分流,分流的匹配規則支持閾值取模和名單列表兩種方式。

這種基於請求的分流擴展機制具備極高的靈活性,並且真正意義上做到了微服務框架與實際的業務代碼解耦,開發者只需根據實際的業務場景,設計好響應的匹配參數與匹配規則,就可以直接使用NSF Agent來進行對流量管理,例如客戶需要對所有的流量根據請求的地域來源分發到不同的實例進行不同的處理,只需通過配置好請求參數欄位與分流的匹配規則就能簡單實現,同樣用戶無需做任何額外的任何開發,更加高效,簡化了業務代碼的開發邏輯,這也正是我們設計這種無侵入式的Agent增強的初衷。

與Dubbo應用的兼容

考慮到一些用戶線上可能已經部署的Dubbo應用,NSF Agent也對Dubbo應用做了兼容,主要是以下三個方面:

  • 基於Eureka的Dubbo註冊中心擴展

針對與一些基於REST介面的Dubbo應用,例如早期的基於噹噹修改的DubboX應用,其本身暴露的就是HTTP介面,我們只需要在服務註冊和發現層面進行兼容即可,所幸Dubbo提供了豐富的擴展介面,NSF微服務組件中提供一個基於Eureka的Dubbo註冊中心擴展,允許用戶的Dubbo應用額外註冊到Eureka註冊中心,這樣新的Spring Cloud服務就能夠直接兼容並調用之前的Dubbo服務。

  • NSF Server兼容dubbon應用的管理

NSF微服務框架最核心的是提供了一套非常完善的、基於最佳實踐的流程化管理平台,因此對於Dubbo服務,我們通過在控制中心接入Dubbo註冊中心可以直接對Dubbo應用進行管理和配置,可以認為NSF控制中心是一套更加豐富的靈活的Dubbo Admin管理平台,此外,基於控制中心和NSF Agent,還額外對原來的Dubbo應用進行增強,提供了流控、熔斷等功能。

  • Dubbo應用與Spring Cloud應用的協議兼容

可能有些開發者不滿於此,要求新的Spring Cloud服務能夠兼容老的Dubbo協議,例如hessian二進位協議,NSF微服務框架中提供了網關組件,可以直接對Dubbo等協議進行兼容,允許用戶的請求在兩者之間進行無縫的轉換。

相關鏈接:

  • 網易雲輕舟微服務框架:服務治理無侵入的設計
  • 又讓馬兒跑又不讓吃草,微服務化如何完成低成本改造?
  • 恕我直言,你可能誤解了微服務
  • 支撐德邦快遞日進億元的微服務平台是如何設計的

推薦閱讀:

相关文章