一张图读懂RocketMq原理
2021-07-18 07:43:55 0 举报
AI智能生成
通晓RocketMq原理
作者其他创作
大纲/内容
使用场景<br>
系统间通信<br>
异步<br>
解耦
削峰填谷<br>
底层原理<br>
Producer
<br>
数据存储机制
<br>
主从原理<br>
<br>
Raft算法<br>
Leader选举<br>
多副本同步机制<br>
Consumer
一个Topic
多个MessageQueue
多个ConsumeQueue
一个MessageQueue只能被一台机器消费,但一台机器可以消费多个MessageQueue<br>
Broker会存储每个消费组的消费offset,下次消费直接从offset位置读取<br>
如果消费组中出现机器宕机或者扩容加机器,实会进入一个rabalance的环节,也就是说重新给各个消费机器均匀分配他们要处理的MessageQueue
主从读写负载均衡<br>
Commit Log利用Page Cache实现写磁盘,异步刷盘,os cache对于CommitLog而言,主要是提升文件写入性能,当你不停的写入的时候,很多最新写入的数据都会先停留在os cache里,当消费者读取的数据不在Master的os Cache中时,Master会认为自己的负载较高,让消费者下次从Flower读取消息<br>
存储优化<br>
Commit Log利用Page Cache实现写磁盘,异步刷盘<br>
mmap技术,实现零拷贝,但限制文件大小为1.5-2G,所依RocketMQ限制Commit Log文件大小为1G<br>
os cache对于CommitLog而言,主要是提升文件写入性能,当你不停的写入的时候,很多最新写入的数据都会先停留在os cache里,比如这可能有10GB~20GB的数据,之后os会自动把cache里的比较旧的一些数据刷入磁盘里,腾出来空间给更新写入的数据放在os cache里,所以大部分数据可能多达几个TB都是在磁盘上的
Consume Queue文件大小5.6M,可以全部读入Page Cache,相当于在内存读取<br>
网络通讯优化<br>
<br>
让多组不同的线程来完成各自的工作,每组线程都不会影响到其他线程,任何一个环节在执行的时候,都不会影响其他线程池在其他环节进行请求的处理
集群架构<br>
<br>
NameServer
DeLedger
客户端集群部署<br>
集群化部署<br>
压测
多机器多线程压测<br>
观察RocketMq的TPS<br>
观察机器的cpu,磁盘,网络,内存负载<br>
生产级参数调整<br>
os内核参数
jvm参数
中间件核心参数<br>
可视化监控<br>
RocketMq控制台
服务器滋生监控:zabbix
秒杀场景<br>
读(静态化)
多级缓存<br>
CDN缓存
Nginx Lua缓存<br>
redis缓存
写(异步)
秒杀答题(业务优化)<br>
扣库存<br>
redis
下订单<br>
写入rocketMq
避免数据库抗高并发请求<br>
独立部署秒杀系统<br>
0 条评论
下一页