消息队列高手课
李玥
京东零售技术架构部资深架构师
立即订阅
8426 人已学习
课程目录
已完结 41 讲
0/4登录后,你可以任选4讲全文学习。
课前必读 (2讲)
开篇词 | 优秀的程序员,你的技术栈中不能只有“增删改查”
免费
预习 | 怎样更好地学习这门课?
基础篇 (8讲)
01 | 为什么需要消息队列?
02 | 该如何选择消息队列?
03 | 消息模型:主题和队列有什么区别?
04 | 如何利用事务消息实现分布式事务?
05 | 如何确保消息不会丢失?
06 | 如何处理消费过程中的重复消息?
07 | 消息积压了该如何处理?
08 | 答疑解惑(一) : 网关如何接收服务端的秒杀结果?
进阶篇 (21讲)
09 | 学习开源代码该如何入手?
10 | 如何使用异步设计提升系统性能?
11 | 如何实现高性能的异步网络传输?
12 | 序列化与反序列化:如何通过网络传输结构化的数据?
13 | 传输协议:应用程序之间对话的语言
14 | 内存管理:如何避免内存溢出和频繁的垃圾回收?
加餐 | JMQ的Broker是如何异步处理消息的?
15 | Kafka如何实现高性能IO?
16 | 缓存策略:如何使用缓存来减少磁盘IO?
17 | 如何正确使用锁保护共享数据,协调异步线程?
18 | 如何用硬件同步原语(CAS)替代锁?
19 | 数据压缩:时间换空间的游戏
20 | RocketMQ Producer源码分析:消息生产的实现过程
21 | Kafka Consumer源码分析:消息消费的实现过程
22 | Kafka和RocketMQ的消息复制实现的差异点在哪?
23 | RocketMQ客户端如何在集群中找到正确的节点?
24 | Kafka的协调服务ZooKeeper:实现分布式系统的“瑞士军刀”
25 | RocketMQ与Kafka中如何实现事务?
26 | MQTT协议:如何支持海量的在线IoT设备?
27 | Pulsar的存储计算分离设计:全新的消息队列设计思路
28 | 答疑解惑(二):我的100元哪儿去了?
案例篇 (7讲)
29 | 流计算与消息(一):通过Flink理解流计算的原理
30 | 流计算与消息(二):在流计算中使用Kafka链接计算任务
31 | 动手实现一个简单的RPC框架(一):原理和程序的结构
32 | 动手实现一个简单的RPC框架(二):通信与序列化
33 | 动手实现一个简单的RPC框架(三):客户端
34 | 动手实现一个简单的RPC框架(四):服务端
35 | 答疑解惑(三):主流消息队列都是如何存储消息的?
测试篇 (2讲)
期中测试丨10个消息队列热点问题自测
免费
期末测试 | 消息队列100分试卷等你来挑战!
结束语 (1讲)
结束语 | 程序员如何构建知识体系?
消息队列高手课
登录|注册

开篇词 | 优秀的程序员,你的技术栈中不能只有“增删改查”

李玥 2019-07-22
00:00
08:35
讲述:李玥 大小:13.77M
你好,我是李玥,目前在京东技术架构部任职架构师。最近几年,我一直从事 PaaS 层基础中间件产品的设计和开发相关工作,通俗地说就是在“造轮子”。
2018 年,作为首席架构师,我和我的团队一起重构了京东自研的消息队列产品:JMQ(即将开源)。我们在京东实现了超过 2000 个节点的超大规模集群部署,经过 2018 年“11.11”和 2019 年“618”两次大促的实战考验,JMQ 很好地承载了大促期间超过万亿的流量洪峰。
在设计开发 JMQ 和其他中间件系统的过程中,我读了很多优秀开源软件的文档和源代码,从中学习和借鉴了很多优秀的设计思想与编码技巧,当然也融入了很多自己的思考和创新。这段经历对我而言弥足珍贵,我也希望能通过这一系列课程,把我学到和悟到的这些底层、通用、有深度的技术分享给你。

底层技术知识,给你深入解决业务问题的能力

你可能会问,我是普通程序员, 工作中只会使用消息队列等“轮子”来实现业务,并没有机会参与到“轮子”的开发,那么学习这些底层的技术知识对我有用吗?当然有用。
消息队列几乎是每个后端程序员都会用到的中间件,它在你的技术栈中重要程度不言而喻。消息队列的功能很简单,就是收发消息,你肯定可以看一下文档,几分钟就写出一个用消息队列收发消息的 Demo。但是,把消息队列真正应用到生产系统中,就没那么简单了。
在使用消息队列的过程中,你会遇到很多问题,比如选择哪款消息队列更适合你的业务系统?如何保证系统的高可靠、高可用和高性能?如何保证消息不重复、不丢失?如何做到水平扩展?诸如此类的问题,每一个问题想要解决好,都不太容易。
比如说面对消息丢失这个问题,你会怎么解决呢?如果你对消息队列不熟悉,常规的做法可能是去搜索引擎上查看一下错误信息,然后照着别人的解决方案尝试下,能不能解决取决于运气。
如果你有一些消息队列使用经验,对于常见的问题,可以根据经验来判断问题所在,而对于一些没见过的问题,那就无能为力了。但如果你掌握了消息队列的实现原理,无论你使用任何一种消息队列,遇到任何问题,都可以从原理层面来分析它的原因,再简单看一下它的 API 和相关配置项,就能很快知道该如何配置消息队列,写出高性能并且可靠的程序。
当然,从职业发展,保持市场竞争力的角度来看,掌握一些底层技术,深耕个人技术栈的深度,实现从“用轮子”到“造轮子”的技术提升,也是一个非常明智的选择。为什么这么说呢?
可以看到,技术圈的风向一直在变,大数据、云的热度已经在慢慢消退,现在当红的是 AI 和 IoT。这些火热的概念,它最终要从论文和 PPT 落地,变成真正能解决问题的系统,否则就是一个空中楼阁。那不变的是什么?
无论 AI 还是 IoT,都是一个分布式系统,都要处理海量的数据,都要应对海量并发,它们需要解决的底层问题是一样的。所以,不管技术圈的风向如何变化,那些掌握这些底层技术的程序员,永远都是最受欢迎的人。这也是我开设这个课程的目的之一。
消息队列也确实是非常适合拿来展开做源码分析的技术。不难发现,消息队列作为使用最广泛、生命力最旺盛的中间件,无论技术如何发展,都离不开分布式系统的最基本需求:通信。它涉及的底层技术是非常全面的,比如:高性能通信、海量数据存储、高并发等。并且,消息队列具有功能简洁、结构清晰的特点,入门简单但具有足够的深度,适合用来进行深入地分析和学习。
从“上古”的 ActiveMQ,如今被广泛使用的 RocketMQ、Kafka,直到最近推出的 Pulsar,伴随着技术的持续发展,一代又一代的消息队列不断推陈出新,性能越来越强大,功能也日臻丰富完善。
在这门课程中,我将拿着“显微镜”和你一起分析这些开源消息队列的源码,学习其优秀的设计思路、高超的优化技巧,以及巧妙的代码结构。
希望通过这次系统学习,你的收获不仅仅是学会并精通消息队列的使用和原理,而且通过和我一起分析这些优秀开源软件的源代码,透过代码领会到其中最本质的、精髓的东西,将你的技术深度和代码能力再提升一个层次,这也是我希望交付给你的终极收获。
总结起来,通过这次系列课程的学习,你可以达成三个成就:
成为消息队列领域的“技术高手”;
掌握从源码分析、解决问题的方法;
将你的综合技术能力提升到一个新的高度,具备成为开源软件项目开发者的能力。
如果你愿意的话,强烈建议你参与某个开源软件项目,成为它的贡献者。

课程设置

我将这个课程设置为三部分:基础篇、进阶篇和案例篇。
基础篇,以讲解消息队列的使用方法和最佳实践为主,包括消息队列基础知识、技术选型、高级功能等,给出消息队列应用过程中常见问题的解决策略。通过基础篇的学习,希望你能对消息队列和相关生态系统有比较深入的认识,成为消息队列“小达人”。
进阶篇,是这个课程的核心内容,我们会深入到源码中去,探讨消息队列的实现原理,帮助你拓展知识深度。
在这个模块的前半部分,每篇会围绕一个知识点来深入探讨,比如像异步模型、高性能的底层网络通信等,其中每一个知识点不仅是中间件开发人员必须掌握的,而且是各大厂面试题中的常考内容,希望你每个知识点都不要放过。
后半部分我会带你分析一些开源消息队列的源代码,每篇选择一个开源的消息队列,针对一个功能特性,来一起分析它的源码是如何实现的,理解这个功能特性的实现原理,同时带你学习源代码中优秀的设计思想和一些好的编程技巧。
希望通过进阶篇的学习,能够帮助你理解消息队列的设计思想,学会从源码分析、解决问题的方法,掌握这些可复用到其他领域的底层技术。
案例篇,我会和你一起做两个微型的项目,带你体验实际的代码开发。这两个微项目会用到我们在基础篇和进阶篇中学习的知识。
第一个微项目,一起用消息队列和流计算框架来实现一个流计算任务;
第二个微项目,一起来实现一个最简单的 RPC 框架,因为开发中间件用到的很多技术都是互通的,开发消息队列的技术同样可以用于开发 RPC 框架。
希望你通过这两个微项目的实际编码,做到学以致用,同时也检验一下自己的学习效果。

写在最后

虽然说这是一门有点儿技术难度的课程,但只要你坚持学习,完整跟下来我们的课程,课后多思考,多练习(所有的知识点最终还是要落实到代码上),我相信你对消息队列的掌握情况、代码能力和架构能力都将会有一个质的飞跃。
最后,我希望你在留言区立个 Flag,写下你的学习计划或目标,我们所有人一起互相监督,互相鼓励,好的学习方法和心得也可以互相借鉴。当你完整学完所有内容之后,再来这里回顾当初的目标和计划,相信你会为自己的这段学习旅程感到骄傲。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《消息队列高手课》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(190)

  • 麻瓜编码师
    flag:学到秃顶!

    作者回复: 别,技术得学,头发也不能少啊。

    2019-07-22
    3
    40
  • cricket1981
    每种MQ都有自己的侧重点,想知道JMQ跟其他MQ的区别是什么,优缺点是什么?

    作者回复: 因为准备这个课的时候,JMQ还没有开源,所以这个课程中目前还没有JMQ的内容。后续JMQ会很快开源,我看能不能搞一个加餐,说一下JMQ的开源版本。

    2019-07-22
    21
  • QQ怪
    在学kafka专栏,想要进阶,成为高手,肯定要入的,希望学完也能写出自己的中间件,加油^0^~

    作者回复: 只要持续的学习,多想,多Coding,一切都是水到渠成的事儿。

    2019-07-22
    5
    6
  • 牛头人
    消息队列已经成为后端必须技能了
    2019-08-06
    4
    4
  • Juan
    2000个节点的集群,最难的点在哪里?最需要考虑的是什么?

    作者回复: 主要需要考虑的就是尽量的设计成去中心化,否则集群规模太大的时候,这个中心集群或者节点就会成为瓶颈。比如Kafka,它使用ZK来保存元数据,大规模集群下,这个ZK集群就会成为瓶颈。

    2019-07-23
    1
    4
  • A Eureka
    目标很简单,不想做菜鸟,想加薪升职成大神

    作者回复: 有想法,有行动,加上一点点坚持,一切都是水到渠成的事儿。

    2019-07-22
    4
  • shniu
    期待。
    flag:希望自己可以独立设计和实现一个高性能支持高并发的消息中间件。
    想问一下老师,怎么选择一个开源项目,并慢慢的能参与进去?

    作者回复: 简单的说就是多参与讨论,多贡献PR。如果说,你的技术能力很强,那直接可以参与贡献,用代码说话,如果说,技术上还没有那么强,也可以从一些文档、翻译的工作做起。

    2019-07-22
    4
  • 业余草
    从头到尾,一字不落的学完,学好!

    作者回复: 加油💪。

    2019-07-24
    1
    3
  • Mark Yao
    刚升级奶爸,时间紧张。给自己定个目标跟随课程同步结束,把每节课所学的内容,经过思考总结到留言区。

    作者回复: 我每节课都会点名哦。

    2019-07-22
    3
  • 一心向北_
    哇,终于等到了MQ专栏,立个Flag:

    1.完成跟下来整个专栏内容;
    2.对当天学到的内容进行总结思考,与老师留言讨论;
    3.将学到的内容落到代码上,实践来巩固知识。

    Go,Go,Go!
    2019-07-22
    3
  • 曹昆
    第一消息队列高并发怎么处理流程,代码是如何使用的,它的设计理念是什么?
    第二消息接受到后,处理这些消息来集合来接受,然后循环处理消息?这个项目用到过。
    第三消息接收后怎么传到前端页面

    作者回复: 前两个问题我们后续的课程中都会涉及到。
    第三个问题,可以考虑Web Push。

    2019-07-23
    2
  • 白小白
    从今天开始,每节课都会有我打卡的留言!可能有我的问题,可能也有我的理解!总之一定会坚持下去就是啦

    作者回复: 我记住你了,每节课我都点名哦。

    2019-07-22
    1
    2
  • Shen
    flag:面试别人或者被面试时,有话可说
    2019-09-09
    1
  • 周海滨
    我们后续的code用什么语言呢,php还是java或者其他?

    作者回复: 我们的课不是和某一门语言绑定的,后续在课程中出现的语言有Java、Go、Python等。

    2019-08-05
    1
  • 笨笨
    flag:
    1.每天认真听讲努力思考
    2.努力形成自己的综合设计思想理论
    3.向自己成为底层架构师的目标前进

    作者回复: 加油

    2019-08-02
    1
  • humor
    认真学完每一篇。想知道怎么才能成为像老师一样厉害的程序员🤔

    作者回复: 多读代码,多写代码,多思考。

    2019-08-01
    1
  • good葳
    用了好几年mq,底层还是不懂,一定会好好学习的

    作者回复: 加油!

    2019-07-27
    1
  • 小伟
    Flag:
    在自己转型arch的路上迈出坚实的一步

    另,如何寻找合适的开源项目并参与?

    作者回复: 从你熟悉的开源项目开始会比较好。

    2019-07-24
    1
  • sun留白
    理解mq,有个理论基础,有能力自己拓展。

    作者回复: 加油!

    2019-07-24
    1
  • Hurt
    打卡1

    作者回复: 加油!

    2019-07-24
    1
收起评论
99+
62
返回
顶部