RocketMQ读书笔记1——简述

【消息队列的功能介绍】

分布式消息队列可以提供应用解耦、流量削峰、消息分发、保证最终一致性、方便动态扩容等功能。

 

【MQ使用场景1——应用解耦】

  复杂的系统如电商系统,会存在多个子系统,如订单系统、库存系统、物流系统、支付系统。如果各个子系统之间耦合性太强,会导致整体系统的可用性大幅降低,多个低错误率的子系统强耦合,会得到一个高错误率的整体系统。

  用户创建订单后,如果耦合地调用库存系统、物流系统、支付系统,任何一个子系统出现故障不可用,都会造成下单操作异常,影响用户体验。

 [ 举例——通过MQ解耦应用,提高系统的可用性和稳定性 ]

  基于消息队列的方式后,解耦各个应用,能提高系统的可用性。如果物流系统发生故障,需要几分钟来修复,在这几分钟里,物流系统需要被处理的订单信息内容缓存在消息队列中,用户下单可以正常完成,当物流系统恢复后,补充处理存储在队列的订单信息即可,用户感知不到物流系统发生过的几分钟故障。

 

【MQ使用场景2——流量削峰】

  秒杀活动,大部分的应用系统流量会瞬间猛增,这个时候没有缓冲机制,系统要承受短时的大流量冲击,通过消息队列,可以把大量的请求缓存起来,让系统合理处理这些请求,虽然系统的处理时间增长了,但是能大大提高系统的稳定性和用户体验。

[ 举例——流量削峰提高系统的可用性 ]

  比如,如果订单系统每秒最多处理1W次下单,在秒杀活动时,可能短时间内,每秒有10W请求,为了保证系统的稳定性:

不加消息队列:

  订单超过1W次,就不允许用户下单了。

加了消息队列:

  可以取消1W这个限制,把请求缓存在消息队列中,系统提高时长来处理,有的用户请求可能会在下单十几秒后才会收到下单成功的状态,但是也比不能下单要好。

[ 小结 ]

  使用消息队列进行流量削峰,很多使用是出于经济考虑。有的业务系统,流量最高峰QPS也不会超过1W的QPS,而平时只有1K左右的QPS,这种情况,可以考虑使用一个普通性能的服务器(只需支持1K左右的QPS),然后加个消息队列作为高峰请求的缓冲,这样可以节省很多资金。

 

【MQ使用场景3——消息分发】

  在大数据这块,数据的产生方会把各自的数据写入一个消息队列即可,数据的使用方根据各自的需求订阅感兴趣的数据,不同的数据团队所订阅的数据可以重复也可以不重复,互不干扰,也不必和数据产生方关联。

[ 举例——消息分发 ]

  各个子系统将日志文件不停写入消息队列,不同的数据处理系统有各自的Offset,互不影响。甚至某个团队处理完的结果也可以写入消息队列,作为数据的产生方,供其他团队使用,避免重复计算。

 

【RocketMQ的基本指令】 

【1.启动消息队列】

启动NameServer

nohup sh bin/mqnamesrv &
tail -f ~/logs/rocketmqlogs/namesrv.log
提示:
The Name Server boot success...

启动Broker

nohup sh bin/mqbroker -n localhost:9876&
tail -f ~/logs/rocketmqLogs/broker.log
提示:
The broker[%s, 192.168.0.233:10911] boot success...

 

【2.关闭消息队列】

关闭 NameServer 

sh bin/mqshutdown broker
提示:
The mqbroker(36695) is running...
send shutdown request to mqbroker(36695) OK

关闭 Broker

sh bin/mqshutdown namesrv
提示:
The mqnamesrv(36664) is running...
Send shutdown request to mqnamesrv(36664) OK

 

【用命令行发送和接受消息】

 

posted @ 2018-11-29 23:27  HigginCui  阅读(411)  评论(0编辑  收藏  举报