illx10000

1. 背景

近期在小组的群里面看到同事在和leader讨论 “分账/补差入分区”的方案。 虽然当前负责的业务还没有接触到分区的具体事项,但是资料都是共享的,依然可以从中学习在整体方案设计中思考 同时先写本文记录自己的一些理解,同时期望后续随着理解不断加深,得以不断完善。

2. 分区(Set化)

以下内容主要参考:

内部叫做分区,外部一般称之为Set化,本文后面也就用Set化这个名词来表达分区这个事情,不管叫什么,其本质是 将业务系统分为多个可独立扩展部署的逻辑分区,以期达到业务目标

2.1 Set化目标

一般来说,有两种目标

对于我们的业务来说,使用Set化的核心目标是通过分区冗余,达到5个9的可用性。(降低了全局的单点情况,控制了部分风险)

2.2 Set化实现

2.2.1 Tars分区能力

在上一个业务团队,其实已经接触到了分区的概念,当时的RPC框架和运维体系已经能够支持部分分区能力。(目前已经开源,https://github.com/TarsCloud/Tars

在业务实现时我们也应用过这种能力,我们将功能类通知/营销类通知完全隔离到不同的Set,在功能类通知中,又将最核心的业务(例如微信注册触达,王者注册触达等触达类业务)放在独立的Set,再变更时,优先变更 营销,功能,功能(核心业务)

这里也介绍一下Tars的Set能力,以下内容主要参考:

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

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

IDC分组简单的说, 通过IP网段自动将服务器分组. SET分组可以根据你的设置, 将服务器设置分组.

具体调用策略可以参考上面的文档,还是挺有意思的。

2.2.2 支付多分区

主要几个思路:

这里还有很多设计点和思考点,因为自己了解程度有限和涉及到业务敏感,暂时先只列一个提纲,等到合适的时机,放在附录中。

2.2.3 蚂蚁金服支付宝系统的单元化

以下内容主要来自于,建议阅读原文:

单元化的好处:

怎么做单元化:

支付宝的单元化架构中,把单元称之为 “zone”,并且为上面所说的3类数据分别设计了三种不同类型的 zone:

RZone(Region Zone):最符合理论上单元定义的 zone,每个 RZone 都是自包含的,拥有自己的数据,能完成所有业务。 GZone(Global Zone):部署了不可拆分的数据和服务,这些数据或服务可能会被RZone依赖。GZone 在全局只有一组,数据仅有一份。 CZone(City Zone):同样部署了不可拆分的数据和服务,也会被 RZone 依赖。跟 GZone 不同的是,CZone 中的数据或服务会被 RZone 频繁访问,每一笔业务至少会访问一次;而 GZone 被 RZone 访问的频率则低的多。

RZone 是成组部署的,组内 A/B 集群互为备份,可随时调整 A/B 之间的流量比例。可以把一组 RZone 部署的任意机房中,包括异地机房,数据随着 zone 一起走。 GZone 也是成组部署的,A/B 互备,同样可以调整流量。GZone 只有一组,必须部署在同一个城市中。 CZone 是一种很特殊的 zone,它是为了解决最让人头疼的异地延时问题而诞生的,可以说是支付宝单元化架构的一个创新。 CZone 解决这个问题的核心思想是:把数据搬到本地,并基于一个假设:大部分数据被创建(写入)和被使用(读取)之间是有时间差的

需要哪些支持?


其他资料参考: