ServiceComb如何支持多数据中心微服务发现

2024-03-11 02:40

本文主要是介绍ServiceComb如何支持多数据中心微服务发现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

现在使用ServiceComb开发的微服务已经支持多数据中心服务发现,这个特性主要是依赖于服务管理中心ServiceCenter的多注册中心Adaptor架构设计。

多注册中心Adaptor架构

architecture

从图中可以知,ServiceCenter实现了多种注册中心的Adaptor,如基于客户端注册的etcd和基于平台注册的kubernetes;其中也包括ServiceCenter自身。ServiceCenter会将配置中声明的Adaptor类型(声明方式下面会详述)找到对应的实现类,并注册到Aggregator中,Aggregator定期(默认30秒)通过这些类的实例的discovery接口拉取已注册的微服务实例信息。这样设计的好处是方便扩展各类注册中心的Adaptor,方式就是实现discovery接口即可。另一个好处就是Adaptor可以按配置多次被实例化,也就是支持同时接入不同的注册中心,ServiceCenter支持多数据中心服务发现的特性也正是依赖这一点实现的。

多数据中心服务发现

architecture

每个数据中心会部署一套ServiceCenter集群,且集群的每个实例配置中会声明该集群的别名和各个数据中心ServiceCenter集群完整的地址列表,下面是一个例子:

ClusterDatacenterAddress
sc-1-1dc-110.12.0.1
sc-1-2dc-110.12.0.2
sc-2-1dc-210.12.1.1
sc-2-2dc-210.12.1.2
sc-3-1dc-310.12.2.1
sc-3-2dc-310.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集群的完整地址列表。

  • 注:其它数据中心部署时,只需要对应更新httpaddrmanager_namemanager_addr配置即可。

确认部署成功

这里官网推荐使用命令行工具scctlcluster指令,这样就可以很方便的看到当前接入了哪些数据中心的ServiceCenter集群。

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

MicroserviceDatacenterAddress
Clientdc-110.12.0.3
Serverdc-210.12.1.3

我们假设微服务Client部署到数据中心dc-1,Server部署到数据中心dc-2中。

启动微服务Server

打开编辑配置文件

vi examples/discovery/server/conf/chassis.yaml复制代码

修改如下

cse:service:registry:type: servicecenteraddress: 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: servicecenteraddress: 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" > 复制代码

观察日志我们可以知道,部署在不同的数据中心的微服务相互发现和相互调用。

 

 

开发者可以通过微服务引擎华为云官网了解CSE。在CSE帮助中心可以获取更多产品信息,如有疑问,可通过CSE论坛进行咨询。

 


作者:二手雄狮
链接:https://juejin.im/post/5be4ebf4e51d452e7243ae16
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

这篇关于ServiceComb如何支持多数据中心微服务发现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/796344

相关文章

SpringKafka消息发布之KafkaTemplate与事务支持功能

《SpringKafka消息发布之KafkaTemplate与事务支持功能》通过本文介绍的基本用法、序列化选项、事务支持、错误处理和性能优化技术,开发者可以构建高效可靠的Kafka消息发布系统,事务支... 目录引言一、KafkaTemplate基础二、消息序列化三、事务支持机制四、错误处理与重试五、性能优

Linux上设置Ollama服务配置(常用环境变量)

《Linux上设置Ollama服务配置(常用环境变量)》本文主要介绍了Linux上设置Ollama服务配置(常用环境变量),Ollama提供了多种环境变量供配置,如调试模式、模型目录等,下面就来介绍一... 目录在 linux 上设置环境变量配置 OllamPOgxSRJfa手动安装安装特定版本查看日志在

SpringCloud之consul服务注册与发现、配置管理、配置持久化方式

《SpringCloud之consul服务注册与发现、配置管理、配置持久化方式》:本文主要介绍SpringCloud之consul服务注册与发现、配置管理、配置持久化方式,具有很好的参考价值,希望... 目录前言一、consul是什么?二、安装运行consul三、使用1、服务发现2、配置管理四、数据持久化总

SpringCloud之LoadBalancer负载均衡服务调用过程

《SpringCloud之LoadBalancer负载均衡服务调用过程》:本文主要介绍SpringCloud之LoadBalancer负载均衡服务调用过程,具有很好的参考价值,希望对大家有所帮助,... 目录前言一、LoadBalancer是什么?二、使用步骤1、启动consul2、客户端加入依赖3、以服务

一文教你解决Python不支持中文路径的问题

《一文教你解决Python不支持中文路径的问题》Python是一种广泛使用的高级编程语言,然而在处理包含中文字符的文件路径时,Python有时会表现出一些不友好的行为,下面小编就来为大家介绍一下具体的... 目录问题背景解决方案1. 设置正确的文件编码2. 使用pathlib模块3. 转换路径为Unicod

Nginx配置系统服务&设置环境变量方式

《Nginx配置系统服务&设置环境变量方式》本文介绍了如何将Nginx配置为系统服务并设置环境变量,以便更方便地对Nginx进行操作,通过配置系统服务,可以使用系统命令来启动、停止或重新加载Nginx... 目录1.Nginx操作问题2.配置系统服android务3.设置环境变量总结1.Nginx操作问题

springboot的调度服务与异步服务使用详解

《springboot的调度服务与异步服务使用详解》本文主要介绍了Java的ScheduledExecutorService接口和SpringBoot中如何使用调度线程池,包括核心参数、创建方式、自定... 目录1.调度服务1.1.JDK之ScheduledExecutorService1.2.spring

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

定价129元!支持双频 Wi-Fi 5的华为AX1路由器发布

《定价129元!支持双频Wi-Fi5的华为AX1路由器发布》华为上周推出了其最新的入门级Wi-Fi5路由器——华为路由AX1,建议零售价129元,这款路由器配置如何?详细请看下文介... 华为 Wi-Fi 5 路由 AX1 已正式开售,新品支持双频 1200 兆、配有四个千兆网口、提供可视化智能诊断功能,建

TP-Link PDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务

《TP-LinkPDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务》近期,路由器制造巨头普联(TP-Link)在用户群体中引发了一系列重要变动,上个月,公司发出了一则通知,明确要求所... 路由器厂商普联(TP-Link)上个月发布公告要求所有用户必须完成实名认证后才能继续使用普联提供的 D