服务 发现模块
1. 概述
1.1 模块名称
Discovery
1.2 设计
-
模块设计图

-
数据库设计

1.3 模块功能
Discovery 模块赋予了 ShenYu 网关一种主动感知和响应被代理服务列表变化的能力。 通过 Discovery 网关 admin 服务的主动监听,ShenYu 网关能够及时掌握被代理服务的变动情况。 这一功能的设计具有灵活性,可以根据需要在选择器级别或插件级别进行配置。 目前,已经引入了 Discovery 功能的插件包括 TCP 插件、Divide 插件、Websocket 插件和 gRPC 插件。
1.4 监听模式
LOCAL, ZOOKEEPER, NACOS, EUREKA, ETCD
- LOCAL 模式: 主要依靠手动维护 upstream 列表,并推送到网关;
- ZOOKEEPER 模式: 监听 ZooKeeper 中指定节点下临时节点的变化来获取数据;
- NACOS 模式:监听 Nacos 中指定服务名称下实例的变化来获取数据;
- EUREKA 模式: 监听 Eureka 中指定服务名称下实例的变化来获取数据;
- ETCD 模式:通过监听 etcd 中指定节点键值对的变化来获取数据。
1.5 作用范围
- 插件级别:影响整个插件,所有该插件下的选择器都将默认采用当前的监听模式;
- 选择器级别:适用于当前选择器,对于当前插件下的不同选择器,可以使用不同的监听模式。
2. 使用
2.1 插件级别配置
2.1.1 服务发现配置
- 在支持 Discovery 模块的插件中(当前只有 TCP 插件支持在admin控制台页面,进行插件级别 discovery 配置,其他插件可以通过 shenyu-client 进行插件级别 discovery 配 置,见下文中的“配合Shenyu-client使用”), 点击
服务发现配置, 在弹出的表单中,选择需要的监听模式, 并填写服务发现名称、注册服务器URL、注册中心配置参数等:


2.1.2 在选择器中使用
-
点击
添加选择器,在新增选择器页面中,我们发现类型强制选择刚才配置的插件级监听模式,表示所添加的选择器也将采用相同的配置。 此时,仅需输入需要监听的监听节点:
-
这里的
转换处理是指,ShenYu 规定的 upstream 注册数据是以下 JSON 格式传输,包括:- url: upstream 的 url
- protocol: upstream 的通信协议
- status: upstream 节点的状态 (0: healthy, 1: unhealthy)
- weight: 权重,计算负载均衡时使用
{"url": "127.0.0.1::6379","protocol": "tcp","status": 0,"weight": 10} -
如果您的服务别名与ShenYu定义的JSON格式不匹配,您可以在
转换处理中进行别名映射。 例如,如上图所示,如果您需要将"status"改为"healthy",而保留其他键不变, 进行如下操作:起一个新的别名,将"status"映射为"healthy", 同时保留原有JSON键的形式。 -
进行选择器剩余的属性的配置,详情见具体插件对应的文档。
2.2 选择器级别配置
- 在支持 Discovery 模块的插件中,点击
添加选择器,在服务发现标签页中, 配置类型、监听节点、服务器URL列表、注册中心参数等字段内容,配置内容仅对当前选择器有效,每次新增选择器需要重新配置。

- 对于Divide、gRPC、Websocket插件,添加选择器页面有
导入后台服务发现配置功能, 指的是,如果服务接入 ShenYu 网关时配置了 shenyu-discovery 相关的属性(见配合shenyu-client使用),可以选择导入并沿用后台的配置,如下图我们首先点击导入后台服务发现配置查看后台配置:

- 如果确认导入,点击后台 配置弹出框中的
导入按钮后,后台的服务发现属性将会自动填充进表单, 此时仅需要再配置监听节点:

注意:如果确认导入后台配置,后台的服务发现属性将会自动填充进表单,并沿用之前的discovery对象, 此时,在表单中修改服务发现属性将无效,依然保持后台配置。
- 若选择了 LOCAL 模式,则无需接入注册中心,用户需要手动维护 upstream 列表。
3. 不同模式下的配置
3.1 local模式
- local模式只支持选择器级别的配置。无需接入注册中心,用户需要手动维护 upstream 列表。这里的列表是一个可编辑表格,
点击表格每行的
编辑按钮,可以对 upstream 的每个参数进行修改:

3.2 ZooKeeper/Nacos/Eureka/Etcd模式
- ZooKeeper/Nacos/Eureka/Etcd模式下,支持插件级别和选择器级别的服务发现配置。
- 针对每个模式下的注册中心属性,以zookeeper为例,用户可以在
shenyu-admin--> 基础配置 --> 字典管理 中,搜索字典名称为“zookeeper”,对默认属性对应的字典值进行修改编辑 (注意:不可修改字典类型和字典名称)。 - 这些模式下,网关会动态地从注册中心获取服务实例信息,服务实例的新增、下线、修改等,将会实时显示在 upstream 列表中。

4. 配合 Shenyu-client 使用
4.1 介绍
- 与 shenyu-client 配合使用需要依赖对应模式的注册中心中间件:zookeeper,nacos,etcd,eureka,这些模式可以通过Shenyu Admin实现自动感知服务的上线和下线。
- 另外,如果您使用了 local 模式,则需要手动维护upstream列表。
- shenyu-client 使用详见 shenyu-client 模块。