部署多实例的目的有两个:
(1)通过部署相同服务的多个副本来实现水平扩容(X轴可扩展),每个实例处理一部分请求。
(2)为了确保故障隔离,冗余部署也是非常重要的。在故障发生时,一个服务只有一个实例并不能最大限度地保证可恢复性。

在一个服务组内,分发给逻辑服务market-data的请求会被下层的market-data实例均衡掉。这是无状态微服务的典型生产配置。
消费事件队列或者消息总线的服务同样是可以水平扩展的——消息负载会被分发给运行中的各个消息消费者。
在GCE中,一组虚拟机被称作实例组(instance group)(在AWS中,被称为auto-scaling group)。为了创建一个组,首先需要创建一个实例模板,可以创建多个market-data-service实例。
当使用实例模板搭建一个实例组时,它能够为开发者提供一些令人关注的开箱即用的功能:故障分区和自愈。这两个功能对于具有可恢复能力的微服务的运行而言是至关重要的。
1.故障分区
每个区都代表一个不同的数据中心,如果某个数据中心出现故障,则这个故障会被隔离,只会影响33%的服务功能。
2.自愈
删除一个实例会导致实例组启动一个新的实例来代替它,从而确保承载能力保持不变。实例组会尝试通过自愈来响应所有会导致服务实例停止运行的事件,如底层机器故障。添加了健康检查之后,只要应用不再响应该健康检查,虚拟机就会被回收。
3.容量增加
由于服务现在是通过模板部署的,因此扩大容量就变得非常容易了。如果所监测的实例组度量指标(如CPU平均利用率)超过指定阈值,还可以添加一些自动扩容规则来自动增大服务的承载能力。
摘取自 摩根·布鲁斯和保罗·A.佩雷拉的《微服务实战》
网友评论