UCMQ是一款轻量的HTTP协议级消息队列服务组件,项目的最初原型来自“张宴”的HTTPSQS。
基本特性:
常见部署:
UCMQ逻辑架构中通常会涉及到三个角色:生产者(producer)/异步消息队列(UCMQ)/消费者(consumer),而三者间都以http协议作为通讯方式,如下图:
【UCMQ部署逻辑架构图】
【说明】 在整个部署架构中“生产者”和“消费者”都被视为UCMQ的客户端。“生产者”和“消费者”通过设定的负载均衡机制访问UCMQ服务端。每个客户端(生产 者/消费者)均可注册一个或多个服务端(在客户端配置文件添加每个UCMQ服务端监听地址),如果注册多个则可以“业务容灾”和“负载均衡”。
内部结构:
【UCMQ内部结构图】
【说明】
控制模块:负责UCMQ内部流程的控制;
主从复制模块:将数据变更使用binlog方式同步到备机实现容灾(本版本暂不实现);
http协议处理模块:http处理模块负责http协议的解析和封装;
libevent网络事件驱动模块:负责异步事件的接收和分发;
MQ队列管理模块:管理所有队列的rtag信息和队列使用状态信息;
数据存储模块:负责消息持久化(当前数据文件mmap到缓存,所以持久化由系统 辅助完成),清理垃圾数据文件(一个队列中可有多个文件);负责准确和完整的存/取队列的rtag信息。
存储设计 :
由于HTTP_SQS项目是基于TC存储数据,众所周知TC的数据文件是从头开始map到缓存的,由于数据量的扩大不能被缓存的数据将很大程度上影 响服务的性能和稳定性。所以UCMQ摒弃了TC,使用日志文件方式存储消息,数据缓存被顺序读取至内存中,且缓存区域随读写指针移动,这样既节省了内存使 用也保证了性能。设计原理如图: ****
【UCMQ存储设计图】