1.什么是Rocketmq
RocketMQ是一款开源的分布式消息中间件,由阿里巴巴团队最初开发,并于2016年贡献给Apache软件基金会,后成为Apache顶级项目。RocketMQ设计用于处理高并发、高吞吐量的场景,支持丰富的消息交互模式。
以下是RocketMQ的一些关键特性:
- 分布式架构:RocketMQ采用分布式集群架构,包含多个Broker服务器和NameServer。NameServer用于维护Broker节点和Topic路由信息,而Broker负责储存和转发消息。
- 消息可靠性和高性能:RocketMQ提供高可靠性的消息传输保证,如消息持久化、消费者消息确认机制和容错机制。同时,它也注重高吞吐量的性能优化。
- 多种消息模型支持:RocketMQ支持多种消息传递模式,包括同步发送、异步发送和单向发送,也支持广播和集群消费模式。
- 顺序消息和延迟消息:RocketMQ支持严格的消息顺序和可配置的延迟消息传递。
- 事务消息:RocketMQ支持事务性消息,允许在分布式系统中进行事务操作而不丢失消息。
- 多语言客户端:提供多种语言的客户端,如Java、C++、Go等,方便不同开发环境中的集成。
- 高度可扩展:RocketMQ通过水平扩展Broker和NameServer节点来支持更大规模的系统。
- 多租户和多命名空间:RocketMQ支持多租户操作,每个租户可以有独立的命名空间,方便资源隔离和管理。
- 监控和运维工具:提供了丰富的监控和运维工具,帮助管理和监控集群状态。
RocketMQ适用于大规模的分布式系统,广泛运用于实时消息处理、日志聚合、流数据处理、事务性消息传递等场景。由于其高性能和可靠性,它常被用于电商、金融、物联网、大数据等行业。
2.rocketmq部署架构与领域模型
2.1 架构
- NameServer:独立的命名服务,用于管理Broker服务器,是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。
- Broker部署相对复杂,Broker分为Master与Slave,一个Master可以对应多个Slave,但是一个Slave只能对应一个Master,Master与Slave的对应关系通过指定相同的BrokerName和不同的BrokerId来定义,BrokerId为0 表示Master,非0表示Slave。Master也可以部署多个。每个Broker与Name Server集群中的所有节点建立长连接,定时注册Topic信息到所有Name Server。
- Producer与Name Server集群中的其中一个节点(随机选择)建立长连接,定期从Name Server获取Topic路由信息,并向提供Topic服务的Master建立长连接,且定时向Master发送心跳。Producer完全无状态,可集群部署。
- Consumer与Name Server集群中的其中一个节点(随机选择)建立长连接,定期从Name Server获取Topic路由信息,并向提供Topic服务的Master、Slave建立长连接,且定时向Master、Slave发送心跳。
在rocketmq的架构中,【无状态】是非常巧妙的点,无状态具备诸多优点:
- 可伸缩性:无状态节点可以轻松地进行水平扩展(Scale Out),因为没有状态信息需要同步。新的节点可以随时添加到系统中,而不需担心现有状态的迁移问题。
- 负载均衡:由于每个节点之间是相互独立的,负载均衡器可以简单地将请求分配给任何一个节点,无需考虑节点间的状态同步,这样可以更有效地分散负载。
- 容错性:在无状态架构中,若某个节点失败,其他节点可以无缝接管处理请求,因为所有节点都是等效的,没有持久状态的依赖。这简化了故障恢复流程。
- 简化设计:无状态设计通常更加简单,因为开发者无需管理和同步跨多个节点的状态,降低了处理分布式数据一致性的复杂性。
- 部署灵活性:无状态服务可以在任何时间被部署在任何机器上,不需要考虑状态信息的迁移和同步问题,使得自动化部署更为简单