ServiceCenter Syncer

Introduction to English

1. 什么是ServiceCenter Syncer

Syncer是一个多服务中心的同步工具,专为大型微服务架构设计,支持异构服务中心。它坚持以下信念:

  • 对应用程序透明。同步工具启停,不应该对应用程序的原有流程产生影响。
  • 为多服务中心提供对等网络。他们之间是松耦合的,成员可以自由加入与退出。
  • 对异构服务中心提供支持。插件化的形式支持多种服务中心驱动,用户可便捷的接入自定义插件。
名词释义
  • Gossip - Syncer使用来自serf的Gossip协议进行集群间的广播。Gossip协议使用UDP在集群节点间接力式随机传播,它是一种病毒式传播的协议。
  • Serf - Gossip协议的一种具体实现,是一种用于集群成员管理、故障检测和编排的工具,具有分布式、容错性、高可用性的特点。
  • Service center - 服务中心中心。可以是单个微服务注册发现中心,也可以是一个微服务注册中心集群。我们定义的服务中心是一个拥有统一实例数据的网络区域。

2. ServiceCenter Syncer架构

Syncer的运行时架构图如下:
image
如图所示,

  • 在每个服务中心内,均部署了一套服务注册中心(ServiceCenter、Eurake或者其他)集群,该集群管理其所属服务中心的所有微服务实例,并且是彼此隔离的。同时在每个服務中心里各自部署了一个Syncer集群,它负责从注册中心发现实例,并向服务中心注册来自其他服务中心的实例信息。
  • 在多个服务中心间,多个Syncer组成对等网络,维持一个Gossip池。Gossip协议的使用主要带来了以下便捷:
    • Syncer仅需任意一个池成员信息即可加入网络,其他成员信息的发现是自动完成的;
    • 成员的故障检测是分布式的,是池中多个成员互相协作完成的,这相对于简单的心跳更加准确、完善;
    • 提供集群消息传递,主要用于实例数据更新事件通知、指定实例跨服务中心查询。
  • Syncer提供RPC服务,用于传输微服务实例信息。当Syncer接收到其他成员的事件通知或跨服务中心查询请求,可通过RPC服务提供的Pull和Push接口进行数据的同步。

3. 快速入门

3.1 获取并启动服务中心

以Service-center为例,详细参见:ServiceCenter 快速入门

3.2 从源码构建和运行ServiceCenter Syncer

必要条件:golang 版本 1.11+

# 从github获取Service-center Syncer最新源码
$ git clone https://github.com/apache/servicecomb-service-center.git $GOPATH/src/github.com/apache/servicecomb-service-center
$cd $GOPATH/src/github.com/apache/servicecomb-service-center

# go mod 编译设置
$ GO111MODULE=on go mod download
$ GO111MODULE=on go mod vendor

# 编译
$ cd syncer
$ go build
3.3 启动ServiceCenter Syncer
命令行参数说明:
  • sc-addr: 服务中心地址,即服务注册中心地址。支持集群模式,多个地址间使用英文半角","隔开。
    例:--sc-addr http://10.0.0.10:30100, http://10.0.0.11:30100
  • bind:Syncer在Gossip协议内P2P地址,用于在P2P网络上和其他Syncer成员之间进行通信。
    例:--bind 10.0.0.10:30190
  • rpc-addr:Syncer的数据通讯地址,用于Syncer间同步微服务实例数据。
    例:--rpc-addr 10.0.0.10:30191
  • join:用于指定待加入的P2P网络,P2P中的任何成员的地址, 启动第一个Syncer时不需要该参数。
    例:--join 10.0.0.10:30191

假设有2个服务中心,每个服务中心都有一个用于微服务发现和注册的服务中心集群,如下所示:

Service centerLocal address
http://10.0.0.10:3010010.0.0.10
http://10.0.0.11:3010010.0.0.11

以下将启动两个Syncer来完成这两个服务中心之间的微服务数据同步:

在10.0.0.10的机器上执行以下命令启动Syncer

$ ./syncer daemon --sc-addr http://10.0.0.10:30100 --bind 10.0.0.10:30190 --rpc-addr 10.0.0.10:30191

在10.0.0.11的机器上执行以下命令启动Syncer,并加入10.0.0.10的gossip池

$ ./syncer daemon --sc-addr http://10.0.0.11:30100 --bind 10.0.0.11:30190 --rpc-addr 10.0.0.11:30191 --join 10.0.0.10:30191

结果验证
将微服务实例注册到其中一个ServiceCener后30秒,可以从每个ServiceCenter获取有关该实例的信息。

4. 特性

Syncer是一个开发中版本,在下面列出已支持的特性,更多开发中的特性请参考TODO

  • 支持多个servicecomb-service-center 服务中心之间进行数据同步
  • 在etcd中固化存储微服务实例映射表