Discovery【探索】云原生微服务解决方案
如果您觉得本框架具有一定的参考价值和借鉴意义,请帮忙在页面右上角 [Star]
简介
作者简介
- Nepxion开源社区创始人
- 2020年阿里巴巴中国云原生峰会出品人
- 2020年被Nacos和Spring Cloud Alibaba纳入相关开源项目
- 2021年阿里巴巴技术峰会上海站演讲嘉宾
- 2021年荣获陆奇博士主持的奇绩资本,进行风险投资的关注和调研
- 2021年入选Gitee最有价值开源项目
- 阿里巴巴官方书籍《Nacos架构与原理》作者之一
- Nacos Group Member、Spring Cloud Alibaba Member
- Spring Cloud Alibaba、Nacos、Sentinel、OpenTracing Committer & Contributor
商业合作
① Discovery系列
框架名称 | 框架版本 | 支持Spring Cloud版本 | 使用许可 |
---|---|---|---|
Discovery | 1.x.x ~ 6.x.x | Camden ~ Hoxton | 开源,永久免费 |
DiscoveryX | 7.x.x | 2020 | 闭源,商业许可 |
DiscoveryX | 8.x.x | 2021 | 闭源,商业许可 |
② Polaris系列
Polaris为Discovery高级定制版,特色功能
- 基于Nepxion Discovery集成定制
- 多云、多活、多机房流量调配
- 跨云动态域名、跨环境适配
- DCN、DSU、SET单元化部署
- 组件灵活装配、配置对外屏蔽
- 极简低代码PaaS平台
框架名称 | 框架版本 | 支持Discovery版本 | 支持Spring Cloud版本 | 使用许可 |
---|---|---|---|---|
Polaris | 1.x.x | 6.x.x | Finchley ~ Hoxton | 闭源,商业许可 |
Polaris | 2.x.x | 7.x.x | 2020 | 闭源,商业许可 |
Polaris | 3.x.x | 8.x.x | 2021 | 闭源,商业许可 |
有商业版需求的企业和用户,请添加微信1394997,联系作者,洽谈合作事宜
入门资料
① 快速入门
② 解决方案
③ 平台界面
④ 框架源码
⑤ 指南示例源码
⑥ 指南示例说明
- 对于入门级玩家,参考6.x.x指南示例极简版,分支为6.x.x-simple
- 对于熟练级玩家,参考6.x.x指南示例精进版,分支为6.x.x。除上述《极简版》功能外,涉及到指南篇里的绝大多数高级功能
- 对于骨灰级玩家,参考6.x.x指南示例高级版,分支为6.x.x-complex。除上述《精进版》功能外,涉及到指南篇里的ActiveMQ、MongoDB、RabbitMQ、Redis、RocketMQ、MySQL等高级调用链和蓝绿灰度调用链的整合
- 上述指南实例分支是针对Spring Cloud Finchley ~ Hoxton版本。对于Spring Cloud 202x版本,参考7.x.x ~ 8.x.x指南示例精进版,分支为master
① 解决方案
② 框架源码
③ 指南示例源码
④ 指南示例说明
- Spring Cloud Finchley ~ Hoxton版本,参考1.x.x指南示例,分支为1.x.x
- Spring Cloud 202x版本,参考2.x.x ~ 3.x.x指南示例,分支为master
功能概述
Nepxion Discovery Platform基于Nepxion Discovery 6.x.x版和Spring Cloud Hoxton版制作,也支持和兼容Spring Cloud Edgware版 ~ 202x版接入,支持如下功能
- 支持四个注册中心
- 支持六个配置中心
- 支持MySQL数据库和H2内存数据库,用户可以无缝扩展到其它数据库(例如,Oracle)
- 支持数据库方式登录和Ldap方式登录
- 支持Shiro和JWT的登录以及鉴权
- 支持管理员/角色/权限配置
- 支持页面配置,在线添加、删除、修改各类中间件主页或者业务系统主页的集成以及跳转
- 支持蓝绿灰度链路编排
- 支持链路单写数据,采用类似Apollo版本控制模式,界面标识增/删/改标识,通过发布方式达到数据库和配置中心最终数据一致性
- 支持版本和区域维度链路编排
- 支持蓝绿灰度混合发布
- 支持蓝绿灰度策略双写数据库和配置中心,采用类似Apollo版本控制模式,界面标识增/删/改标识,通过发布方式达到数据库和配置中心最终数据一致性
- 支持版本和区域维度蓝绿灰度
- 支持蓝绿灰度策略启用/禁用模式
- 支持蓝绿灰度策略多实例动态路由一致性检查
- 支持网关、服务、组为入口
- 支持全局兜底、蓝绿兜底、灰度兜底策略编排
- 支持无限级蓝绿灰度策略编排
- 支持自定义蓝绿条件策略
- 支持蓝绿条件策略校验
- 支持内置Header
- 支持双网关动态路由
- 支持网关动态路由双写数据库和配置中心,采用类似Apollo版本控制模式,界面标识增/删/改标识,通过发布方式达到数据库和配置中心最终数据一致性
- 支持网关动态路由启用/禁用模式
- 支持网关动态路由多实例一致性检查
- 支持Spring Cloud Gateway内置断言器(基于Path、Host、Header、Cookie、Query、Method、RemoteAddr、Weight等无代码方式)和过滤器(基于StripPrefix、PrefixPath、RewritePath、RequestRateLimiter、CircuitBreaker、AddRequestHeader、AddRequestParameter、AddResponseHeader、RedirectTo等无代码方式)
- 支持用户自定义断言器和过滤器,可以实现类似Access Token、网页访问黑/白名单,自定义用户数据(List和Map结构)过滤等低代码方式
- 支持Zuul网关内置动态路由
- 支持服务负载屏蔽的黑名单实例摘除
- 支持黑名单双写数据库和配置中心,采用类似Apollo版本控制模式,界面标识增/删/改标识,通过发布方式达到数据库和配置中心最终数据一致性
- 支持黑名单启用/禁用模式
- 支持黑名单多实例一致性检查
- 基于时间戳前缀的全局唯一ID黑名单
- 基于IP地址和端口黑名单
- 支持界面显示所连的注册中心和配置中心
请访问https://github.com/Nepxion/DiscoveryPlatform获取源码和示例
郑重致谢
感谢如下小伙伴参与本平台的开发、测试和部署。下面名单根据加入次序进行排序
- 张宁
- 付向阳
- 刘辉
- 赵胜杰
- 任学会
- 肖龙
- 伊安娜
请联系我
微信、钉钉、公众号和文档
目录
工程架构
工程清单
配置清单
配置文件位于discovery-platform-application/目录下
架构核心
依赖引入
① 服务注册发现依赖引入
服务注册发现中间件的四个插件,必须引入其中一个
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<!-- <groupId>org.springframework.cloud</groupId> -->
<!-- <artifactId>spring-cloud-starter-consul-discovery</artifactId> -->
<!-- <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> -->
<!-- <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId> -->
</dependency>
② 配置中心依赖引入
配置中心中间件的六个插件,选择引入其中一个
<dependency>
<groupId>com.nepxion</groupId>
<artifactId>discovery-console-starter-nacos</artifactId>
<!-- <artifactId>discovery-console-starter-apollo</artifactId> -->
<!-- <artifactId>discovery-console-starter-redis</artifactId> -->
<!-- <artifactId>discovery-console-starter-zookeeper</artifactId> -->
<!-- <artifactId>discovery-console-starter-consul</artifactId> -->
<!-- <artifactId>discovery-console-starter-etcd</artifactId> -->
</dependency>
③ 数据库依赖引入
MySQL数据库和H2内存数据库,选择引入其中一个
<dependency>
<groupId>com.nepxion</groupId>
<artifactId>discovery-platform-starter-server-mysql</artifactId>
<!-- <artifactId>discovery-platform-starter-server-h2</artifactId> -->
</dependency>
④ Ldap依赖引入
如果使用者希望通过Ldap方式登录平台,那么需要引入如下依赖
<dependency>
<groupId>com.nepxion</groupId>
<artifactId>discovery-platform-starter-server-ldap</artifactId>
</dependency>
环境搭建
使用者可以直接使用云环境进行体验,也可以通过本地环境搭建进行体验
云环境体验
云环境服务注册发现和配置中心
采用Nacos作为服务注册发现和配置中心
http://218.78.55.64:8848/nacos
云环境平台登录
浏览器上输入http://218.78.55.64:6001/platform,初始用户名和密码为admin/admin
登录页面底部为重要的链接以及快速联系我们的方式
云环境调用验证
通过改变Http Parameter参数验证蓝绿灰度等一系列功能,例如,在浏览器上输入如下地址,根据a值的改变,观测返回的调用结果是否符合预期
http://218.78.55.64:5001/discovery-guide-service-a/invoke/gateway?a=1
本地环境搭建
运行示例
参考《如何快速搭建和运行示例》的Wiki文章
启动平台
使用者可以复制discovery-platform-application目录单独导入IDE或者编译成可执行包运行
选择下面其中一个运行,需要实现确认相关配置的正确性
- PlatformMySqlApplication.java,基于MySql数据库的运行入口
- PlatformH2Application.java,基于H2内存数据库的运行入口
提醒:基于H2内存数据库模式的平台,需要事先启动H2内存数据库服务器,从如下链接下载、安装并运行
http://h2database.com/html/download.html
本地环境平台登录
参考云环境平台登录,把IP地址改成localhost即可
本地环境调用验证
参考云环境调用验证,把IP地址改成localhost即可
主页
服务发布
链路编排
链路编排,即在全链路蓝绿发布或者灰度发布的过程中,把若干个服务的实例按照版本/区域维度实现编排成N个逻辑链路。举个例子,根据生产环境上服务的版本新旧,编排成新版本链路和旧版本链路,供蓝绿发布进行条件驱动,或者供灰度发布进行百分比驱动
链路编排功能引入,具有如下的意义
- 蓝绿发布和灰度发布混合实施的时候,编排的链路可以供两种发布规则策略共享
- 蓝绿发布和灰度发布结束后,使用者不需要删除发布的规则策略,而是
禁用
它,以便于下一轮发布,不再重复配置,只需要开启
它,并发布
即可 - 蓝绿发布和灰度发布下一轮开始时,条件策略等未改变,只是改变链路中的服务列表,使用者只需要直接编辑
链路编排
中的相关链路,并发布
即可
导航栏上选择〔服务发布〕/〔链路编排〕,进入链路编排界面
新增链路
② 产生〔链路标识〕
链路标识由系统自动产生,格式为route-序号
,全局唯一,它将作为蓝绿灰度发布时候被策略绑定的唯一标识
③ 确定〔策略类型〕
策略类型,包括版本
和区域
。如果选择版本
,则按照版本
维度进行链路编排;如果选择区域
,则按照区域
维度进行链路编排。下文以〔版本〕为例
④ 编辑链路列表
包括如下步骤
- 选择〔服务名〕,通过下拉的服务列表进行选择,使用者也可以通过手工输入自动匹配方式进行选择
- 选择〔版本〕,通过下拉的版本号列表进行选择,使用者也可以通过手工输入自动匹配方式进行选择
- 刷新链路〔服务名〕和〔版本〕下拉列表,点击〔操作〕列下的 按钮进行刷新
- 增加链路,点击〔操作〕列下的 按钮进行增加
- 删除链路,点击〔操作〕列下的 按钮进行删除
⑤ 执行保存
发布链路
执行保存后,主界面会把该条数据进行标识,〔状态〕列上显示 ,〔链路标识〕列上显示
提醒:一般情况下,新增链路不需要执行发布,当蓝绿灰度发布的时候,会连带执行链路发布。但是,当链路进行了修改的时候,可以通过链路发布自下而上进行蓝绿灰度发布
删除链路
〔链路编排〕界面的表格上,打勾选择需要删除的一项或者多项
执行删除后,主界面会把该条数据进行标识,〔状态〕列上显示 ,〔链路标识〕列上显示
接下去执行发布链路
编辑链路
〔链路编排〕界面的表格上,点击〔操作〕列下的 按钮进行编辑,操作模式和过程与新增链路类似
执行编辑后,主界面会把该条数据进行标识,〔状态〕列上显示 ,〔入口名称〕列上显示
接下去执行发布链路
蓝绿灰度
导航栏上选择〔服务发布〕/〔蓝绿灰度〕,进入蓝绿灰度发布界面
新增蓝绿灰度
①〔蓝绿灰度〕界面的工具栏上,点击 或者 按钮,弹出相应的对话框。下文以〔版本蓝绿灰度〕为例
② 确定〔入口类型〕和〔入口名称〕
入口类型,包括网关
、服务
和组
,使用者在三个选项中选择一个,大多数场景会采用网关
为入口类型
网关
和服务
属于局部订阅模式,即把蓝绿灰度的规则策略推送到指定的网关或者服务上,只有入口名称
下拉框所选择的网关(或者服务)才能订阅该规则策略组
属于全局订阅模式,即把蓝绿灰度的规则策略推送到指定的组上,只有入口名称
下拉框所选择的组下的所有网关和服务才能订阅该规则策略
入口名称,通过下拉的网关、服务或者组列表进行选择,使用者也可以通过手工输入自动匹配方式进行选择。使用者可以通过右边的 按钮进行刷新
③ 添加和删除策略
策略,包括全局兜底策略
、蓝绿兜底策略
、蓝绿策略
、灰度兜底策略
和灰度策略
,平台默认给出一个蓝绿兜底策略
和两个蓝绿策略
的经典场景,使用者可以根据实际场景,增加和删除策略
兜底策略和非兜底策略的区别是,前者不带条件驱动,后者带条件驱动。为增加不同策略的辨识度,每个选项卡上前置图标用来区分,参考下表
图标 | 标识 |
---|---|
兜底策略 | |
蓝绿策略 | |
灰度策略 |
提醒:所有全局兜底策略
、蓝绿兜底策略
和灰度兜底策略
可以缺失,但只能生效一个;蓝绿策略
和灰度策略
可以缺失,但可以无数个。这五种策略的执行逻辑和优先级,参考如下的蓝绿灰度混合发布执行逻辑图
〔策略配置〕工具栏上,点击如下按钮进行相关操作
〔链路选取〕在链路编排中创建的链路标识,通过下拉的列表进行选择,使用者也可以通过手工输入自动匹配方式进行选择。使用者可以通过右边的 按钮进行刷新
操作模式和过程跟〔添加全局兜底策略〕
一致
3.〔添加蓝绿策略〕,点击 按钮,添加蓝绿策略。当使用者每添加一个蓝绿策略,选项卡会自动在蓝绿策略标题后数字加一
蓝绿策略配置,包括条件设置
和链路选取
两部分
条件设置
,包括如下步骤
- 输入〔参数名〕,参数名即进行条件驱动的
Header
、Parameter
、Cookie
参数 - 选择〔运算符〕,通过下拉的运算符列表进行选择,包括等于
=
、不等于!=
、大于>
、大于等于>=
、小于<
、小于等于<=
、匹配matches
七种运算符 - 选择〔关系符〕,通过下拉的关系符进行选择,包括与
and
、或or
两种关系符 - 输入〔值〕,值即进行条件驱动的
Header
、Parameter
、Cookie
参数的值 - 增加〔条件〕,点击〔操作〕列下的 按钮进行增加
- 删除〔条件〕,点击〔操作〕列下的 按钮进行删除
- 执行〔聚合〕条件,条件文本框里的表达式会通过上述操作自动聚合,如果一旦鼠标键盘事件事件问题,使用者也可以点击 按钮进行手工聚合
- 执行〔校验〕条件,当表达式组合项很多,使用者难以确定组合表达式是否正确,可以通过〔校验〕功能进行校验,点击 按钮弹出对话框,给参数赋值,看校验条件是否能通过
- 执行〔自定义条件〕,当上述〔运算符〕和〔关系符〕仍旧无法满足使用者的需求,那么使用者可以自定义条件,在条件文本框输入符合
Spel
规范的表达式即可
链路选取
,操作模式和过程跟〔添加全局兜底策略〕
一致
只需要〔流量配比〕若干条链路的百分比即可,包括如下步骤
- 选取在链路编排中创建的链路标识,通过下拉的列表进行选择,使用者也可以通过手工输入自动匹配方式进行选择。使用者可以通过右边的 按钮进行刷新
- 〔流量配比〕所选择链路,配比值必须是0 ~ 100的整数,所有链路的配比值加起来必须等于100
- 增加〔流量配比〕,点击〔操作〕列下的 按钮进行增加
- 删除〔流量配比〕,点击〔操作〕列下的 按钮进行删除
5.〔添加灰度策略〕,点击 按钮,添加灰度策略。当使用者每添加一个灰度策略,选项卡会自动在灰度策略标题后数字加一
条件设置
,操作模式和过程跟〔添加蓝绿策略〕
一致;流量配比
,操作模式和过程跟〔添加灰度兜底策略〕
一致
⑥ 设置〔内置参数〕
当前版本内置参数仅支持Header
,但内置Header
也具备代替Parameter
、Cookie
的作用。内置参数的应用场景多见于定时服务的蓝绿灰度发布场景
内置参数配置包括如下步骤
⑦ 执行保存
发布蓝绿灰度
执行保存后,主界面会把该条数据进行标识,〔状态〕列上显示 ,〔入口名称〕列上显示
上述保存步骤,只是保存到数据库中,并未推送到配置中心,需要在〔蓝绿灰度〕界面的工具栏上,点击 按钮进行推送
提醒:任何增、删、改蓝绿灰度,最终都必须通过点击 按钮进行生效
删除蓝绿灰度
〔蓝绿灰度〕界面的表格上,打勾选择需要删除的一项或者多项
执行删除后,主界面会把该条数据进行标识,〔状态〕列上显示 ,〔入口名称〕列上显示
接下去执行发布蓝绿灰度
编辑蓝绿灰度
〔蓝绿灰度〕界面的表格上,点击〔操作〕列下的 按钮进行编辑,操作模式和过程与新增蓝绿灰度类似,但〔入口类型〕和〔入口名称〕不可修改
执行编辑后,主界面会把该条数据进行标识,〔状态〕列上显示 ,〔入口名称〕列上显示
接下去执行发布蓝绿灰度
启用和禁用蓝绿灰度
〔蓝绿灰度〕界面的表格上,点击〔操作〕列下的 或者 按钮进行禁用或者启用
禁用
只是清除配置中心对应的规则策略,并不删除数据库中的规则策略,以便下一次启用
执行禁用或者启用后,主界面会把该条数据进行标识,〔状态〕列上显示 ,〔入口名称〕列上显示
接下去执行发布蓝绿灰度,主界面会把该条数据进行标识,〔状态〕列上显示 或者
查看蓝绿灰度拓扑图
待补充
查看正在工作的蓝绿灰度
① 选择〔入口类型〕和〔入口名称〕。使用者可以通过右边的 按钮进行刷新
② 界面自动给出符合所选择的〔入口类型〕和〔入口名称〕的服务实例列表,通过选项卡方式呈现出所属该服务实例的规则策略。如果所有服务实例的规则策略是一致的,那么会给出 的一致性提示,否则给出不一致性提示
提醒:一致性问题,可能是由于网络抖动、配置中心等多种原因,导致若干个服务实例订阅同一个配置,有些服务实例收到规则策略的更新,有些服务实例未收到规则策略的更新
流量侦测
待补充
实例管理
实例信息
待补充
实例摘除
新增黑名单
① 导航栏上选择〔实例管理〕/〔实例摘除〕,进入实例摘除配置界面。通过把服务实例放置到黑名单的方式达到服务实例摘除的目的
② 〔实例摘除〕界面的工具栏上,点击 按钮,弹出相应的对话框。黑名单类型,包括UUID
(全局唯一ID)和IP地址和端口
,使用者根据实际应用场景来选择
发布黑名单
〔实例摘除〕界面的工具栏上,点击 ,操作模式和过程与发布蓝绿灰度类似
删除黑名单
〔实例摘除〕界面的工具栏上,点击 ,操作模式和过程与删除蓝绿灰度类似
启用和禁用黑名单
操作模式和过程与启用和禁用蓝绿灰度类似
查看正在工作的黑名单
〔实例摘除〕界面的工具栏上,点击 ,操作模式和过程与查看正在工作的蓝绿灰度类似
待补充
路由配置
Gateway网关路由
新增Gateway网关路由
① 导航栏上选择〔路由配置〕/〔Gateway网关路由〕,进入Spring Cloud Gateway动态路由配置界面
② 〔Gateway网关路由〕界面的工具栏上,点击 按钮,弹出相应的对话框
根据Spring Cloud Gateway网关的官方配置规范,结合如下界面进行配置。其中,断言器和过滤器包括内置和自定义两种模式
内置断言器和过滤器模式是通过Spring Cloud Gateway网关内置相关类和解析模块来实现的,请参照界面提示进行配置
自定义断言器和过滤器是通过Spring Cloud Gateway网关使用者自定义和解析模块相关类来实现的,请参照界面提示进行配置
发布Gateway网关路由
〔Gateway网关路由〕界面的工具栏上,点击 ,操作模式和过程与发布蓝绿灰度类似
删除Gateway网关路由
〔Gateway网关路由〕界面的工具栏上,点击 ,操作模式和过程与删除蓝绿灰度类似
编辑Gateway网关路由
操作模式和过程与编辑蓝绿灰度类似
启用和禁用Gateway网关路由
操作模式和过程与启用和禁用蓝绿灰度类似
查看正在工作的Gateway网关路由
〔Gateway网关路由〕界面的工具栏上,点击 ,操作模式和过程与查看正在工作的蓝绿灰度类似
待补充
Zuul网关路由
新增Zuul网关路由
① 导航栏上选择〔路由配置〕/〔Zuul网关路由〕,进入Zuul动态路由配置界面
② 〔Zuul网关路由〕界面的工具栏上,点击 按钮,弹出相应的对话框
根据Zuul网关的官方配置规范,结合如下界面进行配置
发布Zuul网关路由
〔Zuul网关路由〕界面的工具栏上,点击 ,操作模式和过程与发布蓝绿灰度类似
删除Zuul网关路由
〔Zuul网关路由〕界面的工具栏上,点击 ,操作模式和过程与删除蓝绿灰度类似
编辑Zuul网关路由
操作模式和过程与编辑蓝绿灰度类似
启用和禁用Zuul网关路由
操作模式和过程与启用和禁用蓝绿灰度类似
查看正在工作的Zuul网关路由
〔Zuul网关路由〕界面的工具栏上,点击 ,操作模式和过程与查看正在工作的蓝绿灰度类似
基础应用
基础应用,一般为企业的内部中间件聚合模块,通过平台的左侧菜单入口进行页面弹出方式的跳转
新增、删除、修改基础应用外链,请参考页面设置
系统设置
页面设置
待补充
授权配置
管理员配置
新增管理员
① 导航栏上选择〔授权配置〕/〔管理员配置〕,进入管理员配置界面
② 〔管理员配置〕界面的工具栏上,点击 按钮,弹出相应的对话框
输入相关信息完成〔新增管理员〕
删除管理员
〔管理员配置〕界面的表格上,打勾选择需要删除的一项或者多项
编辑管理员
〔管理员配置〕界面的表格上,点击〔操作〕列下的 按钮,弹出相应的对话框
输入相关信息完成〔编辑管理员〕
重置管理员密码
〔管理员配置〕界面的表格上,点击〔操作〕列下的 按钮进行重置
角色配置
新增角色
① 导航栏上选择〔授权配置〕/〔角色配置〕,进入角色配置界面
② 〔角色配置〕界面的工具栏上,点击 按钮,弹出相应的对话框
输入相关信息完成〔新增角色〕
删除角色
〔角色配置〕界面的表格上,打勾选择需要删除的一项或者多项
编辑角色
〔角色配置〕界面的表格上,点击〔操作〕列下的 按钮,弹出相应的对话框
输入相关信息完成〔编辑角色〕
权限配置
新增权限
① 导航栏上选择〔授权配置〕/〔权限配置〕,进入权限配置界面
② 〔权限配置〕界面的工具栏上,点击 按钮,弹出相应的对话框
输入相关信息完成〔新增权限〕
删除权限
〔权限配置〕界面的表格上,打勾选择需要删除的一项或者多项
编辑权限
〔权限配置〕界面的表格上,点击〔操作〕列下的 按钮,完成权限编辑