AKF扩展立方体
三个维度扩展的对比
1.X轴扩展 服务水平复制
优点:不需要太大开发成本 通过复制多个应用实例 并做对应的负载均衡即可提高系统性能;
缺点:应用或者数据库没有拆分导致整个系统过大,只是部分需要扩展,却要复制整个实例造成资源的浪费和扩容速度较慢,而且可能因为某些问题拖垮整个系统;
场景:业务简单,数据量小,团队规模小。
2.Y轴扩展 应用拆分
优点:将应用拆分后可以实现更方便的扩容和缩容,可以实现隔离故障,可以提高响应时间;
缺点:开发协作成本变高,问题排查变得稍微复杂,无法解决数据集过大问题;
场景:业务复杂,数据量大,代码耦合度高,团队规模大。
3.Z轴扩展 分片
优点:解决大数据量和请求数据量,降低故障风险,可以带来最大的扩展性。
缺点:成本最昂贵;
场景:用户指数级快速增长
如何将理论付诸实践?
1.分割应用
X轴:从单体系统或服务,水平克隆出许多系统,通过负载均衡平均分配请求;
Y轴 :面向服务分割,基于功能或者服务分割,例如电商网站可以将登陆、商品、订单,等服务进行Y轴拆分,每一组服务再进行X轴的扩展;
Z轴 :基于用户、请求或者数据分割,可以将用户哈希到不同的地区的服务,并让同一次请求都尽可能落到相同机房,减少网络的延迟,提高系统性能 。
2.分割数据库
X轴:从单库,水平克隆为多个从库读,一个库写,多个从库读,通过数据库的自我复制实现,要允许一定的读写时延;
Y轴 :根据不同的信息类型,分割为不同的数据库,即分库,例如产品库,用户库等;
Z轴 :按照一定算法,进行分片,把订单号将数据按照不同的哈希值进行分片存储,每个分片再进行X轴冗余。