消息系统——ActiveMQ & JMS

来源:互联网 发布:济宁淘宝培训 编辑:程序博客网 时间:2024/05/22 17:02

《大型分布式网站架构设计与实践》

消息系统

在分布式系统中,消息系统的应用十分广泛,消息可以作为应用间通信的一种方式。消息被保存到队列中,知道被接收者取出。由于消息发送者不需要同时等待消息接收者的响应,消息的异步接收降低了系统集成的耦合度,提升了分布式系统协作的效率,使得系统能够更快的响应用户,提供更高的吞吐。当系统处于峰值压力时,分布式消息队列还能作为缓冲,销锋填谷,缓解集群的压力,避免整个系统被压垮。

开源的消息系统有很多,包括Apache的ActiveMQ、Apache的Kafka、RabbitMQ、memcacheQ等。


ActiveMQ & JMS

ActiveMQ 采用java来实现,因此他能很好地支持javaEE提出的JMS规范。JMS规范(Java Message Service,既java消息服务)是一组Java应用程序接口。他提供消息的创建、发送、接收、读取等一系列服务。JMS定义了一组公开应用程序接口和相应的语法,类似于java数据库的统一访问接口JDBC,他是一种与厂商无关的API,使得java程序能够与不同厂商的消息组件很好地进行通信。

JMS支持的消息类型包括简单文本、可序列化对象、键值对、字节流、流,以及无有效负载的消息等。消息的发送是异步的,因此,消息的发布者发送完消息之后,不需要等待消息接收者立即响应,这样便提高了分布式系统协作的效率。

JMS支持两种消息发送和接收模型。一种称为Point-to-Point(P2P模型),既采用点到点的方式发送消息。P2P模型是基于队列的,消息生产者发送消息到队列,消息消费者从队列中接收消息,队列的存在使得消息的异步传输成为可能,P2P模型在点对点的情况下进行消息的传递时使用。另一种称为pub/sub(Publish/Subscribe,既发布/订阅)模型,发布/订阅模型定义了如何向一个内容节点发布和订阅消息,这个内容节点称为topic(主题),主题可以认为是消息传递的中介,消息发布者将消息发布到某个主题,而消息订阅者则从主题订阅消息。主题使得消息的订阅者与消息的发布者互相保持独立,不需要进行接触即可保证消息的传递,发布/订阅模型在消息的一对多广播时采用。


ActiveMQ 集群部署

针对分布式环境下对系统高可用的严格要求,以及面临高并发的用户访问,海量消息发送等场景的挑战,单个ActiveMQ 实例往往难以满足系统高可用与容量扩展的需求,这时ActiveMQ 的高可用方案及集群部署就显得十分重要了。

当一个应用被部署到生产环境中,进行容错和避免单点故障是十分重要的,这样可以避免因为单个节点的不可用而导致整个系统的不可用。目前,ActiveMQ 所提供的高可用方案主要是基于Master-Slave模式实现的冷备方案,较为常用的包括基于共享文件系统的Master-Slave架构和基于共享数据库的Master-Slave架构。

当系统规模不断的发展,产生和消费者消息的客户端越来越多,并发的请求数以及发送的消息量不断增加,使得系统逐渐地不堪重负。采用垂直扩展可以提升ActiveMQ单broker的处理能力。扩展最直接的方法就是提升硬件性能,如提高CPU和内存的能力,这种方式最为简单也最为直接。在这就是通过调节ActiveMQ本身的一些配置来提升系统的并发处理能力,如使用nio代替阻塞I/O,提高系统处理并发请求的能力,或者调整JVM与ActiveMQ可用内存空间。

硬件的性能毕竟不能无限制的提升,垂直扩展到一定程度时,必然会遇到瓶颈,这时需要对系统进行相应的水平扩展。对于ActiveMQ来说,可以采用broker拆分的方式,将不相关的queue和topic拆分到多个broker,来达到提升系统吞吐能力的目的。

0 0
原创粉丝点击