高性能可伸缩的分布式消息中间件设计
本博客迁移到部署在jae上的独立博客系统wordpress,博客地址:点击打开独立博客。欢迎大家一起来讨论IT技术。
消息中间件基本上是每一个大型互联网公司的标准基础技术组件配置,虽然有很多的开源消息中间件,功能也很强大,但是今天我还是想介绍一下怎样自主架构与设计并实现一套完整的分布式消息中间件。
开源的消息中间件或多或少存在一些所谓“坑”,没有遇到大家用得都很happy,遇到的同学就只有加班查资料、google搜索或者直接review开源代码寻找问题原因了。还有就是基本上开源的消息中间件一般都是大而全的功能,一般比较强调通用嘛。今天为大家介绍的是可以灵活横向扩展并且具有高性能的分布式消息中间件的架构设计,也会介绍一些实现的关键技术,也可能很多开源软件实现也有同样的功能,所以通过了解这些设计与实现的核心技术,也可以更好的理解和使用开源的消息中间件。
一、设计目标
先简单此设计需要达到的一些目标吧:
(1)高性能:应该能够充分利用cpu、内存和网卡等资源,通常情况下是把网卡(1000M网卡)撑满;
(2)消息转发实时性:延迟必须在一个设定目标内(可配置);
(3)消息不丢失:正常情况下不丢失(如果由于某一个消息接收到自己网络出现问题导致连接断开丢失的不算,这个需要消息中间件的客户端解决的问题);
(4)可以横向无缝扩展:当一个服务节点服务能力不足时,可以无缝的扩展服务节点,对其他服务节点和所有客户端透明;
(5)安全性:客户端需要通过用户名和密码才能和服务器建立连接、发送消息和订阅消息等;
(6)可以无缝升级系统:程序由于bug或者新增功能等上线是在所难免的,但是不应该影响正常的消息通信;
(7)可以无缝缩减服务节点:如果消息转发量不是很大使用过多的节点是资源的浪费(服务器、电费等);
(8)分布式,防单点;
(9)支持分组订阅:这个分组订阅的功能太好使用了,尤其在做任务的负载均衡调度的时候,后面我会用一篇单独的文章介绍基于分布式消息中间件的负载均衡调度系统设计;
(10)其他。。。。
二、基本架构图
先上图,在解释,如下图:
整个内容请看:www.wuyouqiang.com