大型网站架构设计-消息系统ActiveMQ &JMS (2)

文章标签: 大型网站架构设计
2014-12-20 5:47:31     45 人阅读    

ActiveMQ集群部署针对分布式环境下对系统高可用的严格要求,以及面临高并发的用户访问,海量的消息发 送等场景的挑战,单个ActiveMQ实例往往难以满足系统高可用与容量扩展的需求,这时 ActiveMQ的高可用方案及集群部署就显得十分重要了。
当一个应用被部署到生产环境中,进行容错和避免单点故障是十分重要的,这样可以避免 因为单个节点的不可用而导致整个系统的不可用。目前ActiveMQ所提供的高可用方案主要是 基于Master-Slave模式实现的冷备方案,较为常用的包括基于共享文件系统的Master-Slave架 构和基于共享数据库的Master-Slave架构。
如图2-16所示,当Master启动时,它会获得共享文件系统的排他锁,而其他Slave则stand-by, 不对外提供服务,同时等待获取Master的排他锁。假如Master连接中断或者发生异常,那么它 的排他锁则会立即释放,此时便会有另外一个Slave能够争夺到Master的排他锁,从而成为Master, 对外提供服务。当之前因故障或者连接中断而丢失排他锁的Master重新连接到共享文件系统时, 排他锁已经被抢占了,它将作为Slave等待,直到Master再一次发生异常。


ActiveMQ客户耐
客户端连接Master
(拥有排他锁>
Slave 直到 Masterg 机
失去锁才激活
图2-16基于共享文件系统的Master-Slave架构
基于共享数据库的Master-Slave架构同基于共享文件系统的Master-Slave架构类似,如图 2-17所示。当Master启动时,会先获取数据库某个表的排他锁,而其他Slave则stand-by,等
待表锁,直到Master发生异常,连接丢失。这时表锁将释放,其他Slave将获得表锁,从而成 为Master并对外提供服务,Master与Slave自动完成切换,完全不需要人工干预。
ActiveMQ客户端
Slave
Slave直到 Masterg 机
失去锁才激活
共享数据库


图2-17基于共享数据库的Master-Slave架构
当然,客户端也需要做一些配置,以便当服务端Master与Slave切换时,客户无须重启和 更改配置就能够进行兼容。在ActiveMQ的客户端连接的配置中使用failover的方式,可以在 Master失效的情况下,使客户端自动重新连接到新的Master:
failover:(tcp://master:61616,tcp://slave1:61616,tcp://slave2:61616)
假设Master失效,客户端能够自动地连接到Slavel和Slave2两台当中成功获取排他锁的 新 Master。
当系统规模不断地发展,产生和消费消息的客户端越来越多,并发的请求数以及发送的消 息量不断增加,使得系统逐渐地不堪重负。采用垂直扩展可以提升ActiveMQ单broker的处理 能力。扩展最直接的办法就是提升硬件的性能,如提高CPU和内存的能力,这种方式最为简单 也最为直接。再者就是就是通过调节ActiveMQ本身的一些配置来提升系统并发处理的能力, 如使用nio替代阻塞I/O,提高系统处理并发请求的能力,或者调整JVM与ActiveMQ可用的 内存空间等。由于垂直扩展较为简单,此处就不再详细叙述了。
硬件的性能毕竟不能无限制地提升,垂直扩展到一定程度时,必然会遇到瓶颈,这时就需 要对系统进行相应的水平扩展。对于ActiveMQ来说,可以采用broker拆分的方式,将不相关 的queue和topic拆分到多个broker,来达到提升系统吞吐能力的目的。
假设使用消息系统来处理订单状态的流转,对应的topic可能包括订单创建、购买者支付、 售卖者发货、购买者确认收货、购买者确认付款、购买者发起退款、售卖者处理退款等,如 图2-18所示。

图2-18 broker的拆分

原本一个broker可以承载多个queue或者topic,现在将不相关的queue和topic拆出来放
到多个broker当中,这样可以将一部分消息量大并发请求多的queue独立出来单独进行处理, 避免了 queue或者topic之间的相互影响,提高了系统的吞吐量,使系统能够支撑更大的并发请 求量及处理更多的消息。当然,如有需要,还可以对queue和topic进行进一步的拆分,类似于 数据库的分库分表策略,以提高系统整体的并发处理能力。

本文出自   《大型分布式网站架构设计与实践试读样章》 试读,如果感觉到对你有帮助可以去购买该书


原文地址:http://www.itmmd.com/201412/349.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

linux命令详解(20)查找文件locate、whereis、rpm 命令详解   上一篇
下一篇  大型网站架构设计-消息系统ActiveMQ &JMS (1)

精彩回复
发表评论
姓名:       

《程序员app》专门为程序员量身定做!