单元化架构

为何需要:不断增长的海量用户的需求

所谓单元,是指一个能完成所有业务操作的自包含集合,在这个集合中包含了所有业务所需的所有服务,以及分配给这个单元的数据

核心问题

演进

分层(根据技术以服务形式划分) ->

分段(根据业务能力隔离) ->

屏幕截图 2021-11-01 214743

单元化架构(独立开发运行的一套套系统)

CRG架构

从单元化的角度,数据的分类:

单元类型的划分:

CZone 基于数据写入跟数据读取是有一定时间差这个假设,通过异步的方式在写入时同步到其他机房

组件

名称与版本

独立性

设计单元的最终目的就是单元独立开发部署

完备性

相关业务场景置于同一单元 逻辑完备

业务单元之间应减少交集

通信

单元间的通信都必须通过某种统一的网络接口进行

单元内的组件通过可被允许的通信协议进行通信

什么时候用

设计

设计原则

要素

业务切分

使用DDD或者其他什么方式来切分,很像微服务,但切分业务单元时不可避免的会出现一些交集,要保证跨单元操作尽量少,这种拆分与组织架构与业务流程强相关并且可能会反过来影响组织架构,拆分的粒度可参考微服务,需要不断迭代演进。

另外一种是根据用户的地域或者类型等维度根据不同的单元来服务不同的用户,但怎么说,系统中肯定会有一些共同需要有的数据,可以使用数据的复制机制来解决,这样子若数据需同步,则需要一个分布式的ID生成方案来保证不会冲突。这种方式可能会由于用户的不均出现热点单元与冷单元,需要二次拆分或者合并,并且当用户切分维度发生改变时要继续将用户数据同步到新的单元上去。

最后一种方式,是根据数据进行切分,可以参考分库分表

单元路由

单元间或者单元内的组件之间通信都是通过各种中间件、代理、网关等来进行,这主要是为了安全与解耦

对于外网的访问,可以使用不同的显式入口、或者在请求里携带标志位来进行路由。外网的请求来到单元网关,网关需进行判断是否接收该请求,以此是否继续路由到单元内部,应用层的处理方式将会进行网络过滤,业务逻辑不必关心,再来到中间件层 最后是数据层

而对于跨 zone 的请求,应用需要通过某种方式,向服务框架提供计算目标单元的信息,再通过 rpc 调用,携带单元信息进行调用。

弹性伸缩

可以在业务在出现热点后,进行拆分、扩容,以应对流量激增

单元规划

一个单元化架构系统,应尽可能提高 RZone 应用的比例,减少 GZone 应用,有限地使用 CZone

数据复制

当跨单元需要大量数据时,数据复制是比较好的方式

根据业务场景选择强一致、最终一致、评估失败的业务的影响