我们今天,说一下,京东基础架构团队开发的消息队列JMQ,对于其内部的架构设计,对于其底层的技术和优化技巧说一下

1.JMQ的Broker是如何异步的处理消息的

消息队列的Broker,核心流程就是接收生产者发来的消息,给消费者发送消息,在JMQ中,经过优化后的消息生产流程,可以达到破百万次请求

在整个流程中,我们采用了大量的异步线程

在JMQ的架构中,消息生产的流程基本如下

图片

生产者发送一批消息给Broker的主节点

Broker收到消息,进行一系列的检查和解析等操作

然后复制给所有的从节点,并写入到磁盘

返回成功响应

对此,我们的线程模型基本如下

图片

整体分为了6组线程,将大的线程拆为了小县城

流程的结构如下

首先是入口,Broker收到一个来自生产者的请求之后,会在一个Handler之中处理这些请求,这些和我们在用Handler中接收HTTP请求一样

收到之后,直接将其放到内存队列,然后handler完成处理,等待向Socker发送响应

内存队列有对应的消费者

消费者是一个WriteThread,不断的获取,解析,写入存储,序列化之后的消息写到一个内存缓存中,等待处理

然后两个线程分别的,从JournalCache进行拉取,一个负责同步到从Borker,一个负责刷盘

这两个又是比较复杂的流程,刷盘会在刷盘完成后更新内存中维护的刷盘的位置,另一条则是等待从节点响应

然后,有一组ReponseThreads线程负责响应,检查对应的相应链表,跟去Qos级别的设置,来判断是否发送成功了,因为有的是判断消息写入磁盘才算成功

这样就完成了消息生产的流程,整个流程中,除了JournalCanch外,基本不会出现共享的资源

发表评论

邮箱地址不会被公开。 必填项已用*标注