
异步消息传递
|
119
所有消息复制(或镜像)给追随者,并删除已成功传递的消息。如图
7-4
所示,其中包
含了
复制
和
删除
操作。此方案的具体行为及其对代理性能的影响取决于产品的需求和具
体实现。
使用领导者
-
追随者消息复制方式,追随者被称为热备用,是领导者的副本,如果领导
者发生故障,则追随者顶上。在故障场景下,生产者和消费者可以通过切换访问追随者
来继续操作,我们也称之为
故障转移
。故障转移在消息代理的客户端库中实现,因此对
生产者和消费者来说是透明的。
实现一个可以执行队列复制的代理是一件复杂的事情。在复制消息时,代理需要处理许
多细节的故障情况。我将在第
10
章和第
11
章讨论可扩展数据管理时开始提出这些问题
并介绍相应的解决方案。
一些建议:不要考虑
使用自己的
复制方案或任何其他复杂的分布式算法。软
件世界充斥着构建特定于应用程序的分布式系统基础架构的失败尝试,只是
因为可用的解决方案“不能完全满足我们的需求”或“成本太高”。相信我,
你的解决方案将不如现有解决方案有效,开发成本将超出你的预期。你最终
可能会扔掉你的代码。这些算法很难被大规模正确实现。
7.2
示例:
RabbitMQ
RabbitMQ
是分布式系统中使用最广泛的消息代理之一。你将在所有应用领域(从金融
到电信再到建筑环境控制系统)的系统部署中遇到它。它于
2009
年左右首次发布,并已
发展成一个功能齐全的开源分布式消息代理平台,支持大多数主流语言构建的客户端。
RabbitMQ
代理采用
Erlang
语言构建,主要为
AMQP
(
Advanced Message ...