Skip to the content.

目录

1. 分组介绍

当你的集群上了规模之后, 服务器可能部署在不同机房或网段, 为了能够减少跨网调用, 保证同一个分组的服务调用时优先, Tars设计了分组机制.

目前Tars设计了两种分组: IDC分组和SET分组

2. IDC分组逻辑介绍

2.1. IDC组的含义

2.2. 分组信息的更改

在管理平台的“服务编辑”中由操作者更改,更改后保存入Tars DB 中,主控Registry每隔一定时间会读取到自身的缓存中。

2.3. 分组逻辑的执行流程

主调会定期从主控中取被调的Obj列表信息,在接受到主调请求后,由主控Registry完成IDC分组的核心逻辑。

核心流程如下:

2.4. 示例

tars

某服务A(A1,A2,A3,A4,A5,A6,A7)在各个地区各个IDC的部署情况如上图。

主调服务B(ip:172.27.206.111)调用A服务,能调用到有: A3

主调服务C调用A服务,能调用到有: A3,A4,A5

主调服务C调用A服务时,A3,A4,A5都停止,能调用到的有: A2

主调服务C调用A服务时,A3,A4,A5,A2都停止,能调用到的有: A1,A7

主调服务C调用A服务时,A3,A4,A5,A2,A1,A7都停止,能调用到的有:A6

说明

3. Set分组逻辑介绍

3.1. Set分组的含义

3.2. Set分组场景

没有Set分组之前,如下图:

tars

有Set分组后,如下图:

tars

3.3. Set分组的调用逻辑规则

以下图为例:

tars

具体部署情况如下表:

Set名 Set地区 Set组名 服务列表
APP SZ 1 A,B,C,F
APP SZ 2 A,B,C
APP SZ *(通配符) C,E,D,F
APP SH 1 A,B,C
APP SH 2 A,B,C

1.A服务调用B、C服务,且三个服务在1,2两个Set分组中都存在,如果1中B服务死掉,则A不会调用2中的B服务,更不会调用SH中的任何B服务,而是直接返回空集给A,因为不在同一个SET中。

2.而对于C服务既在1、2Set组中存在,又存在于SZ地区的通配组中,如果1中的C死了,则既不会去调用SZ地区下的C,也不会调用2中的C,同理相对于F服务,1中的A服务永远也不会调用通配组中的F服务。

3,而对于2中的A服务而言,则可调用通配组中的F服务

4,D服务则可调用SZ中任何C服务(包括通配组和具体SET服务组)

5,对于E服务,C则直接调用通配组中的E服务

调用总体原则:

4. IDC分组与Set分组的调用规则

编号 客户端 服务端 规则
1 启用Set 启用Set 寻找在同一set的ip地址,如果同一个Set没有可用地址,则返回空
2 启用Set 没启用Set/启用IDC 按IDC分组的寻址返回地址
3 启用Set 没启用Set/没启用IDC 返回所有可用的地址
4 没启用Set 启用Set/启用IDC 按IDC分组的寻址返回地址
5 没启用Set 启用Set/没启用IDC 返回所有可用的地址
6 没启用Set 没启用Set/启用IDC 按IDC分组的寻址返回地址
7 没启用Set 没启用Set/没启用IDC 返回所有可用的地址