我是如何在短期内快速掌握Dubbo的原理和源码的(纯干货)?
写在前面
上周,在【Dubbo系列专题】中更新了两篇文章《冰河开始对Dubbo下手了!》和《俯瞰Dubbo全局,阅读源码前必须掌握这些!!》,收到了很多小伙伴的微信私聊消息,大部分都是在询问如何快速的掌握Dubbo的原理和源码。针对这个问题,我也在思考如何以更简单、易懂的方式让小伙伴们更好的掌握Dubbo的原理和源码。今天,我就为小伙伴们分享下我是如何快速掌握Dubbo的原理和源码的。
文章已收录到:
https://github.com/sunshinelyz/technology-binghe
https://gitee.com/binghe001/technology-binghe
阅读源码的前提
阅读某一项技术框架,或者说开源项目的源码前,你必须了解这个框架是干啥用的,说白了,就是你至少了解这个框架该怎么用,在什么场景下用,使用的过程中会遇到哪些坑,如何解决。而学习一个框架,最简单有效的方式就是它的官方文档。Dubbo也不例外,我在学习Dubbo的时候,也是首先看的Dubbo的官方文档,基本没看其他的文章或者资料。为啥?因为Dubbo的官方文档是最权威的,是最可信的。
即使你在项目中没有使用过Dubbo框架,你也可以按照Dubbo的官方文档基于Dubbo写一个简单的示例程序,通过示例能够让自己快速的了解Dubbo。
为何要阅读源码
阅读源码前,你要清楚的知道自己为何要阅读源码,带着问题去看源码。 想要看框架的源码,无外乎两种情况:一种就是在项目中遇到了无法通过文档或者其他技术资料解决的问题,想通过源码来找解决方案;另一种就是对框架的底层实现好奇,这么牛逼的技术是如何实现的? 而我,基本属于后者。在我经历的用户上亿的高并发电商系统中,部分核心子系统使用了Dubbo,经过性能调优,Dubbo的表现良好。我就很好奇:Dubbo是如何抗住这么高的并发的?它内部是如何实现的?
其次,阅读源码前,你要为自己提几个问题,比如我在看Dubbo源码前,就明确了很多问题,比如:Dubbo是如何实现RPC服务的?服务提供者和调用者之间是如何交互的?Dubbo是如何封装网络调用使其看起来和调用本地方法一样?Dubbo又是如何实现服务治理的?等等一系列的问题,我记得我当时看源码前,足足给自己提了上百个问题。带着问题看源码,能够让你事半功倍,不仅仅是Dubbo,对于其他的框架,也是如此。
还有就是,不要为了看源码而看源码,很多小伙伴看了不少框架的源码,可没过多久就忘记了,跟没看一样,还浪费了很多时间。这种就是典型的为了看源码而看源码,并没有去深究这个框架的实现原理和细节,遇到看不懂的,可以先跳过,记录下,等把相关联的代码看懂后,再反过头来重新梳理没有看懂的源码。
框架使用了哪些技术
阅读源码前,还有一项重要的工作就是,要了解框架中使用了哪些技术。对所用的技术要有个大体的了解。比如:在Dubbo中使用了SPI、时间轮定时任务、服务注册与发现、Netty、序列化、自定义协议等等技术。所以,在阅读源码前,先要对这些技术有个大体的了解。
比如,在看Dubbo源码前,我就已经了解到Dubbo的网路交互底层使用的Netty,正好在我工作不久的时候,我又深入研究过Netty的源码,这就有助于我在看Dubbo源码时,能够更好的理解Dubbo的网络编程部分。
所以说,台上一分钟,台下十年功,在看Dubbo源码前,我也是做了充分的准备。
阅读源码时注意什么
任何一项技术框架,或者说开源项目,肯定是为了解决某些场景而生的,就比如Dubbo,相信小伙伴们都知道,Dubbo作为一个分布式服务治理框架,一个典型的使用场景就是分布式系统。
其次,一个优秀的技术框架或开源项目背后肯定蕴含着众多其他技术的原理与实现。我们同样是以Dubbo为例,在Dubbo中,为了实现在分布式场景下,调用远程RPC服务就像调用本地服务一样,其至少需要实现如下功能:
- 服务之间功性能的通信。
- 服务调用需要做到负载均衡、高可用、限流。
- 服务治理。
- 高可靠、容错。
- 服务能够自动注册和发现。
而实现这些功能时,Dubbo借助了哪些优秀的开源框架?这些开源框架Dubbo是如何集成起来的?是硬编码方式集成?还是其他更好的方式?这些都是需要我们在阅读源码的时候,去源码中找到答案。
阅读源码的方式
我把阅读源码的方式总结为:先整体再局部,先宏观再微观,先粗略再细节。
什么意思呢?就是在看源码的是时候,先从整体上把握源码的设计原理和设计理念,先整体上大概了解源码是如何实现的。比如在Dubbo中,网络编程是基于Netty实现的,你就可以先做个了解,知道这么回事。从整体上把握基本的框架源码后,再从细节中死磕具体的实现,比如,在Dubbo中是如何使用Netty实现网络交互的?
记住,阅读源码时切忌在还没有搞懂整体的设计原理和整体源码设计前,就开始死扣源码的细节。否则,你会在源码里面迷失自己。
如何验证自己掌握了源码?
阅读源码光看源码还不行,还要自己去动手实践,正所谓“实践是掌握整理的唯一标准”。你不实践,怎么知道自己是不是掌握了。
我把实践部分分为两个组成部分:在看源码的过程中动手实践;在看源码后动手实践。
在看源码的过程中动手实践就是说:在看源码的过程中,将自己不明白的地方记录下来,查阅官网文档或者其他资料,如果是由于自己的技术能力有欠缺,看不懂的,就要及时为自己充电来补充相关的知识点了。如果是遇到自己认为比较好的实现方式时,可以在框架的代码上以注释的方式标记自己的理解。比如,我在看Dubbo源码的时候,就标注了大量的注释。
在看源码后,一定要动手实操。看过Dubbo的整体源码后,如果你认为自己掌握了Dubbo,就不妨自己动手实现一个RPC框架,看看自己实现的框架与Dubbo框架有哪些区别,为啥Dubbo框架是这样实现的。再反过头来带着问题看Dubbo的源码,你肯定会理解的更加深入。而我,在看完Dubbo框架的源码后,也是这样做的。
阅读源码的总结
最后,跟小伙伴们透露下:我从开始看Dubbo源码,到掌握Dubbo的原理和源码,前前后后只用了不到两个月。记住,阅读源码前,一定要明确为何读源码,带着问题读源码,对于源码中所涉及的其他技术或框架,一定要有所了解。阅读源码的过程中,要遵循:先整体再局部,先宏观再微观,先粗略再细节的原则。最重要的一点是:在阅读源码的过程中和阅读源码后都要动手实践。
好了,今天就到这儿吧,我是冰河,大家有啥问题可以在下方留言,也可以加我微信,一起交流技术,一起进阶,一起牛逼~~
我是如何在短期内快速掌握Dubbo的原理和源码的(纯干货)?的更多相关文章
- Dubbo原理和源码解析之服务暴露
github新增仓库 "dubbo-read"(点此查看),集合所有<Dubbo原理和源码解析>系列文章,后续将继续补充该系列,同时将针对Dubbo所做的功能扩展也进行 ...
- Dubbo原理和源码解析之服务引用
一.框架设计 在官方<Dubbo 开发指南>框架设计部分,给出了引用服务时序图: 另外,在官方<Dubbo 用户指南>集群容错部分,给出了服务引用的各功能组件关系图: 本文将根 ...
- Dubbo原理和源码解析之标签解析
一.Dubbo 配置方式 Dubbo 支持多种配置方式: XML 配置:基于 Spring 的 Schema 和 XML 扩展机制实现 属性配置:加载 classpath 根目录下的 dubbo.pr ...
- Dubbo原理和源码解析之“微内核+插件”机制
github新增仓库 "dubbo-read"(点此查看),集合所有<Dubbo原理和源码解析>系列文章,后续将继续补充该系列,同时将针对Dubbo所做的功能扩展也进行 ...
- 【开源】开发者新闻聚合APP 1.0.3发布(第一个稳定版本,短期内不再发布新版本)
聚合了博客园新闻.infoq新闻.36kr新闻.oschina新闻.51cto新闻.csdn新闻: 争取做到随时刷随时有开发者的新闻! 目前还只支持安卓APP 最新版本的下载地址:https://gi ...
- (转)10 分钟内快速构建能够承载海量数据的 nginx 日志分析与报警平台
10 分钟内快速构建能够承载海量数据的 nginx 日志分析与报警平台 原文:https://blog.qiniu.com/archives/8713
- 使用 Sealos 在 3 分钟内快速部署一个生产级别的 Kubernetes 高可用集群
本文首发于:微信公众号「运维之美」,公众号 ID:Hi-Linux. 「运维之美」是一个有情怀.有态度,专注于 Linux 运维相关技术文章分享的公众号.公众号致力于为广大运维工作者分享各类技术文章和 ...
- Deno会在短期内取代Node吗?
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文出处:https://blog.bitsrc.io/what-is-deno-and-will-it-r ...
- # 8 快速入门 dubbo
8 快速入门 dubbo 所需资料 注册中心 Zookeeper 安装 zookeeper 官方推荐使用 zookeeper 注册中心: 注册中心负责服务地址的注册与查找,相当于目录服务: 服务提供者 ...
随机推荐
- 使用T4模板动态生成NPoco实体类
这是一个妥妥的NPoco类,这是我们在工作开发中,手动去写这个实体类,属实非常心累,字段少无所谓一次两次,数量多了,字段多了,就心态裂开
- 利用神经网络算法的C#手写数字识别(一)
利用神经网络算法的C#手写数字识别 转发来自云加社区,用于学习机器学习与神经网络 欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 下载Demo - 2.77 MB (原始地址):handwri ...
- Mysql LIMIT的用法
使用范围 MySQL语句中的limit字句可以帮助我们在使用执行查询的时候,返回数据库中间的数据或者是只提取前几段数据 使用语法 SELECT * FROM table LIMIT [offset,] ...
- 前端使用canvas生成盲水印的加密解密
为了保障信息安全,防止重大信息泄露,并且能够锁定泄露用户,需要对页面展示的图片加入当前用户信息的盲水印,即最终图片外观看起来和原图一样,但是经过解码以后可以识别出水印信息,并且在截图后仍能进行较好的识 ...
- 学Python编程能做什么工作?从事什么岗位?——这些问题你知道吗?
前言 学Python编程能做什么工作?随着人工智能发展,学习python语言的人员有更多的岗位机会,python从事的职业广泛,从游戏到AI人工智能能都可以用Python实现.除了编程,各种岗位的人都 ...
- 【原创】Linux PCI驱动框架分析(一)
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...
- python装饰器学习详解-函数部分
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 最近阅读<流畅的python>看见其用函数写装饰器部分写的很好,想写一些自己的读书笔记. ...
- 一种简单的吉布斯采样modify中应用
这是主函数clc; clear all; close all; %% 生成初始序列 sequenceOfLength = 20; sequenceOfPop = 4; sequence = produ ...
- Python自动化办公第三方库xlwt
Python向excel表格写入内容,首先安装第三方库: pip3 install xlwt 代码实例(结合xlrd): #!usr/bin/env python3 #!-*-coding=utf-8 ...
- 基于nginx负载均衡及frp的内网穿透实例3-多用户多网站共用80端口
原文地址:点击跳转 最近frp用户量有点多,而且很多用户都是想把部署于本地或者内网的web服务暴露至公网,之前提到过,暴露到公网之后如果一般都需要用域名:端口的方法来访问,但是没有人会喜欢用这种方式访 ...