tarsdocs
  • Readme.md
  • CLA
  • LICENSE
  • 基础介绍
    • 简介
    • 基础概念
    • 基础通信协议 Tars
    • 统一通信协议 Tup
    • 开发模式介绍
    • 模板配置
    • 服务市场
    • 服务扩展
    • 框架版本说明
  • 开源版框架介绍
    • 开源版本部署
      • 部署总体介绍
      • Docker环境安装
      • Mysql安装
      • 框架源码部署(Linux/Mac)
      • 框架源码部署(Windows)
      • 框架Docker部署
      • 框架节点部署
      • 业务服务容器化
      • 框架K8SDocker 部署
      • 框架K8STARS 部署
      • 框架K8SFramework 部署(强烈推荐)
      • 框架更新及扩容
      • 调用链升级注意事项
      • TarsWeb-v3.0.3升级说明
    • 开源版管理平台
      • TarsWeb说明
      • web用户体系
      • web管理平台 API
  • 企业版本介绍
    • 企业版说明
    • 框架集群化机制
    • 框架单节点机制
    • 使用二进制包部署
    • 使用容器部署
    • 业务服务一主多备机制
    • 命令行控制终端
    • IP-LIST级联缓存机制
    • 多数据中心管理
    • 多网络支持
    • 第三方服务管理
    • 数据产生和管理机制
    • 密码重置
    • TarsPython介绍
  • 框架关键特性
    • 业务配置
    • 服务监控
    • 无损发布/重启
    • 调用链
    • IDC分组
    • 鉴权功能
  • TarsCPP
    • 编译
    • 快速开发入门
    • 使用指南
    • 开发规范
    • 服务线程说明文档
    • protobuf 协议支持文档
    • 第三方协议支持
    • HTTP1 支持
    • HTTP2 支持
    • TLS 通信支持
    • Push 功能说明
    • PushCallback 功能说明
    • Cookie 支持
    • 队列模式
    • 手动绑定
    • 性能数据
    • 2.x 版本变化
    • 3.x 版本变化
    • 协程版本说明
    • 基础类库说明
    • [案例]
      • 框架快速入门
      • Http 服务示例
  • TarsJava
    • 快速开始
    • 快速开发入门
    • [使用指南]
      • Tars 服务开发与上线
      • HTTP 服务开发与上线
      • 生成接口调用文件
    • [性能测试]
      • tars java 压测代码
  • TarsGo
    • 基本介绍
    • 快速开始
    • 使用指南
    • cmake 管理代码
    • pb2tarsgo
    • 性能数据
    • 使用示例
  • TarsPHP
    • 搭建 php 环境
    • 快速开发入门
    • [快速起步]
      • 搭建 HttpServer
      • 搭建 TimerServer
      • 搭建 TcpServer
      • 搭建 WebSocketServer
      • 弹幕活动实战
    • [框架简介]
      • 简介
      • tars-server
      • tars-client
      • tars-config
      • tars-deploy
      • tars-extension
      • tars-log
      • tars-monitor
      • tars-registry
      • tars-report
      • tars-utils
      • tars2php
    • [高阶应用]
      • PHP 的 Swoole 框架如何接入 Tars
      • 与 thinkphp 结合使用
      • 与 Swoft 结合使用
      • 与 Laravel 结合使用
      • 与 Yii2 结合使用
      • 持续集成方案
    • [其他]
      • 常见问题
      • 如何 Debug
      • changelog
      • 其他外部文档
  • Tars.js
    • 基本介绍
    • 脚手架
    • 快速开发入门
    • @tars/stream
    • @tars/rpc
    • @tars/logs
    • @tars/config
    • @tars/monitor
    • @tars/notify
    • @tars/utils
    • @tars/dyeing
    • @tars/node-agent
    • @tars/winston-tars
    • tars2node
  • K8SFramework
    • [安装和使用说明]
      • 介绍
      • 特性
      • 安装
      • 升级
      • 云原生运维
      • 管理平台
      • 证书
    • [开发环境构建]
      • Dockerfile 说明
      • 服务发布流程说明
      • 制作基础编译镜像
      • 制作业务服务镜像
      • 制作 Helm 包
      • 发布业务镜像到 K8S 集群
      • 服务发布示例
      • 如何调试业务服务
  • 服务扩展
    • 云告警
    • 接口及压测工具
    • 网关服务
    • dcache缓存服务
    • 发送邮件服务
    • 一致性存储服务
    • 一致性存储web管理平台
    • 唯一计数服务
  • 常见问题
    • 安装常见问题
    • Issues
    • Issues-tarscpp
    • Issues-tarsjava
    • Issues-tarsgo
    • Issues-tarsphp
  • 开源合作
    • TarsFramework 项目 Git 合作规范
  • 直播视频
    • B 站 TARS 培训系列课程
  • 相关文章
    • TARS 技术文章
  • 其它资源分享
    • 下载
    • Tars 介绍.pptx
    • TarsPHP 解密.pdf
    • TarsJava 本地调试.pdf
    • 微服务在腾讯的业务实践.pptx
Powered by GitBook
On this page
  • 目录
  • 1. 分组介绍
  • 2. IDC分组逻辑介绍
  • 2.1. IDC组的含义
  • 2.2. 分组信息的更改
  • 2.3. 分组逻辑的执行流程
  • 2.4. 示例
  • 3. Set分组逻辑介绍
  • 3.1. Set分组的含义
  • 3.2. Set分组场景
  • 3.3. Set分组的调用逻辑规则
  • 4. IDC分组与Set分组的调用规则

Was this helpful?

  1. 框架关键特性

IDC分组

Previous调用链Next鉴权功能

Last updated 3 years ago

Was this helpful?

目录

1. 分组介绍

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

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

  • IDC分组简单的说, 通过IP网段自动将服务器分组.

  • SET分组可以根据你的设置, 将服务器设置分组.

2. IDC分组逻辑介绍

2.1. IDC组的含义

  • 按照IP地址的前三段定位出属于哪个具体的机房。

  • 被调服务属于哪个组的信息可以修改,如果不指定就按照IP段的规则来匹配。

2.2. 分组信息的更改

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

2.3. 分组逻辑的执行流程

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

核心流程如下:

  • 1.首先从数据库中检索出该服务所有的“活动列表”和“非活动列表”

  • 2.根据客户端IP得出调用者所处的物理组,假设为GROUP_A

  • 3.遍历“活动列表”,将属于GROUP_A的所有IP检索出来。如果找到了,将这些IP返回给客户端,并退出;否则进行第4步。

  • 4.按照t_group_priority定义的优先级,遍历所有逻辑组。如果在某个逻辑组中,发现了活动IP,则将这些IP返回给客户端,并退出;否则查找下一个逻辑组,如果在所有的逻辑组仍然没有找到活动IP,则进行第5步。

  • 5.遍历“活动列表”,将属于组“-1”,也就是将没有启动分组的IP检索出来。如果找到了,将这些IP反馈给用户。如果没有找到,则进行第6步。

  • 6.将从数据库中检索出的“活动列表”直接返回。

2.4. 示例

某服务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

说明

  • 主调的出身已经决定了主调的物理组和逻辑组。

  • 被调的出身可修改,将影响主调调用的活动列表。

  • 是否启用IDC分组,完全取决于服务端!!!

3. Set分组逻辑介绍

3.1. Set分组的含义

  • Set名: 定义一个大的Set名称,可以以业务名称来定义。

  • Set地区:可以按照地区来对划分,如n,b(南北),也可以以城市来分,如sh(上海),sz(深圳)等。

  • Set组名:实际可以重复的组单元的名称,一般是 0,1,2,3,4,5,…

3.2. Set分组场景

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

有Set分组后,如下图:

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

以下图为例:

具体部署情况如下表:

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服务

调用总体原则:

  • 1.主被调双方都要启用SET分组,并且SET全名要一致。

  • 2.SET内有被调的(不管死活),只能调用本SET内的。如果没有被调(死的也算有),则只能调用本地区的公共区域的,还没有的话,只能按照IDC分组原则调用未启用SET的。1A->1C, 1A 不能->*C, 1A->1F, 1A不能->*F, 2A->*F, C->E

  • 3.通配组服务可调用SET内和通配组的任何服务*D->*C+1C+2C

  • 4.如果不满足1,则按照IDC分组逻辑调用。

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

返回所有可用的地址

分组介绍
IDC分组逻辑介绍
Set分组逻辑介绍
IDC分组与Set分组的调用规则
tars
tars
tars
tars