序言:为什么写这个专栏

原创 吴就业 127 0 2020-09-22

本文为博主原创文章,未经博主允许不得转载。

本文链接:https://wujiuye.com/article/dc3ee916534a43a6ad8a7685a9fb388c

作者:吴就业
链接:https://wujiuye.com/article/dc3ee916534a43a6ad8a7685a9fb388c
来源:吴就业的网络日记
本文为博主原创文章,未经博主允许不得转载。

随着微服务的流行,很多公司也在逐渐的将单体架构项目重构为微服务项目,单体架构微服务化后也将面临更多的挑战。服务的调用错综复杂,如何保护自身不被其它服务打垮也是项目微服务化后重点需要考虑的问题。

服务降级是解决突增流量打垮服务、服务雪崩的有效手段,不仅是保护内部服务的稳定运行,也能避免因调用第三方接口导致服务奔溃。服务降级是服务的自我保护方式,或者是保护下游服务的有利手段。在有限的硬件条件下、未知的流量增速以及业务复杂度的不断增长,服务降级已成为微服务项目中不可或缺的一部份。

Sentinel是阿里于2018年开源的微服务断路器组件,意义为流量防卫兵,承接了阿里巴巴近10 年的双十一大促流量的核心场景,目前已有13.3k的Star。Sentinel以流量为切入点,实现流量控制、熔断降级、系统负载保护等多种服务降级方式保护服务的稳定性,并已提供对多种主流框架的适配,例如Spring Cloud、Dubbo。

笔者想要研究Sentinel的源码一开始只是好奇Sentinel是怎么统计每个接口的QPS的,并且也模仿Sentinel实现了一个基于滑动窗口的QPS统计工具,但后来又不满足于这搁浅的认识,于是深入探索Sentinel整个框架的核心实现原理,在对Sentinel有一定的了解后,也基于Sentinel做过一些扩展,例如,笔者在最近的一个新项目中,在网关层实现请求的熔断(项目从单体迁移的一些原因)、抛弃aop+redis实现开关降级的方式,基于Sentinel实现开关降级提高了开关降级的灵活度。

笔者第一次看Sentinel源码也感觉无从下手,特别是关于节点树这些概念的理解,也是硬着头片去啃源码,结合官方文档去揣摩代码背后的设计思想。基于Sentinel自学难度高、分析Sentinel原理细节的资料零零散散且不全、官方文档介绍得不够深入,笔者下定决心完成此专栏,希望能够帮助到想要深入学习了解Sentinel的读者。

专栏特色

读者将获得什么

学完本专栏你将

学完本专栏,从此跟服务雪崩说拜拜。

适宜人群

关于作者

吴就业,洋葱集团,Java开发工程师、后端架构师,主要负责新项目的技术选型与架构设计、旧项目的重构,以及订单服务、支付中心的需求开发与维护。在微服务领域有丰富的实战经验,如广告系统重构的分布式架构设计、支付中心的技术选型与架构设计、基于xxl-job二次开发的分布式定时任务调度平台、自研微服务监控系统。喜欢研究优秀的开源框架源码,擅长Spring Cloud、Dubbo、Netty、Java虚拟机字节码等技术。微信公众号:Java艺术。

专栏介绍

深入了解Sentinel将有助于我们更好的使用Sentinel提供的特性,并可对其实现扩展以满足我们的需求。了解Sentinel首先是要攻克其基于滑动窗口实现的指标数据统计、以及基于责任链模式实现的服务降级过滤器链,在掌握这两点之后,整个Sentinel的框架源码将不难理解。Sentinel实现的冷启动限流效果算法与匀速限流效果的算法算是限流模块中最难理解的一部份,在介绍这部分内容时会结合Guava的限流算法分析,降低理解难度。

本专栏内容安排如下:

目录

#后端

声明:公众号、CSDN、掘金的曾用名:“Java艺术”,因此您可能看到一些早期的文章的图片有“Java艺术”的水印。

文章推荐

Spring Data R2DBC快速上手指南

本篇内容介绍如何使用r2dbc-mysql驱动程序包与mysql数据库建立连接、使用r2dbc-pool获取数据库连接、Spring-Data-R2DBC增删改查API、事务的使用,以及R2DBC Repository。

使用Spring WebFlux + R2DBC搭建消息推送服务

消息推送服务主要是处理同步给用户推送短信通知或是异步推送短信通知、微信模板消息通知等。本篇介绍如何使用Spring WebFlux + R2DBC搭建消息推送服务。

教你如何编写一个IDEA插件,并掌握核心知识点PSI

IDEA有着极强的扩展功能,它提供插件扩展支持,让开发者能够参与到IDEA生态建设中,为更多开发者提供便利、提高开发效率。我们常用的插件有Lombok、Mybatis插件,这些插件都大大提高了我们的开发效率。即便IDEA功能已经很强大,并且也已有很多的插件,但也不可能面面俱到,有时候我们需要自给自足。

Spring Boot实现加载自定义配置文件

本篇将介绍两种加载自定义配置文件的实现方式,并通过分析源码了解SpringBoot加载配置文件的流程,从而加深理解。

设计模式那些模糊不清的概念

23种设计模式属于结构型模式,而mvc模式等属于架构型模式。本篇要讨论的设计模式指的是结构型设计模式。

实现一个分布式调用链路追踪Java探针你可能会遇到的问题

Instrumentation之所以难驾驭,在于需要了解Java类加载机制以及字节码,一不小心就能遇到各种陌生的Exception。笔者在实现Java探针时就踩过不少坑,其中一类就是类加载相关的问题,也是本篇所要跟大家分享的。