Nocas配置注册中心和Sentinel分布式流量防卫兵相关知识总结
一、Nocas配置注册中心
Nacos是阿里巴巴开源的⼀个针对微服务架构中服务发现、配置管理和服务管理平台,Nacos=Eureka+Config+Bus。
Nacos功能特性
1)服务发现与健康检查
2)动态配置管理
3)动态DNS服务
4)服务和元数据管理,动态的服务权重调整、动态服务优雅下线
保护阈值:可以设置为0-1之间的浮点数,它其实是⼀个⽐例值,防止多数服务都处于不可用,少数可用,在流量洪峰到来的时候,引起少量可用服务承受不住导致雪崩效应。
数据模型
Namespace命名空间、Group分组、集群这些都是为了进⾏归类管理,把服务和配置⽂件进行归类,归类之后就可以实现⼀定的效果,⽐如隔离。
Namespace:命名空间,对不同的环境进⾏隔离,⽐如隔离开发环境、测试环境和生成环境
Group:分组,将若干个服务或者若干个配置集归为⼀组,通常习惯⼀个系统归为⼀个组
Service:某⼀个服务,比如简历微服务DataId:配置集或者可以认为是⼀个配置文件
Namespace + Group + Service 如同 Maven 中的GAV坐标,GAV坐标是为了锁定 Jar,二这里是为了锁定服务
配置中心
通过 Namespace + Group + dataId 来锁定配置⽂件,Namespace不指定就默认public,Group不指定就默认 DEFAULT_GROUP,生成dataId:${prefix}-${spring.profile.active}.${file-extension}。
通过 Spring Cloud 原⽣注解 @RefreshScope 实现配置⾃动更新,并且可以实现多个配置文件扩展。
二、Sentinel分布式流量防卫兵
Sentinel是一个面向云原⽣微服务的流量控制、熔断降级组件。 替代Hystrix,针对问题:服务雪崩、服务降级、服务熔断、服务限流。
Hystrix:
1)自己搭建监控平台dashboard。
2)没有提供UI界⾯进⾏服务熔断、服务降级等配置(而是写代码,入侵了我们源程序环境)。
Sentinel:
1)独立可部署Dashboard/控制台组件。
2)减少代码开发,通过UI界⾯配置即可完成细粒度控制(⾃动投递微服务。
Sentinel两部分:
核心库:(Java 客户端)不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的⽀持。
控制台:(Dashboard)基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等应用容器。
Sentinel特征:
1)丰富的应用场景:Sentinel 承接了阿里巴巴近10年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可⽤应⽤等。
2)完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到 接入应用的单台机器秒级数据,甚⾄ 500 台以下规模的集群的汇总运行情况。
3)广泛的开源⽣态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo的整合。您只需要引入相应的依赖并进⾏简单的配 置即可快速地接入Sentinel。
4)完善的 SPI 扩展点:Sentinel 提供简单易⽤、完善的 SPI 扩展接⼝。您可以通过 实现扩展接⼝来快速地定制逻辑。例如定制规则管理、适配动态数据源等。
流量规则模块
资源名:默认请求路径针对来源:Sentinel可以针对调用者进行限流,填写微服务名称,默default(不区分来源)
阈值类型/单机阈值
QPS:(每秒钟请求数量)当调用该资源的QPS达到阈值时进行限流
线程数:当调用该资源的线程数达到阈值的时候进行限流(线程处理请求的时候,如果说业务逻辑执行时间很长,流量洪峰来临时,会耗费很多线程资源,这些线程资源会堆积,最终可能造成服务不可用,进⼀步上游服务不可用,最终可能服务雪崩)
是否集群:是否集群限流
流控模式:
直接:资源调用达到限流条件时,直接限流
关联:关联的资源调用达到阈值时候限流自己
链路:只记录指定链路上的流量
流控效果:
快速失败:直接失败,抛出异常
排队等待:匀速排队,让请求匀速通过,阈值类型必须设置为QPS,否则无效
流控模式之关联限流:
关联的资源调用达到阈值时候限流自己,比如用户注册接口,需要调⽤身份证校验接口(往往身份证校验接口),如果身份证校验接口请求达到阈值,使用关联,可 以对用户注册接口进行限流。
Sentinel流量控制:
关联模式、链路模式、预热、排队等待
Sentinel降级规则(等于Hystrix中的熔断):
RT策略
异常比例策略
异常策略