随着移动互联网的充分发展,各种新技术层出不穷,只有优秀的技术才能经得起行业的考验。而消息中间件是后台技术栈中绕不开的一个技术组件,其是应对海量用户、高并发、高可靠的架构挑战的超级利器。Apache RocketMQ正是这样一款足够优秀的消息中间件产品。Apache RocketMQ 脱胎于阿里巴巴的“双十一”,经过多年“双十一”洪峰流量的考验,其性能、稳定性已经得到证明,而后广泛应用于多个大型的互联网公司,如滴滴、微众银行等,已经成为国内最优秀、最受欢迎的消息中间件之一。
经过多年的发展,介绍RocketMQ的书籍、文章已不少。读者可以借助这些优秀的书籍、文章去学习RocketMQ的使用,去了解源码的实现。然而一些书籍或者博客文章大多基于源码解读的方式展开,这种方式对于深入学习确实很有益处,但是学习难度较大且较为枯燥,使初学者产生畏难情绪。
这本《Apache RocketMQ 进阶之路》的宗旨是让读者能轻松掌握Apache RocketMQ的原理、最佳实践,所以放弃了贴源码、贴示意代码的传统方式。而是大量采取图表说明的方式进行展开。希望通过这种方式能帮助读者利用地铁上、睡觉前等碎片时间轻松理解Apache RocketMQ的原理并掌握其优秀的实践。
RocketMQ长轮询技术内幕
长轮询(Long Polling)是一种比较特殊的轮询机制。讲解长轮询之前,先介绍下什么是轮询。
短轮询
简单来说,轮询也叫短轮询,短轮询就是 Pull 模式的客户端,每隔一段时间拉取一遍数据。运气好的话,可能就有数据,但是可能大部分情况运气都不好,那就做了一遍无用功,还增加了服务端的压力。为了消息的实时性足够高,轮询的频次就要足够密,但这变相又增加了服务端的压力。使用短轮询时,开发者需要权衡消息实时性和服务端压力两者的关系。如图1所示,客户端每5s请求一次最新数据,那么数据将最长在5s的时间内得到刷新,也就是说数据的展示最多会有5s的延迟。如果还需要缩短这个延迟,则需要更加频繁的访问(例如1s访问一次),但是这样也会放大服务端的压力。 图1.短轮询示意图
那么有没有可能在不增加服务端压力的前提下,也能保证实时性的轮询呢?答案就是长轮询。
长轮询
如果读者在网上去查询长轮询的概念,你很可能会得到下面一段解释。
“服务端没有相关数据,会 Hold 住请求,直到服务端有相关数据,或者等待一定时间超时才会返回。”
举一个例子(如图2所示),消费者在 10:00:00 的时候发起了 Pull 请求,但是这时候消息并没有到达,这时候服务端会 Hold 住这个请求,10 s后10:00:10 消息到了,才返回新的消息给消费者。也就是说对于客户端(消息接收者)来说,这个请求看起来处理了10s才返回,10s之后结果返回的时候就得到了最实时的内容了,这之后立刻又发起下一轮的请求。正因为这个方案也需要客户端持续性的发起查询请求,所以叫作长轮询。
图2.长轮询流程示意图用
这种方案,服务端在没有数据的时候是不会给客户端作响应的,所以客户端不会持续发起没有新数据内容返回的请求,也就是说不会有无用功的产生。这一点设计很重要,因为这样保证了请求量是有限的,不会持续地增大服务端压力。同时当新消息内容产生的时候,消息又能及时的返回给接收方,感觉就像有推送一样,所以消息是很实时的,几乎能达到和Push机制一样的实时性。
这里面的第2步需要服务Hold住请求,读者可能会觉得有点玄幻,什么叫“Hold 住请求”?具体怎么实现这个 “Hold 住请求”呢?详细内容见《Apache RocketMQ 进阶之路》第四章。
- 《Apache RocketMQ 进阶之路》的结构采取由浅入深的方式。全书分基础篇、原理篇、进阶篇。基础篇讲解Apache RocketMQ 的基础使用及一些最佳实践的总结。原理篇按模块点深入讲解Apache RocketMQ的核心设计,是Apache RocketMQ 设计中最精华的部分,通过此部分的学习,读者将深入掌握别人需要阅读源码才能掌握的优秀设计。进阶篇则是笔者在多年大型互联网项目的实践中遇到的一些高级话题、难题,能帮助不少开发人员成为优秀架构师。
- 《Apache RocketMQ 进阶之路》告别枯燥的源码解读,以生动的案例、上百张手绘图逐层揭秘RocketMQ的原理,真正意义上做到了深入浅出;如果只推荐一本书去学习RocketMQ,本书将是最合适的一本。
- 《Apache RocketMQ 进阶之路》采取类比讲解的方式去展开一些知识点。例如讲解顺序消息的章节同时也会介绍Kafka 的实现、在讲解事务消息的章节也会介绍分布式事务的通用解决方案,通过这种方式很容易引导读者思考和联想,使得知识的掌握更为轻松。类似课堂的学习一样,每一章的结束都会留一道或数道思考题,以便进一步加深对知识的掌握与理解。
- 《Apache RocketMQ 进阶之路》分三大部分。第1部分是基础篇,包含第 1~4 章,主要讲解Apache RocketMQ入门及其基础使用。第2部分是原理篇,包含第 5 ~12 章,主要讲解如消费原理、负载均衡原理、顺序消息原理等核心的RocketMQ部分。第3部分是进阶篇,包含第 13~16 章,主要讲解如消息幂等、双活设计等进阶为架构师必须掌握的内容。
作者介绍
配套资源丰富
图书内文展示