开发者学堂课程【服务发现与配置管理高可用最佳实践:服务发现与配置管理高可用最佳实践】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/968/detail/14889
五、实践
1.介绍方案:
高可用的方案,服务提供者所有机器都发生注册异常的情况:观察服务的消费者在推空保护打开的情况表现如何。
(1) 右侧是简单的调用场景,外部流量通过网关接入,选择 MSE 产品云原生网关,通过它提供的可观测的能力,方便的观察整个服务调用的具体情况。
网关的下游有 a,b,c 三个应用,a,b,c 应用是相同的代码,能够支持使用配置管理的方式,动态的去调整他们之间的调用关系,现在设计上的调用关系 a 是调用 b,b 调用 c,通过模拟网络的问题,将应用 b 与注册中心之间的心跳的链路断开(红色××),通过这种方式可以模拟注册异常发生。
为了方便对照,在应用a部署了两个版本(开启推空保护和未开启推空保护)
(2)最终期望结果:
开启推空保护:能够帮助应用a在注册异常的情况下,能够继续调用b。
没有开启推空保护:应用a会调用b发生异常,在网关流量达到应用a之后,观察到网关的请求成功率正好在50%。
2.演示:
(1)购买一套 MSE 注册中心的专业版和云原生网关,并且能够将他们关联起来。
(2) 配置 next.appmsc-c,现在这个应用下游是那一个应用。
先将应用a 的下游配置成 c,让 a 可以调用 c;
b配置下游是 c;
应用 c 可以配置没有下游,就会只返回它自己的 IP。
(3) 部署应用。
基于 K8S 应用环境部署的配置就是你有的。
应用a版本打开推空保护,把名称命名为 spring.cloud-a-b 的;
应用a没有开启推空保护,选用了 demo1.4.2的版本(客户端),客户端的版本的在1.42之后才支持推空保护开关。
3.操作部署:
Mse-ha k apply -f mse.yaml
Mse-ha k get pod -w
网关上注册服务,网关只需要调用服务a,所以只需要注册服务a,创建一个服务的路由,关联到服务a,点击确定,发布路由。
mse-ha curl http://47.102.137.69/ip
调用网关,看具体效果。应用上的路径的是ip,应用a通过 http://47.102.137.69/ip调用应用c,
将配置的改回之前计划的调用关系:
将应用 a 的下游,重新配到应用b,点击发布。
mse-ha curl http://47.102.137.69/ip
配置成功之后,配置已经生效。符合 a 调用 b,b 调用 c
通过命令连续的调用接口,模拟真实场景下不间断的业务流量。查看网关的大台,在监控中心里。
页面放大,看到请求的成功率是100%,一切都正常
注入故障;
mse-ha ll
mse-ha cat block.yaml
通过k8s的networkplus的机制,模拟应用出口网络发生了异常,应用配置选择了 spring-cloud-b,这个应用出口的流量的只能返回8080。
8080端口:应用之间的调用都是通过8080端口去调用,所以模拟了这个场景,该场景所有的内网调用是不受影响,要通过外网去访问注册中心的时候发生的异常。
b的下游是c(b通过端口去调用c)
注入故障:
mse-ha aooly -f block.yaml
mse-ha curl http://47.102.137.69/ip
网络阶段之后,注册中心的心跳无法续约,会在大概30秒的时间才会把这个应用b所有的IP摘除。我们在整个链路上没有开启推空保护的应用 a 的版本,调用b会发生失败,在网观测观看会直接报错。
服务列表中应用 b 已经消失,说明调用链出现问题.
mse-ha curl http://47.102.137.69/ip
大概50%的概率成功
可以观察到,成功率已经开始下降,一分钟的流量的监控统计的成功率大约是50%,符合预期。