消息队列高手课
李玥
京东零售技术架构部资深架构师
立即订阅
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讲)
结束语 | 程序员如何构建知识体系?
消息队列高手课
登录|注册

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

李玥 2019-08-10
你好,我是李玥。对于很多开源软件来说,如果我们把它作为我们业务系统的重要组成部分之一,真正地用于生产,仅仅知道如何使用是远远不够的,你必须掌握它的实现原理和很多细节,这样才能找到最佳的使用姿势,当你的系统出现问题时,你才有可能基于它的实现原理,再根据一些现象来排查问题原因。
掌握这些开源软件的最佳方式就是去学习它的源代码。很多同学跟我说:“我也很想去看一些开源软件的代码,也尝试去看过,但是面对上千个源码文件,几十万行代码,完全不知道从哪儿入手啊。”
这节课我们就针对这个情况来聊一聊,学习开源软件的代码该如何入手。
有一点我提前说明一下,对于这节课里面涉及到的一些名词,我会直接使用英文,主要目的是方便你直接对应到那些开源软件英文官网上的标题。

通过文档来了解开源项目

学习源代码应该从哪儿入手呢?最佳的方式就是先看它的文档。
通过看文档,你可以快速地掌握这个软件整体的结构,它有哪些功能特性,它涉及到的关键技术、实现原理和它的生态系统等等。在掌握了这些之后,你对它有个整体的了解,然后再去看它的源代码,就不会再有那种盲人摸象找不到头绪的感觉了。
首先强调一点是,你必须去看这些开源软件官方网站上的文档,尽量不要去网上搜一些翻译的中文文档。为什么呢?
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《消息队列高手课》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(39)

  • 芥末小龙
    玥哥,以前带我的时候咋不提呢,如果知道早知道这样看源码,知道的原理多一些,我估计阿里P7就能过了。

    作者回复: 你没问呀

    2019-08-12
    8
    31
  • 知非
    这篇文章,解决我很大的疑惑啊!自己看代码就是先找main,真尴尬。。
    2019-08-10
    6
  • linqw
    学习完这篇写下自己的理解,老师有空帮忙看下哦
    1、在还没阅读开源项目代码之前,会先把Java的一些常用的源代码先看完,感觉所有的源代码都是这些基础的砖块叠加上去的,最近也在撸rocketmq源码,也是先把用到的一些其他框架先熟悉如netty、logger,然后看其官方文档,对整体的框架和基本的概念有比较感性的认知,再者写一些demo。然后先把rocketmq中的公共的模块的源代码先看,比如logger、loggappend、namesrv,如namesrv内部维护broker、cluster、topic、queue的路由信息,producer再发送消息前,需先将namesrv其broker的路由信息缓存到本地,为此需和namesrv维护长连接,定时的从namesrv获取新的路由信息,broker端需和namesrv为此常连接,broker定时的发送配置信息到namesrv,namesrv需开启定时任务将其超过时间没有收到心跳包的broker连接关闭。为了namesrv中的配置参数可以更改,可以从System中的properties中获取,也为了这些配置持久化也会在接收到配置参数时保存到文件中,namesrv需维护配置参数的设置获取,如发送消息前选择topic等,为了区分不同的命令,维护RequestProcessor,对接收到不同的RemotingCommand做不同的处理序列化和反序列化,参数检验等。很多开源框架都会做一个admin,便以实时的更改配置参数,实时的监控项目中的配置参数。
    2、打算先把并发包先分析完,然后开始分析下rocketmq,这个是自己分析的一些知识点https://juejin.im/user/5bd8718051882528382d8728/posts

    作者回复: 👍👍👍

    2019-08-10
    6
  • 陈珙
    老师在后续课程是否可以再开放一些”程序员史诗般必读文章”给我们学习下
    2019-08-12
    5
  • 纯齐
    请教下,有什么好办法找出开源项目的“灵魂”?

    作者回复: 建议去从文档中找。

    如果这个项目是基于某个Paper的,一般文档中的显著位置都会标注。

    2019-08-12
    4
  • 陈华应
    读源码的习惯是喜欢按照一条主线来看,经常会被一些细节绕晕。多谢老师指路。
    后续就按照:灵魂->官方文档->问题&答案找答案->核心类结构图+流程图->原理细节文字步骤说明->点成线->线成网->实际应用(可遇不可求)->官方文档->灵魂
    多写总结,多思考知识点之间多关联,多动手,一切都是水到渠成的事儿~~~

    作者回复: 👍👍👍

    2019-08-11
    3
  • innocent
    您好,请问一下作为一个对Scala不是非常熟悉的Java程序员如何阅读Kafka的源码。

    作者回复: 花点儿时间学一下基础语法,特别是lambda,至少读懂源码就没什么问题了。

    2019-08-10
    1
    2
  • xfan
    我照着例子试了一下,有一个问题
    为什么kafka的不同的topic 的Leader可以不一样,这个Leader等同于分布式系统中的master节点吗

    作者回复: 你可以理解master和leader的含义是一样的。

    对于“为什么kafka的不同的topic 的Leader可以不一样”这个问题,我在《22 | Kafka和RocketMQ的消息复制实现的差异点在哪?》这节课中有专门讲到,你可以参考一下。

    2019-10-30
    1
  • Switch
    分析的RocketMQ Producer的发送流程。
    https://blog.csdn.net/q547550831/article/details/102483994
    2019-10-13
    1
  • godtrue
    这节直指痛点,之前阅读源码就是这样半途而废的。
    再启程,参考老师的建议
    1:先整体,再局部
    2:先英文,再中文
    3:先灵魂,再原理
    4:先文档,再源码
    5:阅读前先思考,带上问题和答案去验证,阅读完了,记得总结——流程图、时序图、文字描述
    6:我觉得还需要加上些基础,比如:数据结构、操作系统原理、计算机网络原理、设计模式等
    7:最重要的在于坚持,遇到困难还能继续前进
    2019-08-21
    1
  • 秦跃
    请问您提的问题对的入口如何快速定位?有时在main
    2019-08-19
    1
  • paradox
    带着问题看源码类似于监督学习,不带问题看源码类似于非监督学习,两者各有场景。碰到问题查源码是前者,没碰到问题想总结用后者。
    2019-08-10
    1
  • 吧唧吧唧
    读mybatis源码先找"main"的sqlsessionfactory,读spring先找“main”classpathxmlapplicationcontext,是说别人两周读完mybatis,我花了几个月,并且效率低下。
    2019-11-16
  • 飞翔
    最简单的开源框架源码感觉非mybatis莫属,主体流程很简单,跟着debug一步步看就好了^_^
    2019-11-03
  • 饭粒
    入门文档上手,简单使用,溯源"灵魂”,带着问题和文档答案,印证的去看源码。
    2019-11-02
  • 静水流深
    葵花宝典到手!
    2019-10-30
  • 鸠摩智
    最近在研究spring框架源码,看了这篇文章受益匪浅
    2019-08-29
  • 浅滩
    这个操作很溜
    2019-08-29
  • 树洞
    很有启发,感谢
    2019-08-19
  • Panda
    像破案一样 跟源码 读源码
    2019-08-16
收起评论
39
返回
顶部