消息队列高手课 / 从源码角度全面解析MQ的设计与实现
李玥
京东零售技术架构部资深架构师
  • 课程目录
  • 课程介绍
  • 开篇词 | 优秀的程序员,你的技术栈中不能只有“增删改查”

    消息队列作为使用最广泛、生命力最旺盛的中间件,无论技术如何发展,都离不开分布式系统的最基本需求:通信。

  • 预习 | 怎样更好地学习这门课?

    希望你能从理论到实践,从基础到进阶,从深度到广度,全方位吃透消息队列,进阶为消息队列“小达人”。

  • 01 | 为什么需要消息队列?

    我们在单体应用里面需要用队列解决的问题,在分布式系统中大多都可以用消息队列来解决。

  • 02 | 该如何选择消息队列?

    虽然说热门的消息队列产品在功能和特性方面各有优劣,但我们在选择的时候,要有一个最低标准,保证入选的产品至少是及格的。

  • 03 | 消息模型:主题和队列有什么区别?

    学习消息队列中队列、主题、分区等基础概念,就像我们学习一门编程语言中的基础语法一样,你只有搞清楚它们,才能进行后续学习。

  • 04 | 如何利用事务消息实现分布式事务?

    消息队列中的“事务”,主要解决的是消息生产者和消息消费者的数据一致性问题。

  • 05 | 如何确保消息不会丢失?

    用消息队列最尴尬的情况不是丢消息,而是消息丢了还不知道。

  • 06 | 如何处理消费过程中的重复消息?

    实现幂等的方法,不仅可以用于解决重复消息的问题,也同样适用于,在其他场景中来解决重复请求或者重复调用的问题。

  • 07 | 消息积压了该如何处理?

    优化消息收发性能,预防消息积压的方法有两种,增加批量或者是增加并发。

  • 08 | 答疑解惑(一) : 网关如何接收服务端的秒杀结果?

    我们可以选择用RPC的方式来返回秒杀结果,这里网关节点是RPC服务端,后端服务为客户端。

  • 09 | 学习开源代码该如何入手?

    带着问题去读源码,最好是带着问题的答案去读源码。

  • 10 | 如何使用异步设计提升系统性能?

    我们要执行一项比较耗时的操作时,不去等待操作结束,而是给这个操作一个命令:“当操作完成后,接下来去执行什么。”

  • 11 | 如何实现高性能的异步网络传输?

    NIO提供了Selector机制,用单个线程同时管理多个连接,解决了多路复用这个异步网络通信的核心问题。

  • 12 | 序列化与反序列化:如何通过网络传输结构化的数据?

    进程之间要通过网络传输结构化的数据,需要通过序列化和反序列化来实现结构化数据和二进制数据的双向转换。

  • 13 | 传输协议:应用程序之间对话的语言

    使用ID来标识请求与响应对应关系,是一种比较通用的实现双工通信的方法,可以有效提升数据传输的吞吐量。

  • 14 | 内存管理:如何避免内存溢出和频繁的垃圾回收?

    在高并发的场景下,会产生大量待回收的对象,需要频繁地执行垃圾回收,导致程序长时间暂停,我们的程序看起来就像卡死了一样。

  • 加餐 | JMQ的Broker是如何异步处理消息的?

    你需要对基础技术都有深入的理解,并合理地使用,才能在确保逻辑正确、数据准确的前提下,做到极致的性能。

  • 15 | Kafka如何实现高性能IO?

    要真正实现一个高性能的消息队列,是非常不容易的,你需要熟练掌握非常多的编程语言和操作系统的底层技术。

  • 16 | 缓存策略:如何使用缓存来减少磁盘IO?

    对于缓存的置换策略,最优的策略一定是你根据业务来设计的定制化的置换策略,当然你也可以考虑LRU这样通用的缓存置换算法。

  • 17 | 如何正确使用锁保护共享数据,协调异步线程?

    如果能不用锁,就不用锁;如果你不确定是不是应该用锁,那也不要用锁。

  • 18 | 如何用硬件同步原语(CAS)替代锁?

    在特定的场景中,CAS原语可以替代锁,在保证安全性的同时,提供比锁更好的性能。

  • 19 | 数据压缩:时间换空间的游戏

    压缩它的本质是资源的置换,是一个时间换空间,或者说是CPU资源换存储资源的游戏。

  • 20 | RocketMQ Producer源码分析:消息生产的实现过程

    RocketMQ的Producer整个发消息的流程,无论是同步发送还是异步发送,都统一到了同一个流程中。

  • 21 | Kafka Consumer源码分析:消息消费的实现过程

    不需要维护用于异步发送的和处理响应的线程,并且能充分发挥批量处理的优势,这也是Kafka的性能非常好的原因之一。

  • 22 | Kafka和RocketMQ的消息复制实现的差异点在哪?

    RocketMQ提供新、老两种复制方式:传统的主从模式和新的基于Dledger的复制方式。

  • 23 | RocketMQ客户端如何在集群中找到正确的节点?

    NameServer在集群中起到的一个核心作用就是,为客户端提供路由信息,帮助客户端找到对应的Broker。

  • 24 | Kafka的协调服务ZooKeeper:实现分布式系统的“瑞士军刀”

    Kafka主要使用ZooKeeper来保存元数据、监控Broker和分区的存活状态,并利用ZooKeeper来进行选举。

  • 25 | RocketMQ与Kafka中如何实现事务?

    RocketMQ和Kafka的事务,它们的适用场景是不一样的。

  • 26 | MQTT协议:如何支持海量的在线IoT设备?

    对于海量客户端的场景,服务端必须使用集群来支撑,可以选择收费的云服务和企业版产品。也可以选择自行来构建MQTT集群。

  • 27 | Pulsar的存储计算分离设计:全新的消息队列设计思路

    Pulsar和其他消息队列最大的区别是,它采用了存储计算分离的设计。

  • 28 | 答疑解惑(二):我的100元哪儿去了?

    对于一个“带计算功能的消息队列”来说,采用存储计算分离的设计,计算节点负责流计算,存储节点负责存储消息,设计就非常和谐。

  • 29 | 流计算与消息(一):通过Flink理解流计算的原理

    流计算框架本身并没有什么神奇的技术,之所以能够做到非常好的性能,主要有两个原因。

  • 30 | 流计算与消息(二):在流计算中使用Kafka链接计算任务

    Kafka和Flink都提供了保证Exactly Once的特性,配合使用可以实现端到端的Exactly Once语义。

  • 31 | 动手实现一个简单的RPC框架(一):原理和程序的结构

    在RPC框架中,最关键的就是理解“桩”的实现原理。

  • 32 | 动手实现一个简单的RPC框架(二):通信与序列化

    在实现异步网络传输的时候,一定要配套实现一个背压的机制,避免客户端请求速度过快,导致大量的请求失败。

  • 33 | 动手实现一个简单的RPC框架(三):客户端

    客户端实现的难点就是,如何来动态地生成桩。

  • 34 | 动手实现一个简单的RPC框架(四):服务端

    良好的分层设计,目的也是让系统各部分更加的“松耦合,高内聚”。

  • 35 | 答疑解惑(三):主流消息队列都是如何存储消息的?

    很多大厂在面试的时候,特别喜欢问各种二叉树、红黑树和哈希表这些你感觉平时都用不到的知识,原因是什么?

  • 期中测试丨10个消息队列热点问题自测

    对于消息队列,你的学习效果如何?掌握了多少消息队列使用和实现的知识呢?

  • 期末测试 | 消息队列100分试卷等你来挑战!

    在期末测试题中,共有5道单选题,5道多选题,满分100分。

  • 结束语 | 程序员如何构建知识体系?

    焦虑,其实是对某些不好的事情过度担心而产生的一种烦躁情绪。

  • 第二季回归丨这次我们一起实战后端存储

    凡是那些特别难解决的、让你付出巨大代价的技术问题,几乎都可以归为存储系统的问题。

你将获得

  • 熟练掌握消息队列的实践应用;
  • 深入理解消息队列底层设计思想;
  • 从源码入手分析解决问题的方法;
  • 消息队列的应用实战。

讲师介绍

李玥,京东零售技术架构部资深架构师,负责主导设计新一代京东消息队列产品:JMQ。李玥从事互联网研发、架构十余年,在流数据的一致性分发和可靠存储,分布式实时计算、高可用分布式系统架构等技术领域有丰厚经验。

课程介绍

消息队列中间件的使用并不复杂,但如果你对消息队列不熟悉,很难构建出健壮、稳定并且高性能的企业级系统,你会面临很多实际问题:

  • 如何选择最适合系统的消息队列产品?
  • 如何保证消息不重复、不丢失?
  • 如何做到水平扩展?

如果你掌握了消息队列的底层技术,无论使用哪种消息队列产品,你都可以从原理层面来分析问题,再简单看一下它的API和相关配置项,就能很快知道该如何配置消息队列,写出高性能并且可靠的程序。

在这个课程中,李玥将从源码的角度带你了解消息队列,让你具备从源码角度分析和解决实际业务问题的能力,并且借由消息队列的底层技术,带你了解其优秀的设计思想,理解各种“轮子”的实现原理,提升你的编程能力。

此外,消息队列本身功能简洁、结构清晰,入门简单且有足够的深度,作为使用最广泛的中间件,涉及的底层技术非常全面,非常适合用来深入分析和学习分布式系统等一些复杂的相关技术,让你一通百通。

模块介绍

本课程有3大模块。

基础篇,以讲解消息队列的使用方法和最佳实践为主,包括消息队列基础知识、技术选型、高级功能等,给出消息队列应用过程中常见问题的解决策略。

进阶篇,深入到源码中去,探讨消息队列的实现原理,拓展知识深度。在这个模块的前半部分,每篇对异步模型、高性能的底层网络通信等知识点进行探讨,这些知识点不仅是中间件开发人员必须掌握的,而且是各大厂面试题中的常考内容。后半部分每篇会选择一个开源的消息队列,针对一个功能特性,讲解它的实现原理,以及源代码中优秀的设计思想和好的编程技巧。

案例篇,应用前两个模块学到的知识,一起做两个微型项目,体验实际的代码开发。第一个微项目,用消息队列和流计算框架来实现一个流计算任务;第二个微项目,实现一个最简单的RPC框架,因为开发中间件用到的很多技术都是互通的,开发消息队列的技术同样可以用于开发RPC框架。

课程目录

特别放送

订阅须知