内容简介:作者:little-cui现在使用ServiceComb开发的微服务已经支持多数据中心服务发现,这个特性主要是依赖于服务管理中心ServiceCenter的多注册中心Adaptor架构设计。
作者:little-cui
现在使用ServiceComb开发的微服务已经支持多数据中心服务发现,这个特性主要是依赖于服务管理中心ServiceCenter的多注册中心Adaptor架构设计。
多注册中心Adaptor架构
从图中可以知,ServiceCenter实现了多种注册中心的Adaptor,如基于客户端注册的etcd和基于平台注册的kubernetes;其中也包括ServiceCenter自身。ServiceCenter会将配置中声明的Adaptor类型(声明方式下面会详述)找到对应的实现类,并注册到Aggregator中,Aggregator定期(默认30秒)通过这些类的实例的discovery接口拉取已注册的微服务实例信息。这样设计的好处是方便扩展各类注册中心的Adaptor,方式就是实现discovery接口即可。另一个好处就是Adaptor可以按配置多次被实例化,也就是支持同时接入不同的注册中心,ServiceCenter支持多数据中心服务发现的特性也正是依赖这一点实现的。
多数据中心服务发现
每个数据中心会部署一套ServiceCenter集群,且集群的每个实例配置中会声明该集群的别名和各个数据中心ServiceCenter集群完整的地址列表,下面是一个例子:
| Cluster | Datacenter | Address |
|---|---|---|
| sc-1-1 | dc-1 | 10.12.0.1 |
| sc-1-2 | dc-1 | 10.12.0.2 |
| sc-2-1 | dc-2 | 10.12.1.1 |
| sc-2-2 | dc-2 | 10.12.1.2 |
| sc-3-1 | dc-3 | 10.12.2.1 |
| sc-3-2 | dc-3 | 10.12.2.2 |
我们假设在三个数据中心dc-1/2/3中分别部署一套ServiceCenter集群(高可靠)sc-1/2/3,并使得注册到本数据中心的ServiceCenter的微服务可以发现并调用其它数据中心的微服务,当然,前提是数据中心之间的网络是互通的。
以配置一个数据中心的ServiceCenter为例,打开编辑ServiceCenter程序目录下 conf/app.conf
# 服务监听地址
httpaddr = 10.12.0.1
# 配置服务发现的插件类型
discovery_plugin = aggregate
# 注册etcd和ServiceCenter两种服务发现机制
aggregate_mode = "etcd,servicecenter"
# 配置服务注册的插件类型
registry_plugin = etcd
# 当前集群名称后端注册中心的访问地址
manager_name = "sc-1"
manager_addr = "${ETCD_CLIENT_URLS}"
manager_cluster = "sc-1=http://10.12.0.1:30100,http://10.12.0.1:30100,sc-2=http://10.12.1.1:30100,http://10.12.1.1:30100,sc-3=http://10.12.2.1:30100,http://10.12.2.1:30100"
# 自动拉取实例周期
auto_sync_interval = 30s复制代码
这里解释一下上述配置, aggregate_mode 会让Aggregator创建etcd adaptor和servicecenter adaptor实例,etcd adaptor主要是让ServiceCenter支持本数据中心的微服务使用客户端注册方式接入,而servicecenter adaptor主要是拉取其它数据中心的ServiceCenter集群的微服务实例信息; manager_addr 指明etcd的访问地址; manager_cluster 指明各个数据中心ServiceCenter集群的完整地址列表。
- 注:其它数据中心部署时,只需要对应更新
httpaddr,manager_name,manager_addr配置即可。
scctl --addr http://10.12.0.1:30100 get cluster # CLUSTER | ENDPOINTS # +---------+-------------------------+ # sc-1 | http://10.12.0.1:30100 # | http://10.12.0.2:30100 # sc-2 | http://10.12.1.1:30100 # ...复制代码
Example
这里演示了一个很简单的例子,例子引用的微服务均为微服务开发框架 go-chassis 中的 example 。
| Microservice | Datacenter | Address |
|---|---|---|
| Client | dc-1 | 10.12.0.3 |
| Server | dc-2 | 10.12.1.3 |
我们假设微服务Client部署到数据中心dc-1,Server部署到数据中心dc-2中。
启动微服务Server
打开编辑配置文件
vi examples/discovery/server/conf/chassis.yaml复制代码
修改如下
cse:
service:
registry:
type: servicecenter
address: http://10.12.1.1:30100 # the address of SC in dc-2复制代码
运行
go run examples/discovery/server/main.go复制代码
启动微服务Client
打开编辑配置文件
vi examples/discovery/client/conf/chassis.yaml复制代码
修改如下
cse:
service:
registry:
type: servicecenter
address: http://10.12.0.1:30100 # the address of SC in dc-1复制代码
运行
go run examples/discovery/client/main.go复制代码
确认调用成功
由于Client微服务没有暴露外部访问接口,所以这里我们只需要检查它的调用日志即可。
2018-09-29 10:30:25.556 +08:00 INFO registry/bootstrap.go:69 Register [Client] success ... 2018-09-29 10:30:25.566 +08:00 WARN servicecenter/servicecenter.go:324 55c783c5c38e11e8951f0a58ac00011d Get instances from remote, key: default Server 2018-09-29 10:30:25.566 +08:00 INFO client/client_manager.go:86 Create client for highway:Server:127.0.0.1:8082 ... 2018/09/29 10:30:25 AddEmploy ------------------------------ employList:<name:"One" phone:"15989351111" > 复制代码
观察日志我们可以知道,部署在不同的数据中心的微服务相互发现和相互调用。
更多高级特性,可参考文档
以上所述就是小编给大家介绍的《ServiceComb如何支持多数据中心微服务发现》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Beautiful Code
Greg Wilson、Andy Oram / O'Reilly Media / 2007-7-6 / GBP 35.99
In this unique work, leading computer scientists discuss how they found unusual, carefully designed solutions to difficult problems. This book lets the reader look over the shoulder of major coding an......一起来看看 《Beautiful Code》 这本书的介绍吧!