当我们讨论伸缩性时,我们的意思是系统必须适应不同的负载。他有两种方式---当负载增加时,它会扩大规模,当负载减少时它会收缩。重要的是能够在平静的时期减少负载,以确保资源和运营的经济。
当系统上的负载增加时,比如在节假日期间,会出现突然的延迟峰值,这可能会违反客户端的服务水平协议(SLA)约束。伸缩意味着你的系统应该能够伸缩以适应不同程度的延迟。
一种方式是通过减少模型组件之间的耦合,可以使系统具有伸缩性。使用异步消息边界作为通信手段的松散连接架构是实现这一目标的一种方式。这正是响应性模型所鼓励的----非阻塞通信,以及使用没有任何共享状态的不可变消息进行交互的组件。当您的组件以异步消息交互时,您就拥有适当的隔离级别,因为你已经有条件去拥有位置透明,并发模型和编程语言本身。
本书着重于使用actor计算模型的消息传递系统。actor提供了相当高的并发性构造,帮助您以松散耦合的模块(它们也可以是限界上下文)来组织您的模型,这些模块使用异步消息进行交互。我们将讨论一个经过良好设计的actor系统如何能够为您的模型提供弹性伸缩,帮助您通过正确的处理背压来扩展与收缩,并为您的系统提供全面的响应能力。
当我说消息驱动的时候,我是故意的。事件也可以被认为是封装了领域概念的消息。当我说一个debit(取款)信息时,这是一个在特定帐户上引入debit(取款)操作的事件。debit(取款)是一个领域概念。下一节将讨论领域事件如何在您的响应式模型中形成组合行为的头等结构。