第1章 快速入门

公司使用的消息队列主要是RocketMQ,之前没有接触过。上网找RocketMQ的学习资料,基本都是零零碎碎的博客。最好的参考就是官网的资料的,但是官网的资料对于我这个英文比较差并且不懂java代码的运维来说实在是太不友好了。后来找到了这本书,里面虽然也有大量的java代码,但是这本书对于运维来说还是很友好,看过之后对RocketMQ的原理和实战都有一定的了解了。下面是书本的一些自认为关键的内容,不包含java代码的解析。(书中的示例用的是rocketmq4.2.0版本的,我实验用的是4.4.0)


本章可以让读者了解RocketMQ 和分布式消息队列的功能,然后搭建好单机版的消息队列,进而能够发送并接收简单的消息。

1.1 消息队列功能介绍

简单来说,消息队列就是基础数据结构课程里“先进先出”的一种数据结构,但是如果要消除单点故障,保证消息传输的可靠性,并且还能应对大流量的冲击,对消息队列的要求就很高了。现在互联网“微架构”模式兴起,原有大型集中式的IT 服务因为各种弊端,通常被分拆成细粒度的多个“微服务”,这些微服务可以在一个局域网内,也可能跨机房部署。一方面对服务之间松耦合的要求越来越高,另一方面,服务之间的联系却越来越紧密,对通信质量的要求也越来越高。分布式消息队列可以提供应用解耦、流量消峰、消息分发等功能,已经成为大型互联网服务架构里标配的中间件。

1.1.1 应用解耦

复杂的应用里会存在多个子系统, 比如在电商应用中有订单系统、库存系统、物流系统、支付系统等。这个时候如果各个子系统之间的耦合性太高,整体系统的可用性就会大幅降低。多个低错误率的子系统整合在一起,得到的是一个高错误率的整体系统。
以电商应用为例,用户创建订单后,如果耦合调用库存系统、物流系统、支付系统,任何一个子系统出了故障或者因为升级等原因暂时不可用,都会造成下单操作异常,影响用户使用体验。
如图1-1 所示, 当转变成基于消息队列的方式后,系统可用性就高多了,比如物流系统因为发生故障,需要几分钟的时间来修复,在这几分钟的时间里,物流系统要处理的内容被缓存在消息队列里,用户的下单操作可以正常完成。当物流系统恢复后,补充处理存储在消息队列里的订单信息即可,终端用户感知不到物流系统发生过几分钟的故障。

图1-1 消息队列的解耦功能

1.1.2 流量削峰

每年的双十一,淘宝的很多活动都在0 点的时候开启,大部分应用系统流量会在瞬间猛增,这个时候如果没有缓冲机制,不可能承受住短时大流量的冲击。通过利用消息队列,把大量的请求暂存起来,分散到相对长的一段时间内处理,能大大提高系统的稳定性和用户体验。
举个例子,如果订单系统每秒最多能处理一万次下单,这个处理能力应对正常时段的下单是绰绰有余的,正常时段我们下单后一秒内就能返回结果。在双十一零点的时候,如果没有消息队列这种缓冲机制,为了保证系统稳定,只能在订单超过一万次后就不允许用户下单了;如果有消息队列做缓冲,我们可以取消这个限制,把一秒内下的订单分散成一段时间来处理,这时有些用户可能在下单后十几秒才能收到下单成功的状态,但是也比不能下单的体验要好。
使用消息队列进行流量消峰,很多时候不是因为能力不够,而是出于经济性的考量。比如有的业务系统,流量最高峰也不会超过一万QPS ,而平时只有一千左右的QPS 。这种情况下我们就可以用个普通性能的服务器(只支持一千左右的QPS 就可以),然后加个消息队列作为高峰期的缓冲,无须花大笔资金部署能处理上万QPS 的服务器。

1.1.3 消息分发

在大数据时代,数据对很多公司来说就像金矿,公司需要依赖对数据的分析,进行用户画像、精准推送、流程优化等各种操作, 并且对处理的实时性要求越来越高。数据是不断产生的,各个分析团队、算法团队都要依赖这些数据来进行工作,这个时候有个可持久化的消息队列就非常重要。数据的产生方只需要把各自的数据写人一个消息队列即可数据使用方根据各自需求订阅感兴趣的数据,不同数据团队所订阅的数据可以重复也可以不重复,互不干扰,也不必和数据产生方关联。
如图1-2 所示,各个子系统将日志数据不停地写人消息队列,不同的数据处理系统有各自的Offset ,互不影响。甚至某个团队处理完的结果数据也可以写人消息队列,作为数据的产生方,供其他团队使用,避免重复计算。在大数据时代,消息队列已经成为数据处理系统不可或缺的一部分。
除了上面列出的应用解耦、流量削峰、消息分发等功能外,消息队列还有保证最终一致性、方便动态扩容等功能。

图1-2 消息队列的消息分发功能

1.2 RocketMQ 简介

阿里的消息中间件有很长的历史,从2007 年的Notify 到2010 年的Napoli, 2011 年升级后改为MetaQ ,然后到2012 年开始RocketMQ, RocketMQ 使用Java 语言开发,于2016 年开源。第一代的Notify 主要使用了推模型,解决了事务消息;第二代的MetaQ 主要使用了拉模型,解决了顺序消息和海量堆积的问题。RocketMQ 基于长轮询的拉取方式, 兼有两者的优点。
每一次产品迭代,都吸取了之前的经验教训,目前RocketMQ 已经成为 Apache 顶级项目。在阿里内部, RocketMQ 很好地服务了集团大大小小上千个应用,在每年的双十一当天,更有不可思议的万亿级消息通过RocketMQ 流转(在2017 年的双十一当天,整个阿里巴巴集团通过RocketMQ 流转的线上消息达到了万亿级,峰值TPS 达到5600 万),在阿里大中台策略上发挥着举足轻重的作用。
此外, RocketMQ 是使用Java 语言开发的,比起Kafka 的Scala 语言和RabbitMQ 的Erlang 语言,更容易找到技术人员进行定制开发。

1.3 快速上手RocketMQ

本节介绍如何安装配置单机版的RocketMQ ,以及简单地收发消息。读者也可以参考RocketMQ 官网的说明文档。(可以看我的对应博客

1.4 本章小结

本章介绍了消息队列的功能,以及RocketMQ 这个消息队列从阿里诞生的历史。然后基于快速上手的目的, 本章直接给出了一些命令示例, 读者跟着操作即可快速启动一个RocketMQ 服务,并且可以尝试发送和接收简单的消息。有了本章的初步体验后,下一章将介绍如何在生产环境使用RocketMQ 。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容