侧边栏壁纸
博主头像
Leokoの小破站博主等级

行动起来,活在当下

  • 累计撰写 18 篇文章
  • 累计创建 10 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

何为单元化架构

Leoko
2025-01-01 / 0 评论 / 0 点赞 / 13 阅读 / 15678 字

相信大家对于分布式架构都很熟悉,但是可能对单元化不是很熟悉或者说没听说过单元化。本文将带你了解单元化架构的产生背景、相关架构方案等,应该会对你了解单元化有一定帮助。

概述

单元是指一个能完成所有业务操作的自包含集合,在这个集合中包含了所有业务所需的所有服务和对应的数据,并以单元为基本部署单位,单元间实现逻辑或物理隔离,支持跨机房、跨地域方式部署,支持多地多活。

单元化和非单元化架构应用具有明显特点:

image-20241231160925451

操作

非单元化

单元化

数据库连接

启动时连接所有数据库

启动时仅连接自身单元内的数据库

业务处理

随机选择一台服务器进行业务处理

根据用户访问不同单元下的服务器

数据处理

处理全部数据

每个单元只处理部分数据,所有单元组成完整的数据

产生背景

单元化通过灵活的模块化和自治的单元来处理大规模的数据和交易,这种架构不仅提高了系统的扩展性和灵活性,同时也增强了系统的容错能力和运维效率。目前,银行如:邮储、微众,大型互联网系统:比如淘宝、支付宝、网商银行等,都已经实现了单元化架构。下面从几个原因分析为什么选择单元化:

容量

业务使用量总是在不断增长,为了满足业务需求,业务服务系统、数据库都需要不断的扩容,以支持越来越多的业务数据。先来看传统的解决方案:基于分库分表的方案基于分布式数据库的方案

  • 分库分表:实际上是 分布分表+主从,对应这个方案,单库容量有限,如果本身数据量就很大,并且考虑到日后的业务发展需求,可能需要十几二十套主从数据库(当然,要根据容量分析),这意味着所有的应用都需要与这些数据库建立连接,当业务服务数量随着业务量逐渐增多的时候,需要建立的连接数越来越多,而每个数据库可以承接的连接数是有限的,当超过数据库连接数上限的时候,再增加业务服务也无法实现扩容。

  • 分布式数据库方案:分布式数据库如 TiDB 等可以利用其分片扩容的特性来满足容量需求,但是可能存在逻辑单点问题,难于实现多地多活。跨片事务可能较多,性能较差。

如果采用单元化架构,每个单元内部署单套或多套主从模式的数据库,可以有效解决分库分表方案中数据库连接的问题,这种架构下,数据被划分到不同的单元,有助于分散数据库压力,提高吞吐量。

容灾

在非单元化架构的系统中,容灾通常是同城双中心的主从数据库部署和应用双活部署,依赖于主库的跨中心连接来实现的,对于网络性能和稳定性要求极高,并且可能显著影响整型的性能和稳定。由于所有数据都存储在单一数据库中,容灾备份的粒度较大,导致数据备份、恢复以及切换可能耗时较长。并且系统的隔离性较差。一旦数据库发生故障,整个系统可能无法提供服务。

在单元化架构下,不同类型的应用被分配到不同的单元,每种类型的单元设计有适合的容灾模型。由于某个单元服务或者数据库出现问题,只会影响该单元的请求,可以实现单元粒度的故障隔离,从而提高系统的可用性。

单元化下的容灾模型

在两地三中心或多地多中心部署模式下,不同的单元类型,将具有不同的容灾模型:

  • AAA:采用多中心多活部署,每个中心的服务均为可用,即 Active-Active-Active,分别表示主中心、同城中心、异地中心。

  • AAS:采用同城双中心双活部署,异地中心灾备部署,即 Active-Active-StandBy,非主中心的流量比例较少。

  • ASS:采用同城双中心主备模式部署,异地中心灾备部署,即 Active-StandBy-StandBy

多地多活

在非单元化架构的系统中,由于数据集中存储,核心系统难以实现多中心多活的容灾架构。即使借助分布式数据库的多节点部署能力,通常也不建议将不同数据节点主本部署在不同中心或异地中心,因为这可能带来一定的复杂性和风险。

相比之下,在单元化架构的分布式系统中,由于各单元的数据和应用相互独立,不同单元的数据库可以灵活部署,不仅可以部署在同城双中心,甚至可以扩展到异地多中心部署,有效提高系统对地域性故障的容忍度和业务连续性。

运维

在非单元化架构的系统中,由于所有应用和数据都集中在一个大型核心系统中,运维工作的复杂性较高。系统的集中性操作,如升级发布等,可能带来较大风险。一次升级发布可能影响到整个系统的稳定性,增加运维工作的难度。

而在单元化架构的分布式系统中,通过将大型核心系统按照不同单元类型拆分,特别是业务单元拆分,可以将其细分为更小、更易于管理的单元。这种拆分极大提高了系统维护和管理的灵活性和便利性,例如:日志、链路追踪及监控均可按照单元维度提供视图,使得监控更加精细、准确。此外,基于单元的自治性,能够实施更精细的治理措施。在灰度发布过程中,利用白名单机制,可以精确控制哪些单元进行更新,从而在应用和数据层面实现更为平滑的版本迭代,有效提高开发和运维效率,同时增强系统的稳定性和可靠性。

单元分类

那么核心系统的单元化的拆分标准是什么呢?下面提供一种实施方案。

数据分类

单元分类的前提是对数据按照可分区和不可分区的分类。核心系统中,对于客户维度的数据往往是可拆分的,而公共业务参数或者技术参数,一般需要集中管理,并不适合拆分为多个子集进行管理的使用,例如:机构参数、产品参数、定价参数等,又比如:批量调度、全局路由(用于单元定位)等,需要通过集中管理主本以及多副本共享方式进行使用。依照这个特性,可以将数据分为三类:可拆分数据(业务单元)不可拆分数据(管理单元,被访问的频率较低)不可拆分数据副本(公共单元,会被频繁访问)

另外,除这些数据以外,核心系统及其平台,可能还涉及到一些公共的基础组件或服务,都会纳入单元的管理范畴,一般是归属到公共单元。

单元模型

根据数据可拆分和不可拆分的特性,可将单元分为 ABC 三种类型。

  • AZone-管理单元(Admin Zone):不可拆分数据的管理。如:全局定位服务、参数管理、批量调度等。应用为无状态,数据为全局不可拆分数据。应用容灾策略为 AAS,数据容灾策略为 ASS

  • BZone - 业务单元(Busi Zone):用于对客的应用,如:存款系统、贷款系统等。每个单元为自包含,客户账务相关的服务尽量全部部署进 BZone,确保所有核心业务链路按客户维度封闭在各 BZone 中,并具备异地多活和水平扩容能力。单元容灾策略为 AAS

  • CZone - 公共单元(Common Zone):在 BZone 的业务处理中,若无法将链路封闭在同一个单元内,需要频繁访问一些公共的参数或者副本数据,且这些数据的时效性和一致性有一定的容忍度,可以部署到 CZone,其一般为 AZone 的查询服务以副本数据,容灾策略为 AAA

灰度单元

一般来说,灰度发布有两个层级:

  • 应用灰度:在同一份数据下,对应用集群进行分组,如:蓝绿,在发版时,先对蓝版本进行分流、升级、验证、滚动升级等处理。这样可以在一定程度上验证新版本的可靠性,前提是新旧版本要对数据库脚本兼容。

  • 数据灰度:当应用灰度无法解决新旧版本兼容问题时,可以考虑通过数据灰度的方式(即 灰度单元)来缩短业务中断的时间。

    考虑到灰度单元只是少量白名单客户,采用 N+1 模式,节省灰度单元资源需求。即在常规 N 个单元基础上,增加 1 个灰度单元,且此单元双中心部署应用集群和数据库主从副本。

单元模式

单元模式一般包含 固定单元模式非固定单元模式

固定单元模式

基于数据规模,设定了固定的单元数量,所有的系统或业务模块都采用这一固定的单元数量,且无特殊情况时一般不进行增减,适合于拥有大量存量数据且未来数据增长可预见的系统,特性如下:

  • 某一系统或多个系统采用相同的单元数量,且采用相同的路由算法;

  • 各个业务模块可根据自身数据量采用是否分库分表;

  • 有利于统一架构部署和运维管控。

非固定单元模式

根据系统当前数据量初始化单元数,后续通过增加单元数来实现系统扩容,可采用逐个或多个增加方式。适用于初始数据不多,未来可能出现爆发式增长、业务分布可能不均匀的系统。特性如下:

  • 每个业务领域或微服务按自身数据量确定初始单元数,且按自身增长情况进行扩容,互不影响;

  • 路由策略往往不需要算法,而是采用映射的方式;

  • 由于单元数量不固定,运维无法按照固定的单元进行管控。

对于固定模式单元数一般不增加的原因,主要是固定单元模式下,系统是基于主要分片要素(如客户号)进行 HASH 算法,从而得到分片号,并将该分片号映射到对应的单元。基于这一规则,如果想要增加单元,就必须将特定的分片数据迁移到新的单元中。这种数据迁移可能想当复杂和耗时,因此,为了避免这种复杂性,通常不会频繁的增加单元。此外,系统相关的配套组件、运维工具和监控页面也需要对新的单元进行适配和支持。

数据切分

单元化的核心思想是数据切分,单元自治和隔离。切分原则主要考虑如下:

  • 粒度合适:粒度过大,会让流量适配的灵活性和精细度受到制约;粒度过小,会给数据的支撑资源、访问逻辑带来负担;

  • 数据分布均匀:按指定维度划分后,每个分区的数据量应该几乎一致;

  • 性能优先:拆分规则和算法要足够简单且和业务无关,有利于应用路由定位服务的落地实现;另外,不能因为 切分使得业务流程变得复杂。

切分维度

说明

优势

不足

客户维度

以客户号为主要素进行哈希求模得到分片或直接映射到分片,账号及卡号等作为辅助要素,与客户号建立映射关系。

分布均匀,大量交易在单元内完成,少量交易涉及跨客户;机构撤并不涉及单元变更。

非客户维度查询困难,客户合并处理复杂,但量不大。

机构维度

以开客户机构号为主要素映射到分片,任何一个客户归属于唯一机构。客户下的账户等都归属到该分片。

路由策略相对简单,若外围能提供开户机构号,路由策略非常简单,有利于客户维度的业务处理。

机构客户数据分布不均匀,增长可能不均。机构撤并涉及数据迁移量大,需要外围提供相关的机构号或者路由存储客户与机构关系。

流水号

按流水号 HASH 分片,适用于客户和账户信息不落地的渠道类系统,如收单、支付等。

均匀,单元无状态,无限扩展。

适用性对系统类型局限性。

单元路由

单元化架构与传统架构最大的区别,就是数据的分区和路由。即当一笔交易请求进到网关服务时,如何才能路由到正确的业务单元。选择、获取和传递路由主要素和辅助要素对整个系统非常关键。

0

评论区