单元化

单元化

单元化架构是从并行计算领域发展而来。在分布式服务设计领域,一个单元(Unit)就是满足某个分区所有业务操作的自包含的安装。而一个分区(Shard),则是整体数据集的一个子集,如果你用尾号来划分用户,那同样尾号的那部分用户就可以认为是一个分区。单元化就是将一个服务设计改造让其符合单元特征的过程。

单元化就是一批机器的集合,现在要改造,其实是将以前单个单元(也就是我们所谓的中心机房)扩展成多个机器单元,也就是经常听到的异地多活。单元化要做的事情就是让业务上下游的系统调用变成单元内封闭的调用,减少跨单元调用的网络损耗,同时又方便扩容和容灾。非买家相关的服务这些由于涉及到的数据都是共享型的,如果每个单元都有写入,则很难保证每个单元读取的数据一致性,比如库存。那么非买家相关的单元化方案就是将这些数据的写入统一路由到一个名为 center 的单元,然后将数据同步到每个非 center 的单元.这样每个单元都会有一份全量,非 center 单元的读操作都可以在单元内完成;而买家相关的服务则是中心跟单元都可以读写。

单元化的优势

随着硬件的不断升级,计算机硬件能力已经越来越强,CPU 越来越快,内存越来越大,网络越来越宽。这让我们看到了在单台机器上垂直扩展的机会。尤其是当你遇到一个性能要求和容量增长可以预期的业务,单元化给我们提供另外的机会,让我们可以有效降低资源的使用,提供更高性能的服务。

单元化架构,其为性能和隔离性而设计,上层节点访问指定下层节点。在单元化架构下,服务虽然分层划分,但每个单元自成一体。按照层次来讲的话,所有层使用相同的分区算法,每一层都有相同数量的节点,上层节点也会访问指定的下层节点。

更高性能更低成本是我们的主要目标,经过单元化改造,我们得以用更少(约二分之一)的机器,获得了比原来更高(接近百倍)的性能。性能的提升很大部分原因在于服务的本地化,而服务的集成部署又进一步降低了资源的使用。除了性能收益,还有很多收益,比如更好的隔离性,包括请求隔离和资源隔离,比如更友好的升级,产品可以灰度发布等。单元化改造后对高峰的应对以及扩容方式等问题的解决。

单元划分

单元化是异地多活的核心实现方式之一,根据业务特点把单元逻辑上分成下面几个逻辑数据中心(LDC),我们给其命名为“单元”,英文 Unit。简单来说,LDC 分成两种类型,一种是单元,一种是中心。单元就是我们所有做异地多活的业务所在的 LDC,他具备水平扩展的能力,可以任意复制。另外一个中心,是一个特殊的单元,他主要包括一些长尾没有做单元化改造的业务和一些强中心无法进行单元化改造的业务。如果把单元再详细拆分,逻辑上我们又把单元分成两部分,一个是“核心业务单元”,一个是“共享业务单元”,一般而言二者只是逻辑区分,物理上部署在一起。总结如下:

单元:核心业务单元(Unit) ・核心业务单元化 ・保证核心业务单元分片均衡(RouterId) ・核心业务尽量自包含(调用封闭) 单元:共享业务单元(通常与核心业务单元部署在一起) ・不能按统一拆分维度拆分(RouterId) ・被核心业务高频访问 ・与核心业务单元部署在一起,统称为“单元” 中心:全局单元(Center) ・非核心应用和数据(长尾)

下一页