第2篇:应用扩展方式-扩展立方体

在讲软件架构时,我们主要关注的是软件的非功能性需求,比如可扩展性、易维护性、可测试性、可用性等。在进行非功能性需求设计时,常使用的方法包括服务拆分、借助负载均衡运行多个相同的应用副本和分库分表等。

本篇主要介绍来自于《The Art of Scalability》这本书的可扩展立方体模型(scale cube)。在该模型中通过X轴、Y轴和Z轴三种不同的方法来扩展应用,每种方法可以解决不同的问题,并具有不同的优缺点。在实际应用时,设计人员可以根据业务需求组合不同的扩展方法。比如常用的方法是:使用Y轴扩展进行微服务拆分,再使用X轴或Z轴扩展对应用进行扩展。

1. 扩展立文体模型

扩展立文体模型如下:
在这里插入图片描述

2. X轴扩展

X 轴扩展是借助负载均衡器运行多个相同的应用程序副本。如果有 N 个副本,则每个副本处理 1/N 的负载。这是一种简单、常用的扩展应用程序的方法。示例如下:
在这里插入图片描述

优点:

  • 提高系统吞吐量
  • 提高系统可用性

缺点:

  • 缓存需要更多的内存,因为每一个实例都可以访问所有的数据
  • 没有解决由于应用的持续增长导致的应用复杂性的增加

实际上X轴扩展并没有解决在第1篇:单体架构与微服务架构的对比中介绍的有关单体架构的缺点。

3. Y轴扩展

X 轴和 Z 轴的扩展方法都是运行多个相同的应用程序的副本,但Y 轴的扩展方法是将应用程序拆分为多个不同的服务,每个服务负责一个或多个相关的功能。示例如下:
在这里插入图片描述
Y轴的扩展方法能够解决应用体量增加带来的应用复杂性增加的问题,其优缺点可以参考第1篇:单体架构与微服务架构的对比中介绍的有关微服务架构的优缺点。

4. Z轴扩展

Z 轴扩展方法同样是运行相同应用程序的多个副本,与 X 轴扩展方法的不同点是:每个应用实例只负责数据的一个子集。应用通常借助某个组件将用户请求根据请求中的某个属性(如用户ID)路由到某个具体的应用实例。示例如下:
在这里插入图片描述
优点:

  • 每个应用实例只处理数据的一个子集
  • 提高了缓存利用率并减少了内存使用和 I/O 流量
  • Z 轴扩展改善了故障隔离,因为故障只会使部分数据无法访问。

缺点:

  • 增加了应用程序的复杂性
  • 实现和设计数据分区方案
  • 没有解决由于应用的持续增长导致的应用复杂性的增加

在使用Z轴扩展时常用的路由属性包括:

  • 访问实体的主键
  • 客户类型,如应用程序可以通过将请求路由到具有更大容量的不同服务器集,为付费客户提供比免费客户更高的 SLA

Z 轴扩展主要用于扩展数据库,根据每条记录的属性在一组服务器上进行数据分区(也称为分片)。在应用于扩展数据库时,通过将一台或多台服务器部署为副本/从服务器,可以将 X 轴扩展方法应用于每个数据分区。

当然,Z 轴扩展也可应用于扩展应用,如搜索服务由多个数据分区组成。路由器将每个内容项发送到适当的数据分区,在那里对其进行索引和存储,查询聚合器将每个查询发送到所有数据分区,并组合每个数据分区的查询结果。

本文已收录于 微服务开发

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值