Nepxion DiscoverySpring Cloud 服务注册发现增强中间件
Nepxion Discovery是一款对Spring Cloud的服务注册发现的增强中间件,其功能包括多版本灰度发布,黑/白名单的IP地址过滤,限制注册等,支持Eureka、Consul和Zookeeper。现有的Spring Cloud微服务可以方便引入该插件,代码零侵入,使用者只需要做如下简单的事情:
引入相关Plugin Starter依赖到pom.xml
必须为微服务定义一个版本号(version),在application.properties或者yaml的metadata里
必须为微服务自定义一个便于为微服务归类的Key,例如组名(group)或者应用名(application),在application.properties或者yaml的metadata里,便于远程配置中心推送和灰度界面分析
使用者只需要关注相关规则推送。可以采用如下方式之一
通过远程配置中心推送规则
通过控制台界面推送规则
通过客户端工具(例如Postman)推送推测
功能
实现对基于Spring Cloud的微服务和Zuul网关的支持
具有极大灵活性 - 支持在任何环节做过滤控制和版本灰度发布
具有极小限制性 - 只要开启了服务注册发现,程序入口加了@EnableDiscoveryClient
实现服务注册层面的控制
基于黑/白名单的IP地址过滤机制禁止对相应的微服务进行注册
基于最大注册数的限制微服务注册。一旦微服务集群下注册的实例数目已经达到上限,将禁止后续的微服务进行注册
实现服务发现层面的控制
基于黑/白名单的IP地址过滤机制禁止对相应的微服务被发现
基于版本配对,通过对消费端和提供端可访问版本对应关系的配置,在服务发现和负载均衡层面,进行多版本访问控制
实现灰度发布
通过规则改变,实现灰度发布
通过版本切换,实现灰度发布
实现通过XML进行上述规则的定义
实现通过事件总线机制(EventBus)的功能,实现发布/订阅功能
对接远程配置中心,默认集成阿里巴巴的Nacos,异步接受远程配置中心主动推送规则信息,动态改变微服务的规则
结合Spring Boot Actuator,异步接受Rest主动推送规则信息,动态改变微服务的规则
结合Spring Boot Actuator,动态改变微服务的版本
在服务注册层面的控制中,一旦禁止注册的条件触发,主动推送异步事件,以便使用者订阅
实现通过Listener机制进行扩展
使用者可以自定义更多的规则过滤条件
使用者可以对服务注册发现核心事件进行监听
实现支持Spring Boot Actuator和Swagger集成
实现独立控制台,支持对规则和版本集中管理,未来考虑界面实现
实现支持未来扩展更多的服务注册中心
实现图形化的灰度发布功能
架构
简单描述一下,本系统的核心模块“基于版本控制的灰度发布”,从网关(Zuul)开始的灰度发布操作过程
灰度发布前
假设当前生产环境,调用路径为网关(V1.0)->服务A(V1.0)->服务B(V1.0)
运维将发布新的生产环境,部署新服务集群,服务A(V1.1),服务B(V1.1)
由于网关(1.0)并未指向服务A(V1.1),服务B(V1.1),所以它们是不能被调用的
灰度发布中
新增用作灰度发布的网关(V1.1),指向服务A(V1.1)->服务B(V1.1)
灰度网关(V1.1)发布到服务注册发现中心,但禁止被服务发现,网关外的调用进来无法负载均衡到网关(V1.1)上
在灰度网关(V1.1)->服务A(V1.1)->服务B(V1.1)这条调用路径做灰度测试
灰度测试成功后,把网关(V1.0)指向服务A(V1.1)->服务B(V1.1)
灰度发布后
下线服务A(V1.0),服务B(V1.0),灰度成功
灰度网关(V1.1)可以不用下线,留作下次版本上线再次灰度发布
架构图
兼容
版本兼容情况
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服务器版本(或者更高),从https://releases.hashicorp.com/consul/1.2.1/获取
Spring Cloud C版、D版和E版,必须采用Consul的0.9.3服务器版本(或者更低),从https://releases.hashicorp.com/consul/0.9.3/获取
Zookeeper
Spring Cloud F版,必须采用Zookeeper的3.5.x服务器版本(或者更高)
Spring Cloud C版、D版和E版,最好采用Zookeeper的3.5.0以下服务器版本(或者更低)
Eureka
跟Spring Cloud版本保持一致