前端带你学后端系列 ⑧【Nacos、Sentinel篇一】

Ⅰ Nacos系列

① 什么是 Nacos?

Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理。

Nacos 的关键特性包括:

1.服务注册、服务发现

服务注册:就是将提供某个服务的模块信息(通常是这个服务的ip和端口)注册到1个公共的组件上去。

服务发现:就是新注册的这个服务模块能够及时的被其他调用者发现。不管是服务新增和服务删减都能实现自动发现。


服务注册的原理:客户端向这个服务端发起http请求服务端接收到请求之后,会将这个instance实例加入到这个阻塞队列里面,然后客户端会异步的开启一个线程来读取这个实例以及实例的各个参数,并且通过写时复制的方法,将这个实例注册到一个双重注册表里面的一个set集合里面去。

服务发现的原理:在进行服务注册之后,该服务就会去这个服务注册中心里面拉取全部的微服务实例,会将全部的实例存在本地的缓存里面,并且同时会去开启一个定时任务每隔几秒就会去拉取一次最新的微服务实例。


在这里插入图片描述

2.动态配置服务

动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。

Nacos 提供了一个简洁易用的UI (控制台样例 Demo) 帮助您管理所有的服务和应用的配置
动态配置消除配置变更重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。


3.动态 DNS 服务

动态 DNS 服务支持权重路由,让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。


4.服务及其元数据管理

Nacos 能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。

① 服务注册、服务发现细节

  1. 自动注册:Nacos提供了无缝的服务注册机制。当新服务启动时,它会自动向Nacos注册中心注册自身,使得服务的存在状态实时可感知。
  2. 动态发现:当一个服务需要调用其他服务时,它可以通过Nacos主动地动态地获取可用服务的列表,而不必事先硬编码或手动配置服务地址
  3. 实时健康检查:Nacos不仅能够发现服务的存在,还能够实时监测服务的健康状况。通过定期的健康检查,Nacos可以及时发现并剔除不可用的服务节点,确保系统的稳定性和可用性。
  4. 命名空间与分组:Nacos的命名空间和分组特性多租户和复杂系统提供了更细粒度的管理。

② 动态配置管理细节

  1. 配置注册与获取:自动注册以后,数据会被客户端收到。各个服务端会把数据主动获取并缓存到本地。
  2. 多环境配置:Nacos支持命名空间的概念,可以在不同的命名空间中管理不同环境的配置。这样就可以在开发、测试、生产等不同环境中使用不同的配置。
  3. 配置组和配置集:配置可以按照配置组进行管理,例如,可以将相同业务线的配置放在同一个组中配置集是配置的唯一标识
  4. 版本管理与回滚:Nacos支持配置的版本管理,可以查看历史版本的配置,并恢复到先前的某个版本。

③ 动态DNS细节

  1. 权重路由:权重路由是一种根据权重值来分配流量的方式。在动态DNS服务中,可以为同一个域名配置多个IP地址,并为每个地址分配一个权重值。权重越高的地址,接收到的流量就越多。这种方式可以用于实现负载均衡,确保流量更均匀地分布到不同的服务器上
  2. 流量控制:流量控制是指根据一定的策略和规则来管理流量的过程。在动态DNS服务中,可以通过调整DNS记录的权重、TTL(Time to Live)等参数来实现流量的控制。

④ 服务及其元数据管理细节

  1. 服务的描述与生命周期管理:Nacos允许对每个服务进行详细的描述,包括服务的名称、版本、描述等信息,以便更好地理解和标识服务。Nacos支持对服务的生命周期进行管理,包括服务的注册、注销、健康检查等阶段,确保服务的正常运行和动态变更。
  2. 服务的静态依赖分析:Nacos提供了服务之间的依赖关系分析,可以查看服务的静态依赖关系,帮助了解服务之间的关联。
  3. Metrics统计数据:Nacos集成了Metrics统计数据,可以收集和展示服务的关键性能指标,帮助进行性能监控和故障排除。

Ⅱ Sentinel系列

① 什么是Sentinel?

随着分布式系统变得越来越流行,服务之间的可靠性变得比以往任何时候都更加重要。如果A服务调用B服务不通的话,很可能导致内存溢出,甚至服务雪崩等效果。Sentinel以“流”为切入点,并在流控制, 流量整形,电路中断和系统自适应保护等多个领域工作,以确保微服务的可靠性和弹性。

在这里插入图片描述

② 了解服务雪崩以及常用的容错方案

在这里插入图片描述

在这里插入图片描述

常见的容错思路有隔离(各个独立,互不影响)超时(设置最大响应时间,超时主动断开)限流(到达阈值减少流量)熔断(达到阈值,上游主动切断)降级(服务崩了保底操作)


在这里插入图片描述
在这里插入图片描述


③ Sentinel的主要功能

流量控制和熔断降级

在这里插入图片描述
在这里插入图片描述

④ 控制台功能的使用

在这里插入图片描述


① 簇点链路

列表:用于展示服务所有接口,包含通过QPS、拒绝QPS、线程数、平均RT、分钟通过、分钟拒绝等信息。可以点击按钮,跳到对应操作的界面。

在这里插入图片描述

② 流控规则

监控应用流量的 QPS 或并发线程数等指标,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。

① 【阈值类型】基于QPS限流

QPS:就是每秒请求的数量。

对于test接口每秒请求量大于1的时候开始限流。

在这里插入图片描述

② 【阈值类型】基于并发线程数限流

一个HTTP请求就是一个线程

比如咱们test请求,是sleep10分钟。当我们发送第三个请求过去的时候,就限流了。

在这里插入图片描述

③ 知识补充:流控模式与流控效果
① 流控模式

sentinel中,流控模式共三种:直接、关联、链路

直接模式
对资源的请求达到设置的规则阈值时直接对该资源触发流量控制。

关联模式
当两个资源之间具有资源争抢或者依赖关系的时候,这两个资源便具有了关联。比如对数据库同一个字段的读操作和写操作存在争抢,读的速度过高会影响写得速度,写的速度过高会影响读的速度。如果放任读写操作争抢资源,则争抢本身带来的开销会降低整体的吞吐量。可使用关联限流来避免具有关联关系的资源之间过度的争抢,举例来说,read_db 和 write_db 这两个资源分别代表数据库读写,我们可以给 read_db 设置限流规则来达到写优先的目的:设置 strategy 为 RuleConstant.STRATEGY_RELATE 同时设置 refResource 为 write_db。这样当写库操作过于频繁时,读数据的请求会被限流。

链路模式
这个模式很好理解,尤其是在微服务间相互调用情况下尤为常见(a->b->d)
假设我以a为入口资源,d为终点资源,对这条链路进行限制的话,则资源a,b,d均会被限制访问。

② 流控效果

sentinel中,流控效果共三种:快速失败、Warm Up(预热)、排队等待

快速失败
当QPS或线程数超过任意规则的阈值后,新的请求就会被立即拒绝,拒绝方式为抛出FlowException。

Warm Up(预热)
当流量突然增大的时候,我们常常会希望系统从空闲状态到繁忙状态的切换的时间长一些。即如果系统在此之前长期处于空闲的状态,我们希望处理请求的数量是缓步的增多,经过预期的时间以后,到达系统处理请求个数的最大值。Warm Up(冷启动,预热)模式就是为了实现这个目的的。

排队等待
严格控制请求通过的间隔时间,让请求以均匀的速度通过,对应的是漏桶算法。 只能对请求进行排队等待

④ 【流控模式】基于关联与链路的限流

关联

当接口test1每秒访问量达到5时,/test接口将被限流无法访问。

在这里插入图片描述

链路

例如:A、B两个接口都调用某一资源C,A->C、B->C可以看成两个简单的链路,此时可以针对C配置链路限流,比如限制A调用C,而B调用C则不受影响。

访问http://localhost:10001/test发现已被限流,而http://localhost:10001/test1则不受影响

在这里插入图片描述

⑥ 【流控效果】基于快速失败与预热/冷启动与排队等待的限流

快速失败:默认的。


预热/冷启动

在这里插入图片描述
在这里插入图片描述




排队等待

在这里插入图片描述

在这里插入图片描述

⑦ 这三种模式排列组合的使用。

流控模式与流控效果必须相结合使用,在未显示的指定模式与效果的时候,默认是直接模式+快速失败效果

根据排列组合,一共可以使用 。
233=18种模式

这些大家自由发挥吧,就不过多介绍了。

③ 熔断降级规则

① 【熔断策略】基于慢调用比例限流

选择以慢调用比例作为阈值,需要设置允许的慢调用 RT(即最大的响应时间),请求的响应时间大于该值则统计为慢调用。当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数目,并且慢调用的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求响应时间小于设置的慢调用 RT 则结束熔断,若大于设置的慢调用 RT 则会再次被熔断。

在这里插入图片描述
在这里插入图片描述

② 【熔断策略】基于异常比例限流

当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数目,并且异常的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。异常比率的阈值范围是 [0.0, 1.0],代表 0% - 100%。

在这里插入图片描述

③ 【熔断策略】基于异常数限流

当单位统计时长内的异常数目超过阈值之后会自动进行熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。

在这里插入图片描述

④ 热点规则


在这里插入图片描述


快速访问http://localhost:10002/test2?userId=111111多次发现被限流,访问http://localhost:10002/test2?userId=22222222则正常;

看我们的配置


在这里插入图片描述

⑤ 授权规则

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

⑥ 系统规则

在这里插入图片描述
在这里插入图片描述

CPU 阈值0.1。 超过以后被限流

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值