《可扩展艺术》一书提出了一个系统可扩展模型–AKF可扩展立方(Scalability Cube)。
1,Y轴(功能)关注应用中功能划分,基于不同的业务拆分
Y轴扩展会将庞大的整体应用拆分为多个服务,每个服务实现一组相关的功能,如订单管理、客户管理等。在工程上常见的方案是服务化架构(SOA),比如对于一个电子商务平台,我们可以拆分成不同的服务,组成类似下面的架构:
、
但通过上图可以发现,当服务数量增多时,服务调用关系变得复杂,为系统添加一个新功能,要调用的服务数变得不可控,由此引发了服务管理上的混乱,所以一般情况下,需要采用服务注册的机制形成服务网关来进行服务治理
2,X轴(水平扩展)关注水平扩展,也就是“加速器解决问题”
X轴扩展与我们前面朴素理念是一致的,通过绝对平等的复制服务与数据,以解决容量与可用性的问题,其实就是将微服务运行多个实例,做集群加负载均衡的模式。
为了提升单个服务的可用性与容量,对每一个服务进行X轴扩展划分。
3,Z轴(数据分区)关注服务与数据的优先级划分,如按地域划分
Z轴扩展通常是指基于请求者或用户独特的需求,进行系统划分,并使得划分出来的子系统相互隔离但又是完整的。以生产汽车的工厂来举例:福特公司为了发展在中国的业务,或者利用中国的廉价劳动力,在中国建立一个完整的子工厂,与美国工厂一样,负责完整的汽车生产。这就是一种Z 轴扩展。
工程领域常见的Z轴扩展有以下两种方案
1,单元化架构
在分布式服务设计领域,一个单元Cell就是满足某个分区所有业务操作的自包含闭环。如上面我们说到的Y轴扩展的SOA架构。客户端对服务端节点的选择一般是随机的,但是,如果在此上加Z轴扩展,那服务节点的选择将不再是随机的,而是每个单元自成一体。
2,数据分区
为了性能数据安全上的考虑,我们将一个完整的数据集按一定维度划分出不同的子集。一个分区(Shard),就是整体数据集的一个子集。比如用尾号来划分用户,那同样尾号的那部分用户就可以认为是同一个分区,数据分区一般包括以下几种数据划分形式:
数据类型:如业务类型
数据范围:如时间段、用户ID
数据热度:如用户活跃度、商品热度
按读写分:如商品描述、商品库存
https://www.cnblogs.com/guanghe/p/10978349.html
https://juejin.im/entry/59b292e9f265da06633cf89a
http://dockone.io/article/8241
https://blog.csdn.net/u014401141/article/details/82662153
https://zhuanlan.zhihu.com/p/73737566
http://www.linuxmysql.com/16/2020/1065.htm
https://www.jianshu.com/p/3bb811106a40
https://dbaplus.cn/news-141-1993-1.html
http://zhangyi.xyz/how-to-break-monolith-into-microservices/
https://martinfowler.com/articles/break-monolith-into-microservices.html
https://www.chainnews.com/articles/022257128348.htm