阿里资深架构师推荐:技术人改如何提升源码阅读能力

本文主要是介绍阿里资深架构师推荐:技术人改如何提升源码阅读能力,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文行文思路:先抛出源码阅读方法,然后结合Sentinel创作过程谈谈具体是如何运用这些技巧,最后解答几个源码阅读的误区。

Sentinel 系列共包含15篇文章,主要以源码分析为手段,图文并茂的方式对 Sentinel 的架构设计理念、核心实现要点进行了一一剖析,并加以实战分析与思考。

很多朋友都在咨询我是如何阅读源码的。对此可归纳为如下几个要点,然后结合 Sentienl 源码分析专栏对各个要点进行拆解,对源码阅读方法进行一次“实战”。

  • 阅读官方文档,从全局了解待学习框架能解决什么样的问题,整体架构设计与思想是什么,主要包含哪些要点。

  • 从官方提供的 Demo 程序开始,学习基本的使用方法,进一步加深其理解,并伺机寻找入口(突破口)。

  • 寻找突破口,逐一突破,先主干再旁支,适度分解,各个击破。

接下来将展示我是如何使用这套方法论来学习 Sentinel 的。

在准备深入学习 Sentinel 之前,首先认真看了一遍 Sentinel 的官方文档,从而形成了对 Sentinel 的基本认识,我们可以从官方文档了解到 Sentinel 主要涉及的核心内容,正如下图所示:

 

这些内容可以简单的当成一个学习的提纲,可以从里面挑选自己感兴趣的进行重点学习。

 

在看完官方文档后,我就踏上创作 Sentinel 系列的征途。

本文不会再详细介绍每一个知识点的细节,有关各个知识点的具体讲解,大家可以点击感兴趣的链接中进行深入研究,本文主要是点到为止,重在介绍笔者是如何学习源码的。

1、Alibaba Sentinel 限流与熔断初探
该文章主要从如下几个点进行展开:

  • Sentinel 是什么 ?主要能解决什么问题?

  • 限流与熔断的使用场景

  • Sentinel 源码结构

  • 在 IntelliJ IDEA 中运行 Sentine Demo

其实第三点并不是特别必须,不过要得出这些结论也并不难,因为对 Sentinel 有了全局的认识后并根据各个模块的命名很容易能得出该模块的作用。这里第四点非常关键,通常一个优秀的开源框架都会提供完备的演示 Demo,大家可以看到 Sentinel 的演示 demo 非常丰富,在本文中我特意选择了 Dubbo 来做示例,主要是我们公司大量使用 dubbo 来实现公司的微服务,这样会更加贴近实战,更有利于寻找突破口。

通过跑通 Demo 的主要目的有三个:

  • 通过运行 Demo,了解框架的基本使用方法。

  • 搭建一个可 Debug 的环境,为后续看不懂代码的情况下进行调试,根据运行时数据,可加快代码的理解速度,但千万不要一开始就 debug。

  • 寻找源码阅读的入口。

2、源码分析 Sentinel 之 Dubbo 适配原理
紧跟第一篇文章,既然使用的是 Dubbo 作为其示例代码,自然而然的思考 Sentinel 是如何做到对 Dubbo 的适配并对业务无侵入性。

通过该篇文章的学习我们了解到可以通过 Dubbo 的扩展机制实现对 Dubbo 的适配,在 Dubbo Filter 中我们能看到了与 Sentinel 相关的核心 API SphU.entry,从而找到深入学习 Sentinel 的核心入口,也就是后续文章会通过对该方法的研究,从而打开进入 Sentinel 内核世界的大门。

备注:在阅读这篇文章的时候,我觉得 Dubbo 的适配感觉非常简单,但随着我对这个系列的深入学习,发现了该方法没有那么简单,当时很多点都没有理解到位,这个在后续会有重点阐述,这也是不断学习、不断思考带来的好处。

3、寻找一把进入 Alibaba Sentinel 的钥匙
本文主要是详细跟踪 SphU.entry 方法的执行流程,从而揭晓其实现的关键点,果不其然,通过跟踪该方法的流程,找到了 Sentinel 的核心运作机制:Slot 处理链。

 

就问大家激不激动,开不开心,从这些 Slot 的名字基本就能得出其含义,后续的研究重点就是逐一解开这些 Slot 的实现原理即可。

4、Sentinel 调用上下文环境实现原理
按照上述 Slot 的链,开始了 NodeSelectorSlot 的研究,通过学习了解到该 NodeSelectorSlot 主要是构建 Sentinel 的调用链,即调用上下文环境管理,准确的说是构建调用链的入口节点。在 Sentinel 中每进入一个资源都会有对应的节点实时存储该资源的调用信息。

5、Sentinel 实时数据采集原理
这个议题共两篇文章,其相关链接如下:

  • 实时采集数据详解

  • Sentinel 滑动窗口实现原理

如果按照 Slot 链的执行顺序,下一个执行的 ClusterBuilderSlot,从名字就可以看出与集群限流相关的,但秉承着先简后难的学习策略,在当前先跳过该类的学习,先重点突破单机版限流,后续再回过头来学习集群限流相关的知识。

要实现限流、熔断等功能,首先要解决的问题是如何实时采集服务(资源)调用信息。例如将某一个接口设置的限流阔值 1W/tps,那首先如何判断当前的 TPS 是多少?Alibaba Sentinel 采用滑动窗口来实现实时数据的统计,实现类:StatisticSlot。

6、Sentinel 限流实现原理
在弄懂了 Sentinel 的实时数据采集原理后,限流实现就非常简单了,就是基于采集的调用信息,然后与限流规则进行比较,判断是否需要限流,Sentinel 在触发限流后还提供了多种处理策略,例如快速失败、匀速排队、预热等机制。

但我在学习限流的时候,我将限流核心逻辑与触发限流后的处理策略进行了分解,在学习限流的时候挑选了最简单处理策略(匀速排队),将比较难的预热机制分解,再单起一篇文章进行学习,这样的拆解有利于保证学习单篇文章的用时,并提高自己的“产量”,提高自己的成就感。

这块主要包含如下4篇文章:

  • Sentinel FlowSlot 限流实现原理

  • RateLimiter SmoothBursty 实现原理

  • RateLimiter SmoothWarmingUp 实现原理

  • Sentinel 匀速排队与预热实现原理与实战建议

这里还要重点阐述一下限流领域最核心的算法:漏桶算法、漏斗算法等,并且 Sentinel 的预热机制主要是参考 Guava 的实现,故这里花了点精力认真学习了 Guava 的 RateLimite 的实现原理。

7、Sentinel DegradeSlot 熔断实现原理
限流部分学习完后,我就迫不及待的去探究熔断的实现,其实熔断本身并不复杂,和限流一样,无非就是根据当前的实时调用信息与熔断规则进行对比即可,如果满足熔断规则就抛出异常。如果只是熔断自身的实现本质确实简单,但要结合实际,其实有更多的问题需要思考,这个在后面的实战篇又是反复思考,从而发现 Sentinel 在熔断的实现上其实比较粗糙。

8、Sentienl 动态数据源架构设计理念与改造实践
经过前面的文章,Sentinel 的单机限流与熔断已经基本学习了,这个时候就要开始思考如何使用 Sentinel 了,但 Sentinel 官方提供的后台运维管理系统的熔断、限流规则只能存储在内存,显然不能直接用于生产环境,故需要提出解决方案,本篇文章详细介绍了笔者是如何根据官方资料进行动态数据源配置的方法调研的,完成是按照工作中架构设计方案的标准来思考的,强烈推荐。

9、Sentinel Dubbo 适配器看限流与熔断(实战思考篇)
支持了动态数据源,就继续进行思考,在微服务领域是如何思考引入熔断机制的,进行一番思考后发现官方提供的 Dubbo 适配器的粒度是服务级别的,无法控制机器级别,例如下图所示:

例如当前的 Sentinel Dubbo 适配器目前不支持一个服务其中一台服务提供者变慢,发往这台机器上的请求被熔断,当前的实现版本会调用该服务的所有请求都会被熔断,故官方的 Dubbo 适配器还需要更加完善,有了自己的思考才会对知识理解更多,故通过学习源码,一定不能“尽信书”,要有自己的思考与怀疑能力,这样才能对开源社区做出一定的贡献,共同进步与成长。

以上就是我学习源码的方法,希望对大家真正有所帮助与感触。

最后我再来谈一下回答关于源码阅读方面误区的几个问题。

1、看源码会忘记吗?为什么我们看源码的时候感觉看懂了,但很容易就忘记?

我们要始终明白看源码只是手段,目的是要思考框架的设计原理、并通过源码了解实现细节并指导实践。重在思考。当然实现细节看过后容易忘记,但只要理解了思想,在需要使用时可以看自己写过的文章,一下子就能拾起来。

2、看源码的时候是不是可以直接使用 Debug 进行调试学习

我是强烈不建议这样做,这样会迷失在细节中无可自拔。正确的姿势是寻找入口,带上自己的思考去梳理,当遇到看不懂源码或是无法理解其思想时,这个时候可以借助 Debug,可以通过运行时可视化的数据,帮助我们更快的了解。

这篇关于阿里资深架构师推荐:技术人改如何提升源码阅读能力的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1094749

相关文章

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

金融业开源技术 术语

金融业开源技术  术语 1  范围 本文件界定了金融业开源技术的常用术语。 本文件适用于金融业中涉及开源技术的相关标准及规范性文件制定和信息沟通等活动。

防近视护眼台灯什么牌子好?五款防近视效果好的护眼台灯推荐

在家里,灯具是属于离不开的家具,每个大大小小的地方都需要的照亮,所以一盏好灯是必不可少的,每个发挥着作用。而护眼台灯就起了一个保护眼睛,预防近视的作用。可以保护我们在学习,阅读的时候提供一个合适的光线环境,保护我们的眼睛。防近视护眼台灯什么牌子好?那我们怎么选择一个优秀的护眼台灯也是很重要,才能起到最大的护眼效果。下面五款防近视效果好的护眼台灯推荐: 一:六个推荐防近视效果好的护眼台灯的

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识