系统弹性
在系统弹性工程中一个很重要的概念是隔板。如果系统的一个模块失败了,但是这个失败没有串联地影响到其他模块,那么就可以隔离问题,让其他模块继续工作。很显然微服务的边界就成了系统的隔板。在一个单一服务系统中,如果服务失败,那么整个系统停止工作,当然我们可以把它部署到多台机器上来减少失败的概率,但是如果使用微服务架构,我们的系统就可以处理整体服务的失败,并且将整体服务分解。
我们也必须非常小心。为了保证微服务系统能够正确地利用微服务的弹性,我们需要懂得分布式系统的风险来源,网络可能会断开,服务器可能会停机,我们需要懂得如何处理这些风险,还有这些风险对用户有什么影响。 系统伸缩性
在一个单一服务的系统里,我们处理系统伸缩性时要处理系统所有的功能模块。即使只有系统的一小部分有性能问题,我们也需要处理所有的部分。如果服务被切分成小的服务,我们只需要伸缩那些需要处理的服务功能,将其他服务放在功能相对较弱的硬件设施上。如下图所示:
Gilt是一个流行商品在线零售商,因为上面的原因,他们使用了微服务架构。从2007年开始,他们构建了一个单一的Rails系统,到了2009年系统已经不能够处理需要面对的负载。他们将系统拆分成多个服务,Gilt已经能够处理高峰期的负载,今天他们又450个微服务,每个服务运行在几台不同的机器上。使用类似Amazon服务的按需分配的系统,我们可以按需分配我们服务伸缩需要的资源。这会让我们更好地控制成本。其他的架构节本上很难做到这样立竿见影的成本节约。