Nepxion DiscoverySpring Cloud 服務(wù)注冊發(fā)現(xiàn)增強(qiáng)中間件
Nepxion Discovery是一款對Spring Cloud的服務(wù)注冊發(fā)現(xiàn)的增強(qiáng)中間件,其功能包括多版本灰度發(fā)布,黑/白名單的IP地址過濾,限制注冊等,支持Eureka、Consul和Zookeeper。現(xiàn)有的Spring Cloud微服務(wù)可以方便引入該插件,代碼零侵入,使用者只需要做如下簡單的事情:
引入相關(guān)Plugin Starter依賴到pom.xml
必須為微服務(wù)定義一個版本號(version),在application.properties或者yaml的metadata里
必須為微服務(wù)自定義一個便于為微服務(wù)歸類的Key,例如組名(group)或者應(yīng)用名(application),在application.properties或者yaml的metadata里,便于遠(yuǎn)程配置中心推送和灰度界面分析
使用者只需要關(guān)注相關(guān)規(guī)則推送??梢圆捎萌缦路绞街?/p>
通過遠(yuǎn)程配置中心推送規(guī)則
通過控制臺界面推送規(guī)則
通過客戶端工具(例如Postman)推送推測
功能
實(shí)現(xiàn)對基于Spring Cloud的微服務(wù)和Zuul網(wǎng)關(guān)的支持
具有極大靈活性 - 支持在任何環(huán)節(jié)做過濾控制和版本灰度發(fā)布
具有極小限制性 - 只要開啟了服務(wù)注冊發(fā)現(xiàn),程序入口加了@EnableDiscoveryClient
實(shí)現(xiàn)服務(wù)注冊層面的控制
基于黑/白名單的IP地址過濾機(jī)制禁止對相應(yīng)的微服務(wù)進(jìn)行注冊
基于最大注冊數(shù)的限制微服務(wù)注冊。一旦微服務(wù)集群下注冊的實(shí)例數(shù)目已經(jīng)達(dá)到上限,將禁止后續(xù)的微服務(wù)進(jìn)行注冊
實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)層面的控制
基于黑/白名單的IP地址過濾機(jī)制禁止對相應(yīng)的微服務(wù)被發(fā)現(xiàn)
基于版本配對,通過對消費(fèi)端和提供端可訪問版本對應(yīng)關(guān)系的配置,在服務(wù)發(fā)現(xiàn)和負(fù)載均衡層面,進(jìn)行多版本訪問控制
實(shí)現(xiàn)灰度發(fā)布
通過規(guī)則改變,實(shí)現(xiàn)灰度發(fā)布
通過版本切換,實(shí)現(xiàn)灰度發(fā)布
實(shí)現(xiàn)通過XML進(jìn)行上述規(guī)則的定義
實(shí)現(xiàn)通過事件總線機(jī)制(EventBus)的功能,實(shí)現(xiàn)發(fā)布/訂閱功能
對接遠(yuǎn)程配置中心,默認(rèn)集成阿里巴巴的Nacos,異步接受遠(yuǎn)程配置中心主動推送規(guī)則信息,動態(tài)改變微服務(wù)的規(guī)則
結(jié)合Spring Boot Actuator,異步接受Rest主動推送規(guī)則信息,動態(tài)改變微服務(wù)的規(guī)則
結(jié)合Spring Boot Actuator,動態(tài)改變微服務(wù)的版本
在服務(wù)注冊層面的控制中,一旦禁止注冊的條件觸發(fā),主動推送異步事件,以便使用者訂閱
實(shí)現(xiàn)通過Listener機(jī)制進(jìn)行擴(kuò)展
使用者可以自定義更多的規(guī)則過濾條件
使用者可以對服務(wù)注冊發(fā)現(xiàn)核心事件進(jìn)行監(jiān)聽
實(shí)現(xiàn)支持Spring Boot Actuator和Swagger集成
實(shí)現(xiàn)獨(dú)立控制臺,支持對規(guī)則和版本集中管理,未來考慮界面實(shí)現(xiàn)
實(shí)現(xiàn)支持未來擴(kuò)展更多的服務(wù)注冊中心
實(shí)現(xiàn)圖形化的灰度發(fā)布功能
架構(gòu)
簡單描述一下,本系統(tǒng)的核心模塊“基于版本控制的灰度發(fā)布”,從網(wǎng)關(guān)(Zuul)開始的灰度發(fā)布操作過程
灰度發(fā)布前
假設(shè)當(dāng)前生產(chǎn)環(huán)境,調(diào)用路徑為網(wǎng)關(guān)(V1.0)->服務(wù)A(V1.0)->服務(wù)B(V1.0)
運(yùn)維將發(fā)布新的生產(chǎn)環(huán)境,部署新服務(wù)集群,服務(wù)A(V1.1),服務(wù)B(V1.1)
由于網(wǎng)關(guān)(1.0)并未指向服務(wù)A(V1.1),服務(wù)B(V1.1),所以它們是不能被調(diào)用的
灰度發(fā)布中
新增用作灰度發(fā)布的網(wǎng)關(guān)(V1.1),指向服務(wù)A(V1.1)->服務(wù)B(V1.1)
灰度網(wǎng)關(guān)(V1.1)發(fā)布到服務(wù)注冊發(fā)現(xiàn)中心,但禁止被服務(wù)發(fā)現(xiàn),網(wǎng)關(guān)外的調(diào)用進(jìn)來無法負(fù)載均衡到網(wǎng)關(guān)(V1.1)上
在灰度網(wǎng)關(guān)(V1.1)->服務(wù)A(V1.1)->服務(wù)B(V1.1)這條調(diào)用路徑做灰度測試
灰度測試成功后,把網(wǎng)關(guān)(V1.0)指向服務(wù)A(V1.1)->服務(wù)B(V1.1)
灰度發(fā)布后
下線服務(wù)A(V1.0),服務(wù)B(V1.0),灰度成功
灰度網(wǎng)關(guān)(V1.1)可以不用下線,留作下次版本上線再次灰度發(fā)布
架構(gòu)圖

兼容
版本兼容情況
Spring Cloud F版,請采用4.x.x版本,具體代碼參考master分支
Spring Cloud C版、D版和E版,請采用3.x.x版本,具體代碼參考Edgware分支
4.x.x版本由于Swagger和Spring Boot 2.x.x版本的Actuator用法有沖突,故暫時不支持Endpoint功能,其他功能和3.x.x版本一致
中間件兼容情況
Consul
Spring Cloud F版,最好采用Consul的1.2.1服務(wù)器版本(或者更高),從https://releases.hashicorp.com/consul/1.2.1/獲取
Spring Cloud C版、D版和E版,必須采用Consul的0.9.3服務(wù)器版本(或者更低),從https://releases.hashicorp.com/consul/0.9.3/獲取
Zookeeper
Spring Cloud F版,必須采用Zookeeper的3.5.x服務(wù)器版本(或者更高)
Spring Cloud C版、D版和E版,最好采用Zookeeper的3.5.0以下服務(wù)器版本(或者更低)
Eureka
跟Spring Cloud版本保持一致
