很多人知道AKF扩展立方体是从《架构即未来》这本书开始。实际上akfpartners官方写过4篇关于AKF扩展立方体的文章,还有一篇介绍AKF可用性立方体。akfpartners官方在高可用、扩展性方面有很多专业技术文章,建议有空就翻翻看。
AKF扩展立方体和AKF可用性立方体都介绍了X轴、Y轴和Z轴。X轴核心是复制,Y轴核心是按业务拆分;Z轴核心是按算法拆分。AKF扩展立方体解决的问题是提供无限扩展性的解决方案;AKF可用性立方体解决的问题是提供无限高可用的解决方案。
AKF扩展立方体
X轴扩展是通过克隆和复制的方法来扩展。对应用来说,复制服务、负载均衡、浏览器存储session、对象缓存都是X轴扩展的例子;对数据库来说,数据库主从读写分离是典型的例子。
Y轴扩展是按业务来拆分,微服务就是一种Y轴扩展方式,DDD为扩展提供方式方法。扩展的大敌是瓶颈。所以微服务系统都要求将不同服务的数据库分开,来增强扩展性。
Z轴扩展是按算法规则扩展。对应用来说,单元化架构就是一种Z轴扩展方式;对数据库来说,分库分表就是一种Z轴扩展方式。
官方对三轴拆分的本质描述有一张图,清楚明白:
AKF可用性立方体
AKF可用性立方体
X轴扩展可以大幅提高可用性。假如一个服务本身的可用性是4个9,根据 (总时间-不可用时间)/总时间 的可用性公式,可用性可被提高到下面这么多9:
Y轴扩展对可用性是起副作用的。因为业务拆分之后,模块之间的跨系统交互会增加,增加通信失败的风险。服务、数据扇出和服务、数据熔断是典型的反模式。服务扇出是说一个服务是个中心节点,和很多服务有调用关系;数据扇出是要得到数据需要从多处获取数据,也是一个中心。这样,一旦这个服务发生故障,和其有调用关系的都受到影响,被熔断。这些可以通过额外的处理:限流、降级等进行规避。
Z轴扩展可减小故障辐射半径,提高可用性。这种可用性手段又被称为舱壁模式或者泳道。被称为永不沉没的泰坦尼克,之所以叫永不沉没就是使用了舱壁,使用了16个舱壁,就算4个进水都不会有问题。设计上没有问题,据说是使用外包做了豆腐渣工程,导致了悲剧。