[译]伸缩立方(Scale Cube)

摘要: 本文翻译自http://microservices.io/articles/scalecube.html,作者Chris Richardson。这篇文章描述了伸缩应用的三个维度:X轴的伸缩指运行多份应用的拷贝,通过负载均衡器来路由请求;Y轴的伸缩指对应用功能进行分解,将应用划分为多个服务,可以通过API网关来路由请求到具体的服务;Z轴伸缩指每个服务器只处理部分数据。

The Art of Scalability这本书描述了一个很有用、三维伸缩模型:伸缩立方

X轴伸缩

X轴的伸缩,由负载均衡器后运行的多个拷贝构成。如果有N份拷贝,每份拷贝处理1/N的负载。这是个简单常用的伸缩应用的方式。

这个方法的缺点是,由于每份拷贝潜在地访问所有数据,缓存需要更多内存才能更加有效。另一个问题是,这个方法并没有解决不断增加的开发和应用复杂度的问题。

Y轴伸缩

不同于X轴和Z轴那种运行多份完全相同应用的伸缩方式,Y轴伸缩将应用分成多份不同的服务。每份服务负责一个或多个紧密相关的功能。将应用分解为多个服务的方法有很多。一种方法是使用动词分解,服务实现单个用例,如检出。另外的选择是通过名词来分解,服务负责与特定实体相关的所有操作,如客户管理。某个应用可以采用动词分解和名词分解的组合。

Z轴伸缩

使用Z轴伸缩的话,每个服务器运行一份完全相同的代码。在这个角度上,它与X轴伸缩类似。最大的区别在于每个服务器只负责数据的一个子集。系统的某些组件负责将请求路由到合适的服务器上。一个常用的路由标准是请求的属性,如被访问的实体主键。另一个常用路由标准是客户类型。例如,应用可以将SLA(服务水平协议, Service Level Agressment)更高的付费客户的请求路由到处理能力更强的服务器上去。

Z轴分割常用于数据库的伸缩。数据依据每个记录的属性被跨服务器地分区(也叫分片)。这这个例子中,RESTAURANT表的主键用于在两个不同数据库服务器间对数据行进行分区。注意通过部署一个或多个服务器作为备份/从服务器(replicas/slaves),X轴克隆也可以用于每个分区。Z轴伸缩也可用于应用。在这个例子中,搜索服务包含很多分区。路由将每个内容条目发送到合适的分区(会在分区中被索引和储存)。聚合器(aggregator)将每个查询发送到所有分区,并将所有响应结果组合在一起。

Z轴伸缩的好处:

  • 每台服务器只处理数据的一个子集。

  • 提升了缓存的利用率,减少了内存占用和I/O流量。

  • 提升了事务的可伸缩性,因为请求一般分布在多台服务器上。

  • 另外,Z轴伸缩提升了故障隔离(fault isolation),因为故障只造成一部分数据不能访问。

Z轴伸缩的缺点:

  • 提高了应用复杂度。

  • 需要实现一个分区方案,可能很棘手,尤其当我们需要重新对数据进行分区时。

  • 它没有解决不断增加的开发和应用复杂度。为了解决这些问题,我们需要采用Y轴伸缩


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值