Spring Cloud 微服务项目实战
姚秋辰(姚半仙)
PayPal 研发经理
15862 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 38 讲
结束语 (1讲)
Spring Cloud 微服务项目实战
15
15
1.0x
00:00/00:00
登录|注册

17 | Sentinel 体系结构:什么是服务容错(降级熔断、流量整形)?

你好,我是姚秋辰。
今天我们来学习大型微服务系统中高可用性的重要一环:服务容错。通过这节课的内容,你可以了解什么是降级熔断和流量整形,以及它们和服务高可用之间的联系。最后我再带你从架构层面去了解 Sentinel 服务容错的工作流程,为后面的实战课程做一些理论知识的铺垫。
说到高可用,你也许会不由自主地想到“集群化”。没错,通过搭建服务集群来避免单点故障确实是高可用性保障的常规操作。但是,仅仅搭建集群就能高枕无忧了吗?当面对真正的高可用杀手“服务雪崩”时,即便是集群也会显得脆弱无力。
那么服务雪崩在微服务系统中能引起多大的故障呢?在学习什么是服务容错之前,我们先来了解一下服务容错所要解决的实际问题。

什么是服务雪崩?

我来用一个模拟场景带你感受一下服务雪崩的厉害之处。
假设我有一个微服务系统,这个系统内包含了 ABCD 四个微服务,这四个服务都是以集群模式构建的。我画了一张图用来表示各个服务之间的调用关系。
从上面的图中我们可以看出,服务 A 会向服务 B 和服务 C 发起调用,而服务 B 和服务 C 都会去调用服务 D。也就是说,服务 ABC 都直接或间接地依赖服务 D 完成自己的业务逻辑。
由于服务 D 底层有数据读写的需求,所以它会对数据库执行 CRUD 操作。如果开发服务 D 的程序员学艺不精,写了一段性能比较差的 SQL 语句,那么一次 DB 操作的执行时间就会比较长。这在小并发访问量的情况下没有什么问题,不过,一旦并发量堆积了起来,这种性能问题就会被放大。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Sentinel 体系结构是一篇介绍了服务容错(降级熔断、流量整形)的技术文章。文章通过生动的场景描述和详细的技术介绍,使读者能够快速了解服务容错的重要性以及Sentinel在其中的作用和原理。文章首先描述了服务雪崩的危害,引出了服务容错的重要性。接着详细介绍了Sentinel服务容错的思路,包括内部异常治理和外部流量控制两个方面。在内部异常治理中,文章介绍了降级和熔断的处理方式,强调了在双11等大促场景下的重要性,并提到了全链路压测的重要性。在外部流量控制方面,文章介绍了限流的作用以及不同的限流模型,强调了限流作为投入产出比最高的防护措施。此外,文章还提到了Sentinel的工作原理,介绍了其使用职责链的方式做资源访问检查的机制。整体而言,本文通过生动的场景描述和详细的技术介绍,使读者能够快速了解服务容错的重要性以及Sentinel在其中的作用和原理。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Spring Cloud 微服务项目实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(7)

  • 最新
  • 精选
  • Lee
    限流单机guava的ratelimit 或者分布式下用redis的rratelimit

    作者回复: 单机guava非常好,成本低廉

    2022-05-14
    6
  • peter
    A “降级”和“熔断”都会执行降级逻辑。但对于“降级”,下一次A服务还会调用B服务,只不过失败后再执行降级逻辑,对吗? B 我对“降级”的理解是“下线某些不重要的服务”,和本篇所讲的“降级”不一样。是不同层次的“降级”吗? Q2:预热模型两个问题? A 预热模型是在线上使用的吗?还是上线之前测试用的? B 对于窗口内的某一个阈值,请求失败后怎么处理? Q3:Sentinel创建的entry对象是对请求的封装吗? 还是对要访问的资源的封装? Q4:为什么叫Slot吗?slot本意是“时隙”,感觉用这个名字不合适?

    作者回复: 通常意义上说的降级是“服务降级”,比如下单页面显示100%业务元素,现在我做链路降级,只提供70%业务能力,剩下30%的非主链路服务,比如说用户画像推荐,就给关闭掉。我文章中说的“降级”是偏向于“降级方法”的意思,其实可以认为是“error处理方法”。 预热模型在线上使用,请求失败后根据你设置的流控效果有不同的处理方式。entry视为对“一次访问请求能否通过flow检查”的封装,并不是对“Request请求”的封装。 英文和中文一样一个词有很多语义,有很多需要“意会”的含义,Slot作为一个“槽”的含义,其实功能层面上和filter的类似。官方是以slot命名的。

    2022-01-19
    3
    4
  • 子夜
    有个疑问 限流和熔断降级都是入口处拦截的,假如有两台服务器a,b。a调用b 在b处做限流或熔断降级,无论b的资源是否被占用,a的计算资源都被占用了不是嘛

    作者回复: 是这样没错,如果不想浪费A资源可以把流控前置,放在A这里,或者通过关联流控/链路流控等方式设置优先级序列,让核心服务放行,边缘服务进流控

    2022-06-30
    2
  • 排骨
    Sentinel里面有个DefaultSlotChainBuilderTest单元测试类,可以大概看清楚全流程
    2023-02-27归属地:广东
    3
  • 罗逸
    改了git配置,拉下来了,sorry
    2022-02-18
  • 罗逸
    服务容错拉不下来 warning: Clone succeeded, but checkout failed. sentinel-annotation-quarkus-adapter-deployment 说这个名称过长
    2022-02-18
  • 海布里王力宏
    能简单介绍一下slot的底层原理实现吗?如何做到即保护了资源又不影响可用性。
    2022-01-30
收起评论
显示
设置
留言
7
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部