问候,
我正在评估多数据中心分布式系统的一些组件。我们将使用消息队列(通过RabbitMQ或Qpid),因此代理可以向其他代理发出异步请求,而无需担心寻址,路由,负载平衡或重新传输。
在许多情况下,代理将与非高度并发访问的组件进行交互,因此需要锁定和跨代理协调以避免竞争条件。此外,我们希望系统能够自动响应代理或数据中心故障。
考虑到上述用例,ZooKeeper似乎很合适。但我想知道是否尝试使用ZK和消息排队是否有点过分。似乎Zookeeper可以使用AMQP消息传递由我自己的集群管理器完成,但这很难真正做到。另一方面,我已经看到一些使用ZooKeeper来实现消息队列的例子,但我认为RabbitMQ / Qpid更适合它。
有没有人使用这样的组合?
提前致谢,
-Chris
答案 0 :(得分:5)
进入这个晚期,但也许会有所帮助。主要考虑因素应该是系统的性能特征。像你说的那样,ZooKeeper不仅能够使用分布式队列实现任务分发系统,而且zk目前对于读取而言比针对写入更优化(这仅在每秒1000次操作中发挥作用) 。如果您的吞吐量需求低于此值,那么仅使用zk来实现您的系统将减少运行时组件的数量并使其更简单。当然,在决定之前,您应该始终运行性能测试。
分布式协调真的很难做到,所以我肯定会建议使用zookeeper,而不是自己动手。
答案 1 :(得分:0)
不完全确定ZooKeeper究竟是什么,但我想在使用自己的分布式同步和组服务之前,首先使用Apache中的组件(如果它确实能够满足您的需求)。你当然可以聘请一个开发团队,特别是为了这个目的,但这并不能保证你有更好的实施。
我想,它无论如何都会作为一个单独的组件实现,因为其他方式可能会带来很多复杂性并减慢工作流程;所以ZooKeeper或类似的东西的偏好对我来说是显而易见的。
当然,除非你处于项目工作流程的全局优化阶段,否则我认为使用RabbitMQ等会更好(我甚至会强调,AMQP的cuz实现(特别是商业化)会更多比你提出的所有东西都要可靠。
所以我会选择两者,仔细选择合适的第三方产品,但要尽可能多地使用它们。这只是我的意见;感谢阅读:)