RocketMQ技术内幕:RocketMQ架构设计与实现原理(第2版)
上QQ阅读APP看书,第一时间看更新

前言

为什么要写这本书

随着互联网技术的蓬勃发展和微服务架构的普遍应用,加上大数据分析及高并发流量场景的复杂度越来越高,系统架构开始追求小型化、轻量化,为此我们也需要拥有高性能、高可用、低延迟、支持顺序、支持容错、支持事务等功能的消息中间件来支撑互联网高速发展。目前,RPC、服务治理、分布式、消息中间件已经成为互联网架构的标配。

引入消息中间件后,服务之间就可以通过可靠的异步调用来降低系统之间的耦合度,提高系统的可用性。消息中间件具有高效的消息处理能力,可以让系统承接大数据量的并发及流量脉冲而不被击垮,在保证性能的同时改善了用户体验。此外,消息中间件还可以解决系统之间数据的一致性(最终一致性)问题。

RocketMQ作为阿里开源的一款高性能、高吞吐量的消息中间件,承载了阿里“双11”的大部分业务,可以说是一名久经战场的“精英”、值得信任的“伙伴”。它采用Java作为开发语言,自然而然得到了广大互联网架构师的青睐,并成为互联网行业首选的消息中间件。

初次接触RocketMQ是在听到它被阿里巴巴正式捐献给Apache基金会,成为Apache的顶级开源项目时。这意味着承载阿里“双11”巨大流量的消息中间件完全开源,对广大Java开发者来说无疑是一个巨大的利好,让我们有机会一睹高性能消息中间件RocketMQ的“真容”。作为一名阿里技术崇拜者,我内心异常激动,于是不假思索地在CSDN上开通了专栏“源码研究RocketMQ”,并受到了广大技术爱好者的支持。

RocketMQ作为一款高性能消息中间件,其核心优势是可靠的消息存储、高性能且低延迟的消息发送、强大的消息堆积能力与消息处理能力、严格的顺序消息模式等。RocketMQ的另一个核心优势是懂得取舍。软件设计不可能做到面面俱到,消息中间件的理想状态是一条消息能且只能被消费一次,要做到这一点,必然需要牺牲性能。RocketMQ的设计者解决这一难题的办法是不去解决,即保证消息至少被消费一次,但不承诺消息不会被消费者多次消费,其消费的幂等由消费者实现,从而极大地简化了实现内核,提高了RocketMQ的整体性能。

RocketMQ被捐献给Apache基金会后一直在快速发展,相关OpenMessaging的标准也已经发布。本书的写作目的是与各位读者探讨RocketMQ的实现原理,帮助读者更好地在实际项目中应用RocketMQ。

读者对象

本书的读者对象如下:

  • RocketMQ的用户和爱好者;
  • RocketMQ代码开发志愿者;
  • Java中高级开发工程师;
  • Java架构师;
  • Java开源相关技术人员。

本书特色

本书从源码的角度对RocketMQ的实现原理进行详细剖析。作为一本源码阅读类图书,本书的讲解切入点并不是组成RocketMQ的一个个源码包,而是功能模块(如topic路由中心、消息发送、消息存储、消息消费、事务消息),这样更加贴近实战需求。

如何阅读本书

本书从逻辑上分为三部分。

第一部分为准备篇(第1章),简单介绍了RocketMQ的设计理念与目标,并介绍了在开发工具中如何对RocketMQ进行代码调试。

第二部分为实现篇(第2~9章),重点讲解了RocketMQ各个功能模块的实现原理,包括NameServer、消息发送、消息存储、消息消费、ACL功能、主从同步、消息轨迹、主从切换等。

第三部分为实例篇(第10~11章),先介绍了RocketMQ监控,然后通过示例展示了RocketMQ的使用技巧。

本书在最后的附录中给出了RocketMQ的主要参数列表及含义,增加了各版本概述和升级建议,供读者参考。

本书的行文思路主要是根据消息发送的全流程进行展开,从路由管理到消息发送、消息存储、消息消费,再到顺序消息、事务消息,从而实现消息链路的闭环。建议读者按照该思路带着问题来阅读,这样或许会事半功倍。

勘误和支持

由于作者水平有限,编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。大家可以在CSDN博客专栏(https://blog.csdn.net/prestigeding/article/details/85233529)中留言反馈。书中的全部源文件可以从GitHub RocketMQ官方仓库中下载,我们也会将相应的功能及时进行更新。如果你有更多的宝贵意见,请通过如下渠道向我们反馈:(1)发送邮件至dw19871218pmz@126.com;(2)添加作者微信号dingwpmz进行交流;(3)关注微信公众号“中间件兴趣圈”并给作者留言。我们在公众号中分享了本书的学习指南,回复“学习指南”即可获取。期待能够得到你的真挚反馈。

007-1

致谢

首先要感谢Mycat开源社区负责人周继锋对我的提携与指导,感谢你为我的职业发展指明前进的方向。

感谢刘建刚、刘树东、叶长军、郭雪磊、庄辉煌、徐建、陈凌祺、马志彬、李平、李江明、黄勇发、刘玄等朋友对本书提供了宝贵的校正意见。也要感谢RocketMQ联盟中每一位充满创意和活力的朋友——肖文科、王辉、杨忠儒以及名单之外的很多朋友,感谢你们对我的支持与帮助。

感谢机械工业出版社华章公司杨福川老师的引荐,是你的努力才促成了本书的出版。感谢韩蕊编辑在这一年多的时间中始终支持我写作,你的鼓励和帮助引导我顺利完成了写作。

感谢校稿者梁勇为提高本书质量付出的辛勤工作,感谢陈鹏飞在我写作过程中提供了大力支持。

最后感谢我的爸爸、妈妈、爷爷、奶奶,感谢你们将我培养成人,并时时刻刻给予我信心和力量!感谢我的老婆、女儿,你们是我持续努力的最大动力。

谨以此书献给我最亲爱的家人,以及众多热爱RocketMQ的朋友们!

丁威 公众号“中间件兴趣圈”维护者

感谢同事王盟禹、李国文、李任在我写作过程中提出的建议,有时为了一句描述我们会反复进行讨论和优化。

感谢机械工业出版社华章公司杨福川编辑对本书出版工作的支持,感谢韩蕊编辑加班对书稿进行审核。

感谢RocketMQ团队以及使用过RocketMQ并支持开源社区的朋友们!

最后感谢家人的默默支持。

谨以此书献给众多使用过RocketMQ的朋友们!

张登 公众号“IT巅峰技术”维护者

感谢RocketMQ团队,有了你们的付出,才有这么好的产品。同时感谢杨福川编辑对本书出版工作的支持。

谨以此书献给我最亲爱的家人和同事,帮助过、关注过我的人,以及使用、学习过RocketMQ的朋友们!

周继锋