背景
笔者所在的业务线,最初化分为三个服务,由于业务初期业务复杂度相对简单,三个业务服务都能很好的独立完成业务功能。
随着产品迭代,业务功能越来越多后慢慢也要面对高并发、业务解耦、分布式事务等问题,所以经过团队内部讨论,引入 RocketMQ 消息中间件来更好的处理业务。
由于公司内部业务线部署相互独立,我们业务线对引入 RocketMQ 的需求也比较急切,所以打算自己搭建一套高可用的 RocketMQ 集群,同时对于自建的 RocketMQ 集群需要如下特性:
- 高可用
- 高并发
- 可伸缩
- 海量消息
命名服务(NameServer)
首先第一步要让 NameServer 高可用,前期规划了三台机器部署 NamseServer 这样可以充分保证可用性,即使两台机器挂掉也能保证集群的正常使用,只要有一个 NamseServer 还在运行,就能保证 RocketMQ 系统的稳定性。
NameServer 的设计是相互的独立的,任何一台 NameServer 都可以的独立运行,跟其他机器没有任何通信。 每台 NameServer 都会有完整的集群路由信息,包括所有的 Broker 节点的信息,我们的数据信息等等。所以只要任何一台 NamseServer 存活下来,就可以保存 RocketMQ 信息的正常运行,不会出现故障。