自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

吴就业

吴就业,《实战Alibaba Sentinel》图书作者,现荔枝集团基础架构高级研发工程师,目前在中间件、云原生领域搬砖。

  • 博客(26)
  • 资源 (1)
  • 收藏
  • 关注

原创 开篇词:一次服务雪崩问题排查经历

笔者想跟大家分享笔者经历的一次服务雪崩事故,分析导致此次服务雪崩事故的原因。或许大多数读者都有过这样的经历,这是项目给我们上的一次非常宝贵的实战课程。什么是服务雪崩?雪崩一词指的是山地积雪由于底部溶解等原因而突然大块塌落的现象,具有很强的破坏力,在微服务项目中指由于突发流量导致某个服务不可用,从而导致上游服务不可用,并产生级联效应,最终导致整个系统不可用,使用雪崩这个词来形容这一现象最合适不过...

2020-09-22 12:05:13 645

原创 为什么需要服务降级以及常见的几种降级方式

为什么需要服务降级,常见的降级方式有哪些?上一篇笔者跟大家分享了一个真实的服务雪崩的故事,也分析了造成服务雪崩的真正原因,那么,如何才能避免服务雪崩的出现呢?我知道你会说:增加硬件,没有什么是钱解决不了的。注意,是避免,在有限的硬件条件下,避免流量突增导致服务雪崩。最好方案应该就是服务降级,处理不过来就不处理了呗。当服务 B 业务线程池全部用满的状态时,应该拒绝服务 A 的请求(这一点 Dub...

2020-09-22 12:05:11 1949 1

原创 为什么选择 Sentinel,Sentinel 与 Hystrix 的对比

为什么选择 Sentinel?选择 Sentinel 与 Hystrix 通常第一步都是通过对比两者优缺点,Sentinel 与 Hystrix 的对比结果是作为我们选择 Sentinel 还是 Hystrix 的直观参考,不过使用 Sentinel 能做什么,是否满足实际需求才是我们最终决定是否使用 Sentinel 的最关键因素,否则尽管一个框架再好,不适合也不会选择。以下 Sentine...

2020-09-22 12:05:10 3342 1

原创 Sentinel 基于滑动窗口的实时指标数据统计

Sentinel 是基于滑动窗口实现的实时指标数据统计,要深入理解 Sentinel 的限流实现原理,首先我们得要了解其指标数据统计的实现,例如如何统计 QPS。为了简单,我们不直接分析 Sentinel 的源码,而是分析笔者从 Sentinel 中摘抄的,且经过改造后的“qps-helper”工具包的代码。总体上是一样的,笔者去掉了一些不需要的指标统计,以及将 Sentinel 一些自定义的类...

2020-09-22 12:05:08 609 1

原创 Sentinel 的一些概念与核心类介绍

了解 Sentinel 的一些概念资源:资源是 Sentinel 的关键概念。资源,可以是一个方法、一段代码、由应用提供的接口,或者由应用调用其它应用的接口。规则:围绕资源的实时状态设定的规则,包括流量控制规则、熔断降级规则以及系统保护规则、自定义规则。降级:在流量剧增的情况下,为保证系统能够正常运行,根据资源的实时状态、访问流量以及系统负载有策略的拒绝掉一部分流量。Sentinel ...

2020-09-22 12:05:06 1397 1

原创 Sentinel 中的责任链模式与 Sentinel 的整体工作流程

上一篇我们简单了解了 ProcessorSlot,并且将 Sentinel 提供的所有 ProcessorSlot 分成两类,一类是辅助完成资源指标数据统计的 ProcessorSlot,一类是实现降级功能的 ProcessorSlot。Sentinel 的整体工具流程就是使用责任链模式将所有的 ProcessorSlot 按照一定的顺序串成一个单向链表。辅助完成资源指标数据统计的 Proces...

2020-09-22 12:05:05 348 1

原创 Java SPI 及 SPI 在 Sentinel 中的应用

SPI 全称是 Service Provider Interface,直译就是服务提供者接口,是一种服务发现机制,是 Java 的一个内置标准,允许不同的开发者去实现某个特定的服务。SPI 的本质是将接口实现类的全限定名配置在文件中,由服务加载器读取配置文件,加载实现类,实现在运行时动态替换接口的实现类。使用 SPI 机制能够实现按配置加载接口的实现类,SPI 机制在阿里开源的项目中被广泛使用,...

2020-09-22 12:05:03 573 1

原创 资源指标数据统计的实现全解析(上)

节点选择器:NodeSelectorSlotNodeSelectorSlot 负责为资源的首次访问创建 DefaultNode,以及维护 Context.curNode 和调用树。NodeSelectorSlot 被放在 ProcessorSlotChain 链表的第一个位置,这是因为后续的 ProcessorSlot 都需要依赖这个 ProcessorSlot。NodeSelectorSlot...

2020-09-22 12:05:01 176 1

原创 资源指标数据统计的实现全解析(下)

资源指标数据统计:StatisticSlotStatisticSlot 才是实现资源各项指标数据统计的 ProcessorSlot,它与 NodeSelectorSlot、ClusterBuilderSlot 组成了资源指标数据统计流水线,分工明确。首先 NodeSelectorSlot 为资源创建 DefaultNode,将 DefaultNode 向下传递,ClusterBuilderSl...

2020-09-22 12:04:59 267 1

原创 限流降级与流量效果控制器(上)

从这篇开始,我们学习 Sentinel 提供的几个实现降级功能的 ProcessorSlot,这些 ProcessorSlot 检查实时指标数据是否达到规则所配置的阈值,当达到阈值时,或抛出 Block 异常或采取流量效果控制策略处理超阈值的流量。Sentinel 实现限流降级、熔断降级、黑白名单限流降级、系统自适应限流降级以及热点参数限流降级都是由 ProcessorSlot、Checker、...

2020-09-22 12:04:58 210 1

原创 限流降级与流量效果控制器(中)

经典限流算法计数器算法Sentinel 中默认实现的 QPS 限流算法和 THREADS 限流算法都属于计数器算法。QPS 限流的默认算法是通过判断当前时间窗口(1 秒)的 pass(被放行的请求数量)指标数据判断,如果 pass 总数已经大于等于限流的 QPS 阈值,则直接拒绝当前请求,每通过一个请求当前时间窗口的 pass 指标计数加 1。THREADS 限流的实现是通过判断当前资源并行占...

2020-09-22 12:04:56 154 1

原创 限流降级与流量效果控制器(下)

WarmUpControllerWarm Up,冷启动。在应用升级重启时,应用自身需要一个预热的过程,预热之后才能到达一个稳定的性能状态,比如说,接口预热阶段完成 JIT 即时编译、完成一些单例对象的创建、线程池的创建、各种连接池的初始化、或者执行首次需要加锁执行的代码块。冷启动并非只在应用重启时需要,在一段时间没有访问的情况下,连接池存在大量过期连接需要待下次使用才移除掉并创建新的连接、一些...

2020-09-22 12:04:54 255

原创 熔断降级与系统自适应限流

熔断降级限流需要我们根据不同的硬件条件做好压测,压测出一个接口或者一个服务在某种硬件配置下最大能承受的 QPS,根据这个结果配置限流规则,并且在后期需求的不断叠加,也需要对接口重新做压测,或者根据线上的实际表现不断调整限流的阈值。因此,限流可能很少使用,或者限流的阈值都会配置的比压测结果略大,这时就需要结合熔断降级做兜底。Sentinel 支持对同一个资源配置多个相同类型或不同类型的规则,在配...

2020-09-22 12:04:52 316 1

原创 黑白名单限流与热点参数限流

黑白名单限流黑白名单过滤是使用最为广泛的一种过滤规则,例如,用于实现接口安全的 IP 黑白名单规则过滤,用于防骚扰的短信、来电拦截黑白名单过滤。所以 Sentinel 中的黑白名单限流并不难理解,如果配置了黑名单,且请求来源存在黑名单中,则拦截(拒绝)请求,如果配置了白名单,且请求来源存在白名单中则放行。Sentinel 不支持一个黑白名单规则同时配置黑名单和白名单,因此不存优先级的问题。黑白...

2020-09-22 12:04:50 501 1

原创 自定义 ProcessorSlot 实现开关降级

开关降级在我们公司的电商项目中是每个微服务都必须支持的一项功能,主要用于活动期间、每日流量高峰期间、主播带货期间关闭一些无关紧要功能,降低数据库的压力。开关降级实现起来很简单,例如,我们可以使用 Spring AOP 或者动态代理模式拦截目标方法的执行,在方法执行之前,先根据 key 从 Redis 读取 value,如果 value 是 true,则不执行目标方法,直接响应服务降级。这种方式付...

2020-09-22 12:04:49 278 1

原创 Sentinel 动态数据源:规则动态配置

经过前面的学习,我们知道,为资源配置各种规则可使用 Sentinel 提供的各种规则对应的 loadRules API,但这种以编码的方式配置规则很难实现动态修改。但基于 Sentinel 提供的各种规则对应的 loadRules API,我们可以自己实现规则的动态更新,而这一功能几乎在每个需要使用 Sentinel 的微服务项目中都需要实现一遍。Sentinel 也考虑到了这点,所以提供了动态数...

2020-09-22 12:04:47 1289 1

原创 Sentinel 主流框架适配

使用 Sentinel 需要用 try-catch-finally 将需要保护的资源(方法或者代码块)包装起来,在目标方法或者代码块执行之前,调用 ContextUtil#enter 方法以及 SphU#entry 方法,在抛出异常时,如果非 BlockException 异常需要调用 Tracer#trace 记录异常,修改异常指标数据,在 finally 中需要调用 Entry#exit 方法...

2020-09-22 12:04:46 268 1

原创 Sentinel 集群限流的实现(上)

由于请求倾斜的存在,分发到集群中每个节点上的流量不可能均匀,所以单机限流无法实现精确的限制整个集群的整体流量,导致总流量没有到达阈值的情况下一些机器就开始限流。例如服务 A 部署了 3 个节点,规则配置限流阈值为 200qps,理想情况下集群的限流阈值为 600qps,而实际情况可能某个节点先到达 200qps,开始限流,而其它节点还只有 100qps,此时集群的 QPS 为 400qps。Se...

2020-09-22 12:04:44 1357 1

原创 Sentinel 集群限流的实现(下)

集群限流源码分析集群限流,我们可以结合令牌桶算法去思考,服务端负责生产令牌,客户端向服务端申请令牌,客户端只有申请到令牌时才能将请求放行,否则拒绝请求。集群限流也支持热点参数限流,而实现原理大致相同,所以关于热点参数的集群限流将留给大家自己去研究。核心类介绍sentinel-core 模块的 cluster 包下定义了实现集群限流功能的相关接口:TokenService:定义客户端向服...

2020-09-22 12:04:42 600 1

原创 结束语:Sentinel 对应用的性能影响如何?

“引入 Sentinel 带来的性能损耗非常小,只有在业务单机量级超过 25W QPS 的时候才会有一些显著的影响(5%~10% 左右),单机 QPS 不太大的时候损耗几乎可以忽略不计。”这是官方文档写的一段话,那么性能到底如何呢?本篇我们回顾 Sentinel 的源码,看看 Sentinel 在性能方面所做出的努力,最后使用 JMH 做个简单的基准测试,看看 Sentinel 表现如何,在此之...

2020-09-22 12:04:40 1235 1

原创 番外篇:Sentinel 1.8.0 熔断降级新特性解读

在本专栏写作完成之际,笔者看到阿里官方推出了 Sentinel 1.8.0 版本,该版本发布时间为 2020/08/20。与此同时,官方文档也更新了关于熔断降级的介绍。从官方文档来看,该版本的最大亮点是对熔断降级功能进行了重构。旧版本的熔断降级功能对慢调用并不友好,而新版本改善了这个问题。在微服务项目中,一个微服务常常需要调用内部其它服务的接口,即便是单体架构项目,也免不了会调用一些第三...

2020-09-22 12:04:39 937 1

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

或许你也发现了,在配置项多的情况下,application-xx.yml配置文件显得过于臃肿,并且在一个分布式项目中,数据库、redis等配置通常是每个微服务都会用到的配置,也都是相同的配置。为了解决单一配置文件过于臃肿的问题,并且实现让多个微服务共用一些配置文件,我们在新项目中将以往的单配置文件拆分成了多个配置文件。另外,我们使用kubernetes的ConfigMap资源作为“配置中心”,可以为每个配置文件创建一个ConfigMap资源,每个微服务项目需要哪些配置文件就可以只引用哪些Confi.

2020-09-20 10:56:34 20660 3

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

23种设计模式属于结构型模式,而mvc模式等属于架构型模式。本篇要讨论的设计模式指的是结构型设计模式。有时候我们在项目中使用设计模式也不能准确的说出...

2020-09-13 20:06:41 216 1

原创 基于XXL-JOB二次开发:为kill job引入安全检查点机制

关于XXL-JOB-ONIONXXL-JOB-ONION是基于XXL-JOB的二次开发,我们基于XXL-JOB二次开发做了扩展,如添加ONION_B...

2020-09-11 19:11:39 705

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

Java探针可以在Java应用运行时毫无感知的切入应用代码,是一种用于监听代码行为或改变代码行为的工具。分布式调用链路追踪的实现无非两种方式,代码侵...

2020-09-06 21:50:01 1753 1

原创 从HotSpot虚拟机源码了解Java的访问控制修饰符

前面Ribbon源码分析文章,有读者留言提问:XX类是包私有的,重写不会报错吗?答案其实是XX类并非包私有,而是一个protected的静态内部类,...

2020-09-01 22:40:53 178 1

IPv4-国家-区域-城市-运营商csv格式数据库-附使用java写的使用demo

此ip库数据为2018年的,不是最新的,所以不保证准确率。 此IP-COUNTRY-REGION-CITY-LATITUDE-LONGITUDE-ISP-DOMAIN-MOBILE.CSV库可用于根据ip查询ip的归属地,可以获取到国家、区域(省)、城市,以及运营商,11000000+数据。 附可运行的使用demo。(demo未做性能优化,很慢也很耗内存,运行请准备好几个g的内存) 此demo不会考虑性能问题,只是用于指导怎么解析ip地址库文件,实现根据ip查询ip的地理位置信息。 运行此demo,请执行DemoMain类的main方法,此demo由于不考虑性能问题,执行时间会比较久,请耐心等待(大概6分钟)。 如果发现卡住(超过10分钟都没执行完成),请调整堆内存重新执行,通过-Xmx6G -Xmx6G调大内存。

2023-10-14

2019年毕业设计-一款情侣APP 附论文、作品视频演示、代码

关键技术 1、Spring Boot是目前主流的以java为开发语言的后端框架,以“约定优于配置”为约定,简化Spring项目的配置。Spring Boot并非一种新的框架,而是为方便整合Spring、Spring MVC以及各种持久化框架所编写。Spring能经久不衰,与其IOC和AOP两大特性密不可分。 2、为解决直接使用jdbc实现数据增删改查所带来的,编码复杂且重复率大、sql注入问题。选择Mybatis框架作为数据持久化层框架,不仅易于上手,更有着由于其它持久层框架的易于扩展性,同时提供插件支持,可以实现sql查询监控以及动态替换公共字段等。 3、要保证用户的数据安全,系统需要对用户可访问的资源进行管理,用户所发表的时光、相册等只能情侣之间可访问,对其它用户不可见,系统引人Shiro框架对用户权限进行管理,系统分普通用户角色于情侣角色。 4、为提供后端接口服务机器之间共享Session,为增强系统并发访问,降低请求延时,对热点数据进行缓存,本系统引入Redis提供数据缓存层。 5、即时在线聊天选择Netty框架。

2023-10-13

2019毕业设计作品-一款支持来电拦截的通讯录APP 附论文核心部分、项目代码

集通话记录、联系人管理、来电秀、骚扰电话拦截功能于一身的通讯录APP。本应用可以根据正则匹配过滤来电,精确的拦截骚扰来电, 而过滤规则可由用户自行定义。如拦截以“0777”开头的号码的来电。当有来电时,应用会先获取用户配置的号码黑名单列表,匹配如果号码不在黑名单列表才会继续匹配过滤规则。 您可以基于此做二次开发作为你的毕业设计,例如拦截功能扩展为支持用户通过编写脚本自定义自己的拦截规则,这样可能满足用户的需求,也能带动用户学习了解一门脚本编程语言,这是件有意义的事情。 注:关于代码,由于本项目开发时间比较早,当时android才出到android 8,所以可能用现在的高android版本的手机可能无法运行。但如果用android8以下版本是可以运行的。

2023-10-12

Java堆外内存使用分析详细

这个视频指导我们java开发遇到堆内存使用正常、gc正常,但实际使用的物理内存缺非常高,特别是容器化部署很容易因内存使用超limit限制导致pod重启,怀疑堆外内存泄露?如何排查堆外内存的使用情况,这个视频详细讲解了。英文无字幕,介意忽下载哈!原来线程数大多也会占用非常大的内存,原来gc也会占用非常大的内存...

2023-10-12

ArchSummit 2023 全球架构师峰会 北京站 PPT(公开)

01-从NewSQL到全新的HTAP分布式架构演进-张潇 01-从互联网到 ToB 服务 - 私有化部署对架构师的挑战-张铎 01-金融级系统海量流量下的高可用架构实践-康杨 01-美团优选智能质量方案探索-王昭 01-中国移动智慧中台赋能企业数智化转型实践-兰建明 01-字节跳动云原生大数据发展之路-余炜强 01-在线优化技术在快手联盟上的实践和产品化-谢淼 博士 01Hudi_Presto 在 News Break 数据平台的尝试--关立胜 01OceanBase的OLAP能力提升实践--杨志丰 01京东到家核心系统微服务演进落地实践--孙岩 01拒绝孤岛-可观测数据融合分析--张城(元乙 02-斗鱼高并发架构实践-李奇 02-华为机器翻译模型训练推理加速实践-魏代猛 02-基于风险驱动的交付模式转型探索与实践-黄佳鑫 02-基于云原生Serverless和消息服务技术采集全球分布业务数据实践-马腾 02-网易严选B端业务数字化之路-郑令飞 02-小红书云原生实时数仓的建设与实践-王成 02畅捷通多租户多数据中心的架构演进--郑芸 03-陌陌云原生微服务架构落地实践-袁世超 ...

2023-10-12

用c#实现的读取rtf格式文件的工具类

一个简单的读取RTF文件的类。 实现简单的翻译如下的RTF文件的代码 {\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\fnil\fcharset134 \'cb\'ce\'cc\'e5;}{\f1\fswiss\fcharset0 Arial;}} {\colortbl ;\red255\green0\blue0;\red0\green0\blue255;} \viewkind4\uc1\pard\lang2052\f0\fs18\\ \cf1\f1 fgsdgfdghfdsgsd\cf0 fgfdsfdg\par ffffffffffffff\b\f0 fffffffffff\ul\b0\f1 fffffffffff\highlight2\ulnone ffff\par ffff\highlight0\\8888\\8888 \cf1\highlight2 \cf2\highlight0 \i\f0 fff\i0\fs53 fffff\i\fs18 f\par }

2016-01-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除