根据RocketMQ4.9.1的更新日志,我们从中提取到关于消息发送性能优化的【Issues:2883】,详细链接如下:具体优化点如截图所示:

首先先尝试对上述优化点做一个简单的介绍:
- 对WaitNotifyObject的锁进行优化(item2)
- 移除HAService中的锁(item3)
- 移除GroupCommitService中的锁(item4)
- 消除HA中不必要的数组拷贝(item5)
- 调整消息发送几个参数的默认值(item7)
- sendMessageThreadPoolNums
- useReentrantLockWhenPutMessage
- flushCommitLogTimed
- endTransactionThreadPoolNums
- 减少锁 的作用范围(item8-12)
通过阅读上述的变更,总结出优化手段主要包括如下三点:
- 移除不必要的锁
- 降低锁粒度(范围)
- 修改消息发送相关参数
接下来结合源码,从中挑选具有代表性功能进行详细剖析,一起领悟Java高并发编程的魅力。
1、移除不必要的锁
本次性能优化,主要针对的是RocketMQ同步复制场景。
我们首先先来简单介绍一下RocketMQ主从同步在编程方面的技巧。
RocketMQ主节点将消息写入内存后, 如果采用同步复制,需要等待从节点成功写入后才能向消息发送客户端返回成功,在代码编写方面也极具技巧性,时序图如下图所示:

本文深入探讨了RocketMQ在4.9.1版本中的性能优化,主要涉及三个方面:移除不必要的锁,降低锁的范围以及调整消息发送相关参数。通过使用自旋锁替换synchronized,去除多余的锁,以及优化锁的粒度,提升了并发处理能力。同时,修改了如sendMessageThreadPoolNums等参数,以适应不同场景的需求,展示了Java高并发编程的实践智慧。
最低0.47元/天 解锁文章
9546

被折叠的 条评论
为什么被折叠?



