服务发现与配置管理高可用最佳实践|学习笔记(二)

简介: 快速学习服务发现与配置管理高可用最佳实践

开发者学堂课程【服务发现与配置管理高可用最佳实践服务发现与配置管理高可用最佳实践】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/968/detail/14889


三、服务发现高可用

服务发现包含两个角色服务消费者( Consumer ) 和服务提供者( Provider )。

(1) 消费者( Consumer ):

通过 MSE 提供推空保护、服务降级能力达到容灾的目的。

推空保护应对开头的案例,服务空列表推送到Consumer 时,可以自动缓存数据,不会报到下游,没有实例异常。

服务消费者会从注册中心上订阅服务提供者的实例列表。当遇到突发情况(例如,可用区断网,Provider端无法上报心跳)或注册中心(变配、重启、升降级)出现非预期异常时,都有可能导致订阅异常,影响服务消费者的可用性。

为了应对不可预知的情况下订阅列表异常,可以在Consumer侧配置推空保护。

(2) 服务提供者 ( Provider ):

可以通过注册中心和服务治理提供的容灾保护,离群摘除,无损下线能力,提升整体服务的可用性。

服务提供者容灾保护主要是用于避免集群在异常流量下出现雪崩。

1. Consumer 端-推空保护:

(1)Consumer没有推空保护:

假如 Provider 出现注册失败的异常(网络.SDK.bug.dns )的故障;

在注册中心可能就判断Provider心跳过期,使自动下线;

Consumer定位到空列表,业务就会中断报错。

(3) 开启了推空保护:

Consumer定位到空列表,会把空列表的变更丢弃,直接使用缓存来保障业务服务的可用。

开启方式:

(4)配置项

sCA:

spring.cloud.nacos.discovery.namingPushEmptyProtection=true Dubbo

持久化缓存目录,避免重启后丢失:

${user.home}/nacos/naming/${namespaceld}

2.Consumer 端-服务降级

服务降级是当下游的某一个接口出现异常时可以做一些策略上的保护。

例如:这个接口可能是不重要的功能,可能在下游的这个服务上有更重要的业务,也需要调用这个服务,可以通过特定的规则进行配置,将这个接口进行降低保证重要的功能可用性。((将宝贵的下游 Provider 资源保留给重要的业务 Consumer 使用))

服务降级的具体策略:包含返回 Null 值、返回 Exception 异常、返回自定义 JSON 数据和自定义回调

image.png

3.Provider 端-容灾保护

Provider的高可用有容灾保护。

(1) 无容灾保护能力:

业务类似于大促,可能都会有突发的流量。在突发请求量过来时,如果流量超过了容量水位,个别 Provider 可能就会发生故障,例如 java 应用可能就会发生一些短期的故障,会增加请求的延迟。整个 Provider 处理能力,吞吐量就下降。在这个时候,这个节点可能会发生异常,心跳可能续不上;

image.png

注册中心会将故障的节点摘除,剩余的流量就会就给剩下的节点;

如果流量还是比较大,剩余的节点可能负载也会变高,可能也会出现故障;

最后不断的循环过程,注册中心会将大部分的节点都摘除,最后全部流量的都会压给剩余的少量节点。可能100%流量就给剩下的两个节点。可以看到就是前面4个节点都有两个节点异常。剩下的流量这两个节点的大概也无法负载。最后所有的服务都不可用,100%不能提供服务。

(2) 开启容灾保护;

可以设定一个阈值。发生这个情况时,当故障的节点数量达到保护阈值时,注册中心会做保护的操作,会将这些流量返回所有的实例列表。

作用:将所有的流量都平摊给所有的机器。不管这个机器是否故障,会将原先所有的实例都返回给上游。所有的流量就会平摊里所有机器,从下图看到剩余的两个节点,只接收50%流量。

目的:在发生较大故障时,可以保护集群不会完全雪崩,至少能够保留50%的可用性。

(3)开启方式:

命令控制行;控制台开启(即将推出)

(3) 容灾保护在紧急的情况下,能够保证服务的可用性在一定的水平之上,所以它是一种兜底的策略。

4. Provider 端-离群实例摘除

心跳续约的是注册中心感知实例可用性的基本的一种方法,在注册中心也没有其他能力做探测。

(1) 在特定的情况下,会有心跳正常,但是服务不可用的情况

例如:专门处理业务请求的线程线程池满。Java 的进程是存活的,并且虚拟机没有异常,心跳是正常,只是线程池是满的,所以本质上是不可用的,但是注册中心还是会将他的可用性暴露给他的上游;

依赖的底层的 RDS 连接异常或者渗透慢,它可用性有损,但心跳不能完全感知到。

(2)微服务治理中心-离群实例摘除

基于异常检测的摘除策略:包含网络异常和网络异常+业务异常(HTTP 5xx);

设置异常阈值、 QPS 下限、摘除比例下限。

(3) 离群实例摘除对于可用性探测是一种补充,能够根据特定的接口的调用异常的特征去衡量服务可用性,所以它应该是更完备的机制补充心跳和可用性的标准。

5.Provider 端-无损下线(平滑下限)

(1)有损下线:

Provider 变更,升级或者是重启,下线的过程中,心跳在注册中心存约以及变更生效都有一定的时间,并且在存约失效之后,变更推送到它的上游也有一定的时间,所以在这个时间内,如果 Consumer的订阅列表没有更新,如果把 Provider 直接停止服务。那么 Consumer 的请求就会有一定的流量报错,直接损失。

(2)无损下线:

保障在下线的过程中不会有流量出现异常,有很多不同的解决方案,包括一些注册中心本身也是存在能力

通过推送些机制(对应用进行停止、部署、回滚、缩容、重置等操作),能够减少变更生效的时间,但是微服务治理中心提供无损下线的能力是侵入性最低的,并且能够让我们无感的去整合到发布的流程中,完全自动执行。

免去繁琐的运维脚本逻辑的维护。

 

四、配置管理高可用

配置管理主要包含配置订阅和配置发布两类操作。

配置管理:解决在多环境,多机器的配置发布以及配置动态实时更新推送的问题。

1.微服务基于配置管理做高可用的方案:

(1)发布环境管理:

通过基于配置环境管理的能力可以一致性管理上百个的机器,不同的环境如何能够正确的推送,能够避免些人为的误操作,或者是在出现线上问题的时候,能够将这些问题快速的回滚;发布的过程中可以做一些灰度。

(2) 业务开关动态推送:

实时的,能够推送到业务系统上,例如:一些功能或者活动页面的开关,

(3) 内置容灾降级预案:

预案通过配置直接推送下发,包括流量的阈值能实时通过配置去调整。

(4)双11大促配置管理高可用解决方案:

例如:消耗比较大的非核心的业务做降级;对一些服务配置白名单(一些重要的业务,在大促期间要做变更);禁用一些高风险的操作;调整日志采样;在系统压力大的时候去降级一部分的功能和一部分请求做限流。

image.png

2.配置管理客户端容灾方案:

例如:客户端本地的目录,主要分为两级,高优先级的是容灾目录,低优先级的是缓存目录。

当配置中心不可用的时候,本地的客户端的会优先查看容灾目录的配置,否则使用之前拉取到的配置。

(1)缓存目录∶每次客户端和配置中心进行数据交互后,会保存最新的配置内容至本地缓存目录中,当服务端不可用状态下,会使用本地缓存目录中内容。

(2)容灾目录:因为缓存目录里面可能不一定会有,或者业务可能需要紧急的变更配置,开启预案或者措施。如果这个时候配置中心不可用,需要容灾目录帮助业务绕开该配置中心的问题,解决配置下发的问题。总的来说,不管发生什么样的风险,我们都要能够使配置的客户端能够读取到正确的配置,从而保证微服务(整个系统)的可用性。

image.png

3.在配置中心高可用的方案:

(1)配置中心高可用:

针对读写的限流,例如:

限制连接数:特定的单机限流,可以支持特定的 IP 限流;

限写接口:特定的配置或发布操作的限流。

(2)配置发布:

控制人的风险,人做配置发布或者配置管理的过程中,可能会有一些误操作,例如环境看错或配置写错。配置发布也有一些、置是可灰度的,可以追溯它的发布历史,并且能够一键快速回滚。

相关文章
|
10月前
|
存储 缓存 JSON
Nacos配置中心:优化微服务架构的配置管理利器
Nacos配置中心:优化微服务架构的配置管理利器
271 0
|
缓存 前端开发 安全
55-微服务技术栈(高级):微服务网关Soul(数据同步原理)
Soul 网关在启动时,会从从配置服务同步配置数据,并且支持推拉模式获取配置变更信息,并且更新本地缓存。而管理员在管理后台,变更用户、规则、插件、流量配置,通过推拉模式将变更信息同步给 Soul 网关,具体是 push 模式,还是 pull 模式取决于配置。关于配置同步模块,其实是一个简版的配置中心。
383 0
|
Kubernetes 负载均衡 网络协议
K8s如何实现服务发现与配置管理
K8s在实现负载均衡与配置管理上的原理是咋样的呢?
|
缓存 Kubernetes 监控
服务发现与配置管理高可用最佳实践
本篇是微服务高可用最佳实践系列分享的开篇,系列内容持续更新中,期待大家的关注。
服务发现与配置管理高可用最佳实践
|
Kubernetes 监控 Cloud Native
服务发现与配置管理高可用最佳实践|学习笔记(三)
快速学习服务发现与配置管理高可用最佳实践
86 0
服务发现与配置管理高可用最佳实践|学习笔记(三)
|
域名解析 存储 缓存
服务发现与配置管理高可用最佳实践|学习笔记(一)
快速学习服务发现与配置管理高可用最佳实践
107 0
服务发现与配置管理高可用最佳实践|学习笔记(一)
|
存储 监控 数据可视化
ELK搭建(一):实现分布式微服务日志监控
本次我们搭建的目标是通过ELK来收集微服务中的日志。本期主要以实操、快速搭建为主进行讲解,部分基础概念不做过多描述,后续会再单独出几期博客说明。更多ELK搭建可以关注本专栏,后续会持续输出。
353 0
ELK搭建(一):实现分布式微服务日志监控
|
12天前
|
Kubernetes Java Nacos
如何快速构建服务发现的高可用能力
本文是阿里云微服务引擎MSE在服务发现高可用的最佳实践介绍。
如何快速构建服务发现的高可用能力
|
开发框架 监控 算法
SpringCloud微服务实战——搭建企业级开发框架(十四):集成Sentinel高可用流量管理框架【限流】
Sentinel 是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。Sentinel 安装部署请参考:https://www.jianshu.com/p/9626b74aec1e Sentinel 具有以下特性: • 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
218 0
SpringCloud微服务实战——搭建企业级开发框架(十四):集成Sentinel高可用流量管理框架【限流】
|
开发框架 Sentinel 微服务
SpringCloud微服务实战——搭建企业级开发框架(十五):集成Sentinel高可用流量管理框架【熔断降级】
Sentinel除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。由于调用关系的复杂性,如果调用链路中的某个资源不稳定,最终会导致请求发生堆积。Sentinel 熔断降级会在调用链路中某个资源出现不稳定状态时(例如调用超时或异常比例升高),对这个资源的调用进行限制,让请求快速失败,避免影响到其它的资源而导致级联错误。当资源被降级后,在接下来的降级时间窗口之内,对该资源的调用都自动熔断。
200 0
SpringCloud微服务实战——搭建企业级开发框架(十五):集成Sentinel高可用流量管理框架【熔断降级】