作者:十眠
背景
注册中心作为承担服务注册发现的核心组件,是微服务架构中必不可少的一环。在 CAP 的模型中,注册中心可以牺牲一点点数据一致性(CSpring)springcspringcloud常用注解loud负载均衡,即同一时刻每一个节approve点拿到的服务地址允许短暂的不一致,但必须要测试抑郁症保证可https协议用性(A测试用例)。因为一旦由于某些问题导致注册中心不可用,或appear者服务连不上注册中心,那么想要连接他的节点可能会因为无法获取服务地址而对整个系统出现灾难性的打击。
一个真实的案例
全篇从一个真实的案例说起,测试工程师某客户在阿里云测试你的自卑程度上使用 Kubernetes 集群部署了许多自己的微服springcloud常用注解务,由于某台 ECS 的网卡发生了异常,虽然网卡异常很快恢复了,但是却出现了大面积持续的服务不可用,业务受损approve。
我们来看一下这个问题链是如何形Spring+Cloud成的?
- ECS 故障节点上运行着 Kubernetes 集群的核心基础组件 CoreDNS 的所有 Pod,且低版本 Kubernetes 集群缺少 NodeLocal Dspringcloud和dubbo区别NSCache 的spring是什么意思HTTPS特性,导致springcloud常用注解集群 DNS 解析出现问题。
- 该客户的服务发现使用了有缺陷的客户端版本(Nacos-client 的 1.4.1HTTPS 版本),这个版本的缺陷就是跟 DNS 有关——心跳请求在域名解析失败后,会导致进程后续不会再续约心跳,只有重启才能https协议恢复。
- 这个缺陷版本实际上是已知问题,阿里云在application 5 月份推送了 Nacos-client 1.4.1 存在严重https安全问题 bug 的公告,springmvc的工作原理但客户研发未收到通知,进而在生产环境中使用了这测试用例个版本。
风险环环HTTPS相扣,appstore缺一不可https和http的springcloud面试题区别。
最终导致故障的原因是服务无法调用下游,可用性降低,业务受损。下图示意的是客户端缺陷导致问题的根因:
- Provider 客户端在心跳续约时发生 DNS 异常;
- 心跳线程未能正确地处理这个 DNS 异常,导致线程意外appstore退出了;
- 注册中心的正常机制是,心跳不续约,30 秒后自动下线。由于 CoreDNS 影响的是整个 Kubernetes 集群的 DNspringcloud常用注解S 解析springmvc的工作原理,所以approach Provider 的所有实例都遇到相同的问题application,整个服务所有实例springcloud负载均衡都被下线;
- 在 Consumer 这一侧,收到推送的空列表后,无法找到下游,那么调用https安全问appstore题它的上游(比如网关)就会HTTPS发生异spring面试题常。
回顾整个案例,每一环每个风险看起来发生概率都很小,但是一旦发生就会造成恶劣的测试抑郁程度的问卷影响。服务发现高可用是微服务体系中很重要的一环,当然也是我们时常忽略的点。在阿里内部的故障演练中,这一直是必不可少的一个环节。
面向失败的设计
由于网络环境的抖动比如 CoreDapprovens 的异常spriappearngboot,或者是测试抑郁症的20道题由于某些因素导致我们的注册HTTPS中心不可用等情况,经常会出现服务批量闪断的情况,但这种情况其实不是业务https安全问题服务的不可用,如果我们的微服务可以识别到这是一种异常情况(批量闪断或地址变空时),应该采取一种保守的策略,以免误测试工程师推从而导致全部服务出springcloud面试题现”no providerspringcloud五大组件“的问题,会导致所有的微服务不可用的故障,并且持续较长时间难以恢复。
站在微服务角度上考虑,我们如何可以切段以上的问题链呢?以上的案例看起来测试抑郁症的20道题是测试你适合学心理学吗 Nacos-client 低版本造成的问题,但是如果我们用的是 zookeepspringboot面试题er、eureka 等注册中心呢?我们能拍着胸脯说,不会发生以上的问题吗?面向失败的设application计原则告诉我们,如果springcloud五大组件注册中心挂掉了,或者我们的服务连不上注册中心了,我们需要有一个方式保证我springcloud断路器的作用们的服务正常调用,线上的业务持续不断。
本文介绍的是服务发现过程中的高可用的机制,https协议从服approve务框架层面思考如何彻底解决以上的问题。
服务发现过程中的高可用原理解析
服务发现高可用-推空保护
面向失败的设计告诉我们,服务并不能完全相信注册中心的通知的地址appearance,当注册中心的推送地址https域名为空时候,服务调用肯定会出 no provider 错误,那springcloud负载均衡么我们就忽略Sprispringmvc的工作原理ng+Cloud此次推送的地址变更。
微服务治理中心提供推空保护能力
-
默认无侵入支持市面上appspringcloud和dubbo区别earance近五年来的 Spring Cloud测试工程师 与 Dubbo 框架
-
无关注册中心实现APP,无需升级 client 版本
服务发现高可用-离群https域名实例Spring摘除
心跳续约approa测试仪ch是注册中心感知实例springcloud常用注解可用APP性的基本途径。但是在特定情况下,心跳存续并不能完全等同于服务可用。 因为仍然存在心跳正常,但服务不可用springcloud怎么读的情况,例如:
-
Request 处理的线程springcloud注册中心池满
-
依赖的 RDS 连接异常导致出现大量慢 SQL
-
某几台机器由于磁盘满https和http的区别,或者是宿主机Spring+Cloud资源争抢导致 load 很高
此时服务并不能完全相信注册中心的通知的地springcloud五大组件址,推送的地址中,可能存在一些服务质spring面试题量低下的服务springcloud五大组件提供者,因此客户端需要自己根据调用的结果来判断服务地址的可用性与提供服务质量的好坏,来定向忽略某些地址。
微服务治理中心提供离群实例摘除
-
默认无侵入,支持市面上近五年来的 Spring Cloud 与 Dubbo 框架
-
无关注册中心实现,无需升级 client 版本
-
基于异常检测的摘除策略:包含网络异常和网络异常 + 业务异https和http的区别常(HTTP 5xx)
-
设置异常阈值测试仪、QPS 下springcloud五大组件限、摘除比例下限
-
摘除事件通知、钉钉群告警
离群实例摘除的能力是一个springcloud注册中心补充,根据特定接口的调用异常特征,来衡量服务的可用性。
动手实践
前提条件
-
已创建 Kubernetes 集群,请参见创建 Kubernetes 托管版集群appointment [1] 。
-
已开通 MSE 微服务治理专业版,测试抑郁症的20道题请参approve见开通MSE 微服务治理 [2] 。
准备工作
开启 MSE 微服务治理
1、开通微服务https安全问题治理专业版:
- 单击开通 MSE 微服务治理 [3] 。
- 微服务治理版本选择专业版,选中服务协议,然后springcloud注册中心单击立即开通。关于微服务治理的计spri测试用例ngcloud五大组件费apple详情,请参见价格说明 [4] 。
2、安装 MSE 微服务appointment治理组件:
- 在容器服务控制台 [5] 左侧导航栏中,选择市场&springcloud项目搭建gt;应用目录。
- 在应用目录页springcloud和dubbo区别面搜索框中输入 ack-mse-pilot,单击搜索图标,然后单击组件。
- 在appearance详springcloud情页面选择开通该组件的集群,然后单击创建。安装完成后,在命名空间 mse-pilotmse-pilot-ack-mse-pilot 应用,表示安springcloud断路器的作用装成功。
3、为spring是什么意思应用开启微服务测试抑郁症治理:
- 登录MSE 治理中心控制台 [6] 。
- 在左侧导航栏选择微服springcloud断路器的作用务治理中心> Kubernetehttps安全问题s 集群列表。
- 在 Kubernetes 集群列表页面搜appointment索目标集群,单击搜索图标,然后单击目spring是什么意思标集群操作列下方的管理。
- 在appearance集群详情页面命名空间列表区域,单击目标命名测试空间操作列下方的开启微服务治理。
- 在开启微服务治理对话框中单击确认。
部署 Demo 应用程序
- 在容器springcloud和dubhttps和http的区别bo区别服务控制台 [5] 左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目APP标集群右侧操作列下的详情。
- 在集群管理页左侧导航栏中,选择工作负载>无spring是什么意思测试状态。
- 在无状态页面选择命名空间,然后单击使用 YAML 创建资源。
- 对模板进行相关配置,完成配置后单击创建。本文示例中部署 sc-consumer、s测试抑郁症的20道题c-consumer-empty、sappearc-provider,使用的是开源的 Napproveacos。
部署示例应用(springcloud)
YAML:
# 开启推空保护的 sc-consumer
apiVersion: apps/v1
kind: Deployment
metadata:
name: sc-consumer
spec:
replicas: 1
selector:
matchLabels:
app: sc-consumer
template:
metadata:
annotations:
msePilotCreateAppName: sc-consumer
labels:
app: sc-consumer
spec:
containers:
- env:
- name: JAVA_HOME
value: /usr/lib/jvm/java-1.8-openjdk/jre
- name: spring.cloud.nacos.discovery.server-addr
value: nacos-server:8848
- name: profiler.micro.service.registry.empty.push.reject.enable
value: "true"
image: registry.cn-hangzhou.aliyuncs.com/mse-demo-hz/demo:sc-consumer-0.1
imagePullPolicy: Always
name: sc-consumer
ports:
- containerPort: 18091
livenessProbe:
tcpSocket:
port: 18091
initialDelaySeconds: 10
periodSeconds: 30
# 无推空保护的sc-consumer-empty
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: sc-consumer-empty
spec:
replicas: 1
selector:
matchLabels:
app: sc-consumer-empty
template:
metadata:
annotations:
msePilotCreateAppName: sc-consumer-empty
labels:
app: sc-consumer-empty
spec:
containers:
- env:
- name: JAVA_HOME
value: /usr/lib/jvm/java-1.8-openjdk/jre
- name: spring.cloud.nacos.discovery.server-addr
value: nacos-server:8848
image: registry.cn-hangzhou.aliyuncs.com/mse-demo-hz/demo:sc-consumer-0.1
imagePullPolicy: Always
name: sc-consumer-empty
ports:
- containerPort: 18091
livenessProbe:
tcpSocket:
port: 18091
initialDelaySeconds: 10
periodSeconds: 30
# sc-provider
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: sc-provider
spec:
replicas: 1
selector:
matchLabels:
app: sc-provider
strategy:
template:
metadata:
annotations:
msePilotCreateAppName: sc-provider
labels:
app: sc-provider
spec:
containers:
- env:
- name: JAVA_HOME
value: /usr/lib/jvm/java-1.8-openjdk/jre
- name: spring.cloud.nacos.discovery.server-addr
value: nacos-server:8848
image: registry.cn-hangzhou.aliyuncs.com/mse-demo-hz/demo:sc-provider-0.3
imagePullPolicy: Always
name: sc-provider
ports:
- containerPort: 18084
livenessProbe:
tcpSocket:
port: 18084
initialDelaySeconds: 10
periodSeconds: 30
# Nacos Server
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nacos-server
spec:
replicas: 1
selector:
matchLabels:
app: nacos-server
template:
metadata:
labels:
app: nacos-server
spec:
containers:
- env:
- name: MODE
value: standalone
image: nacos/nacos-server:latest
imagePullPolicy: Always
name: nacos-server
dnsPolicy: ClusterFirst
restartPolicy: Always
# Nacos Server Service 配置
---
apiVersion: v1
kind: Service
metadata:
name: nacos-server
spec:
ports:
- port: 8848
protocol: TCP
targetPort: 8848
selector:
app: nacos-server
type: ClusterIP
我们只需springcloud怎么读在 Consum测试手机是否被监控er 增加一个环境变量profiler.micro.service.registry.empty.push.reject.enable=true,开启注册中心的推空保护(无需升级注册中心的客户端版本,无关注册中心的实https域名现,支持 MSE 的 Nacos、eureka、zookeeper 以及自建的 Nacos、euSpringreka、console、zookeeper 等)
分别给 Consumer 应用增加 SLB 用于公网访问
以下分别使用 {sc-consumer-empspringcloud面试题ty} 代表 schttps安全问题-consumapproveer-empty 应用的 slb 的https域名公网地址,{sc-cspring是什springcloud五大组件么意思onsumerspringboot面试题} 代表 sc-consumer 应用的spring面试题 slb 的公springcloud五大组件网地址。
应用场景
下面通过上述准备的 Demo 来分别实践以下场景apple
- 编写测试脚本
vi curl.sh
while :
do
result=`curl $1 -s`
if [[ "$result" == *"500"* ]]; then
echo `date +%F-%T` $result
else
echo `date +%F-%T` $result
fi
sleep 0.1
done
- 测试,分别开两个命令行,执行如下脚本,显示如下
% shspring面试题 curl.sh {sc-consumer-empty}:18091/useappetiter/rest2022-01-19-11:springcloud注册中心58:12 Hello from [18084]10.approach116https和http的区别.0.142!2022-01-19-测试手机是否被监控11:58:12 Hello fspringcloud五大组件rom [18084]10.116.0.142!2022-01-19-11:58:12 Hello from [18084]10.116.0.142!202spring翻译2-01-19-11:58:13 Hello frohttp测试用例s和http的区别m [18084]10.116.0.142!2022-01-19Spring-11:58:1springclouspring翻译d项目搭建3 Hello from [18084]10.116.0.142!2022-01-19-11:58:13 Hello from [18084]10.116.0.142!
% sh curl.测试用例sh {sc-consumer}:18091/user/resthttps域名2022-appear01-19-11:58:13 Hello from [18084]10.1approach16.0.142!2022-01-19-11:58:13 Hello from [18084]10.116.0.142!2022-01-19-11:58:13 Hello from [18084]10.116.0.142!2022-01-springcloud五大组件19-11:58:14 Hello from [18084]10.116.0.142!2022-01-19-11:58:14 Hello from [18084]10.116.0.142!2022-01-19-11:58:14springmvc的工作原理 Hello from [18084]10.116https域名.0.142!
并保持脚本一直在调用,观察 MSE控制台分别看到如下情况
- 将 cospringcloud常用注解red测试你的自卑程度ns 组件缩容至数量application 0,模拟 DNS 网络解析异常场景测试手机是否被监控。
发现测试用例实例与 Nacos 的连接断开且服务列表为空。
- 模拟 DNS 服务恢复,将其扩容回数量 2。
结果https安全问题验证
在以上过程中保持持续的业务流量,我们发现 sc-consumerspring–HTTPSempty 服务出现大量且持续的报错
2022-01-19测试你的自卑程度-12:02:37 {“timeappstorestamp”:”202springboot面试题2-01-19T04:02:37.59springboot面试题7+0000″,”status”:500,”error”:”Internal Server Err测试工程师or”,”测试抑郁症的20道题mes测试sage”:”com.netflix.spring面试题client.ClientException: Load balancer does not have available sespringcloud从入门到精通rver forspringcloud项目搭建 client: mse-service-providapplicationer”,”path”:”/APPuser/feign”}2022-01-19-12:02:37 {“tAPPimspringcloud面试题estamp”测试仪:”2022-01-19T04:02测试抑郁症:37.799测试用例+0000″,”statspringcloud断路器的作用us”:HTTPS500,”error”:”Internal Server Error”测试抑郁症,”message”:”com.netflix.client.ClientExceptioappstoren: Load balancer does not have available server forspringcloud五大组件 client: mse-service-provider”,”path”:”/user/测试你的自卑程度feign”}2022-01-19-12:02:37 {“timestamp”:”2Spring022-01APP-19T04:02:37.993+0000″,”status”:500,”error”:springboot“Internal Server Errappetiteor”,”messaspringcloud常用注解gapplicationeapprove“:”cSpring+Cloudom.netflix.client.Clientspring框架Exception: Load balancer does not have availabspring框架le server foappler client: mse-servspAPPring面试题ice-provider”,”path”:”/user/feign”}
相测试spring是什么意思抑郁程度的问卷比之下,sc-consumer 应用全流程没有任何报错
- 只有重启了 Provider,sc-consumer-empty 才恢复正常
相比之下,sc-consumer 应用全流程没有任何报错
后续
我们当发生推空spring保护后,我们会上报事件、告警至钉钉群,同时建议配合离群实例摘除使用,推空appreciate保护可能会导致 Consumer 持有过approach多的 Proappreciatevider 地址,当 Provider 地址为无效地址时,离群实例摘除可以对其进行逻辑隔离,保证业务的高可用。
尾
保障云上业务的永远在线,是 MSE 一直在追求的目标,本文通过面向失败设计的服务发现高可用能力的分springcloud断路器的作用享,以及appear MSE 的服务治理springcloud五大组件能力快速application构建起服务发现高可用能力的演示,模拟了线上不可预期的服务发现相关异常发生时的影响以及我们如何预防的手段,展示了一个简单的springcloud五大组件开源微服务应用应该如何构建起服务测试仪发现高可用能力。
相关链接
[1] 创建 Kubernetes 托管版集群
help.aliyun.com/documenspringcloud五大组件t_de…appetite
[2] 开通MSE 微服务治理
help.aliyuspringcloud注册中心n.com/测试用例docume测试用例nt_de…
[3] 开通MSE 微服务治测试抑郁程度的问卷理
common-springcloud常用注解buy.aliyun.com/?commoditSpring+CloudyC…
[4]价格说明
https://help.aliyun.com/document_detail/appstore170443.htm#concept-25测试仪19524
[5]容器服务控制台
https://cs.console.aliyun.com
[6]MSE 治理中心控制台
https://mse.APPconsole.aliyun.com
点击springcloud负载均衡此处,前往 MSE 官网查看更多!