最新结合 Sentinel 专栏谈谈我的源码阅读技巧,快来收藏

读者福利

由于篇幅过长,就不展示所有面试题了,感兴趣的小伙伴

35K成功入职:蚂蚁金服面试Java后端经历!「含面试题+答案」

35K成功入职:蚂蚁金服面试Java后端经历!「含面试题+答案」

35K成功入职:蚂蚁金服面试Java后端经历!「含面试题+答案」

更多笔记分享

35K成功入职:蚂蚁金服面试Java后端经历!「含面试题+答案」

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

本文行文思路:先抛出源码阅读方法,然后结合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 实时数据采集原理

这个议题共两篇文章,其相关链接如下:

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

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

6、Sentinel 限流实现原理

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

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

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

最后

这份文档从构建一个键值数据库的关键架构入手,不仅带你建立起全局观,还帮你迅速抓住核心主线。除此之外,还会具体讲解数据结构、线程模型、网络框架、持久化、主从同步和切片集群等,帮你搞懂底层原理。相信这对于所有层次的Redis使用者都是一份非常完美的教程了。

image

整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断!!!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

需要这份系统化的资料的朋友,可以点击这里获取

  • 30
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值