跳至主要內容
《深入理解 Sentinel》笔记

《深入理解 Sentinel》笔记

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

什么是服务雪崩

服务雪崩是指:在微服务项目中指由于突发流量导致某个服务不可用,从而导致上游服务不可用,并产生级联效应,最终导致整个系统不可用。

当一切正常时,整体系统如下所示:


钝悟...大约 8 分钟笔记分布式分布式调度分布式调度限流熔断降级Sentinel
服务注册和发现

服务注册和发现

服务注册和发现的基本原理

服务定义是服务提供者和服务消费者之间的约定,但是在微服务架构中,如何达成这个约定呢?这就依赖于服务注册和发现机制。

注册和发现的角色

在微服务架构下,服务注册和发现机制中主要有三种角色:

  • 服务提供者(RPC Server / Provider)
  • 服务消费者(RPC Client / Consumer)
  • 服务注册中心(Registry)

钝悟...大约 21 分钟分布式分布式调度分布式服务治理调度服务注册服务发现
分布式调度

分布式调度

📖 内容

  • 服务注册和发现 - 关键词:服务注册服务发现元数据
  • 负载均衡 - 关键词:轮询随机最少连接源地址哈希一致性哈希虚拟 hash 槽
  • 流量控制 - 关键词:限流熔断降级计数器法时间窗口法令牌桶法漏桶法
  • 路由和网关 - 关键词:路由条件路由脚本路由标签路由
  • 分布式 ID - 关键词:UUID自增序列雪花算法Leaf

钝悟...小于 1 分钟分布式分布式调度分布式分布式调度
网关路由

网关路由

什么是网关

网关的首要职责就是:作为统一的出口,对外提供服务;将外部访问网关地址的流量,根据适当的规则路由到内部集群中正确的服务节点之上。因此,微服务中的网关,也常被称为“服务网关”或“API 网关”。

网关首先应该是个路由器,在满足此前提的基础上,网关还可以根据需要作为流量过滤器来使用,提供某些额外的可选的功能。网关常见的能力如下:

  • 动态路由:根据请求路由到对应的服务上去,如果服务不可用还会有重试机制
  • 负载均衡:多服务器提供同一种服务,网关会从配置中心拉取各服务注册信息,然后将请求负载均衡风阀到这些服务器进行处理
  • 流量控制:限制并发请求的流量,避免内部系统受到冲击
  • 安全认证:网关对相关权限验证、脱敏和流量清洗、签名和黑名单功能
  • 熔断降级:当服务不可用或者访问量过大,网关可以将请求做降级,将流量打到其他服务器或者做其他处理,提示用户暂时不可用
  • 灰度发布:先进行小部分服务器升级,通过网关将少量的服务路由到已升级的服务器用来测试服务是否正常,大部分请求依旧在老版本服务器上处理
  • 日志服务:服务访问情况监控和统计报表,请求的吞吐量、并发数、流量监控、性能监控和日常告警等

钝悟...大约 11 分钟分布式分布式调度分布式服务治理调度路由网关
流量控制

流量控制

在高并发场景下,为了应对瞬时海量请求的压力,保障系统的平稳运行,必须预估系统的流量阈值,通过限流规则阻断处理不过来的请求。

流量控制简介

什么是流量控制

流量控制(Flow Control),根据流量、并发线程数、响应时间等指标,把随机到来的流量调整成合适的形状,即流量塑形。避免应用被瞬时的流量高峰冲垮,从而保障应用的高可用性。

为什么需要流量控制

复杂的分布式系统架构中的应用程序往往具有数十个依赖项,每个依赖项都会不可避免地在某个时刻失败。 如果主机应用程序未与这些外部故障隔离开来,则可能会被波及。


钝悟...大约 17 分钟分布式分布式调度分布式服务治理调度流量控制限流熔断降级
分布式 ID

分布式 ID

什么是分布式 ID

什么是 ID?

ID是Identity的缩写,用于唯一的标识一条数据。

什么是分布式 ID?

分布式ID,顾名思义,是在分布式系统下生成的ID

为什么需要分布式 ID

在业务发展早期,数据都存储在单表中。关系型数据库一般都支持自增序列,通常都直接使用自增序列作为 ID。随着业务发展,数据逐渐膨胀,以至于要通过分库分表来分而治之。这时,将面临一个问题:

分布式 ID 的设计目标


钝悟...大约 12 分钟分布式分布式调度分布式调度分布式IDUUIDSnowflakeLeaf
负载均衡

负载均衡

负载均衡简介

大型系统面临的挑战

大型系统通常要面对高并发、高可用、海量数据等挑战。

为了提升系统整体的性能,可以采用垂直扩展和水平扩展两种方式。

  • 垂直扩展:在网站发展早期,可以从单机的角度通过提升硬件处理能力,比如 CPU 处理能力,内存容量,磁盘等方面,实现机器处理能力的提升。但是,单机是有性能瓶颈的,一旦触及瓶颈,再想提升,付出的成本和代价会极高。通俗来说,就三个字:得加钱!这显然不能满足大型分布式系统(网站)所有应对的大流量,高并发,海量数据等挑战。
  • 水平扩展:通过集群来分担大型网站的流量。集群中的应用机器(节点)通常被设计成无状态,用户可以请求任何一个节点,这些节点共同分担访问压力。水平扩展有两个要点:
    • 集群化、分区化:将一个完整的应用化整为零,如果是无状态应用,可以直接集群化部署;如果是有状态应用,可以将状态数据分区(分片),然后部署到多台机器上。
    • 负载均衡:集群化、分区化后,要解决的问题是,请求应该被分发(寻址)到哪台机器上。这就需要通过某种策略来控制分发,这种技术就是负载均衡。

钝悟...大约 36 分钟分布式分布式调度分布式服务治理调度负载均衡