-
Notifications
You must be signed in to change notification settings - Fork 1.4k
如何解决蓝绿灰度发布失效问题
如果遇到在蓝绿灰度发布执行过程中,逻辑并没有按照规则策略的预期去执行,那么有如下方式可供使用
适用于测试环境或者开发环境
具体用法,请参考
- Github Wiki :全链路自动化模拟流程测试
- Gitee Wiki :全链路自动化模拟流程测试
适用于生产环境
具体用法,请参考
- Github Wiki :全链路自动化流量侦测测试
- Gitee Wiki :全链路自动化流量侦测测试
Debug辅助监控只是通过日志方式输出,便于开发人员在IDE上调试,在生产环境下不建议开启。有如下两种方式,效果等同,如果两种方式都配置且值互斥,以第一种方式为准
对于Debug辅助监控功能的开启和关闭,需要通过如下参数做控制
-Dstrategy.debug=true
对于Debug辅助监控功能的开启和关闭,需要通过如下开关做控制
# 启动和关闭监控,一旦关闭,调用链和日志输出都将关闭。缺失则默认为false
spring.application.strategy.monitor.enabled=true
# 启动和关闭Header传递的Debug日志打印,注意:每调用一次都会打印一次,会对性能有所影响,建议压测环境和生产环境关闭。缺失则默认为false
spring.application.strategy.rest.intercept.debug.enabled=true
# 启动和关闭Debug日志打印,注意:每调用一次都会打印一次,会对性能有所影响,建议压测环境和生产环境关闭。缺失则默认为false
spring.application.strategy.logger.debug.enabled=true
① 网关端和服务端自身蓝绿灰度埋点Debug辅助监控
--------------- Strategy Logger Information ----------------
trace-id=dade3982ae65e9e1
span-id=997e31021e9fce20
n-d-service-group=discovery-guide-group
n-d-service-type=service
n-d-service-id=discovery-guide-service-a
n-d-service-address=172.27.208.1:3001
n-d-service-version=1.0
n-d-service-region=dev
n-d-service-env=env1
n-d-service-zone=zone1
n-d-version={"discovery-guide-service-a":"1.0", "discovery-guide-service-b":"1.0"}
mobile=13812345678
user=
------------------------------------------------------------
② 服务端Feign、RestTemplate或者WebClient拦截输入的蓝绿灰度埋点Debug辅助监控
--------- Feign Intercept Input Header Information ---------
n-d-service-group=discovery-guide-group
n-d-version={"discovery-guide-service-a":"1.0", "discovery-guide-service-b":"1.0"}
n-d-service-type=gateway
n-d-service-id=discovery-guide-zuul
n-d-service-env=default
mobile=13812345678
n-d-service-region=default
n-d-service-zone=default
n-d-service-address=172.27.208.1:5002
n-d-service-version=1.0
------------------------------------------------------------
③ 服务端Feign、RestTemplate或者WebClient调用拦截输出的蓝绿灰度埋点Debug辅助监控
-------- Feign Intercept Output Header Information ---------
mobile=[13812345678]
n-d-service-address=[172.27.208.1:3001]
n-d-service-env=[env1]
n-d-service-group=[discovery-guide-group]
n-d-service-id=[discovery-guide-service-a]
n-d-service-region=[dev]
n-d-service-type=[service]
n-d-service-version=[1.0]
n-d-service-zone=[zone1]
n-d-version=[{"discovery-guide-service-a":"1.0", "discovery-guide-service-b":"1.0"}]
------------------------------------------------------------
排除引用配置不正确的因素之外,蓝绿灰度埋点失效问题一般都是服务中带有异步调用的场景引起的
网关 -> A服务 -> B服务的调用链,假设A服务的日志中,Input Header Information
中n-d-version
带有Json值,而Output Header Information
不带有Json值,说明A服务收到了网关传递过来的Header,但是在转发中丢失了,可能的原因和解决方案总结如下:
① Spring Cloud H版(或者以下)引入了Hystrix插件,并且启用了线程池隔离模式,转发过程中,因为线程切换,导致Header转发丢失。通过
http://nepxion.com/discovery的异步场景下DiscoveryAgent解决方案
或者
http://nepxion.com/discovery的异步场景下Hystrix线程池隔离解决方案
来解决
② Spring Cloud 2020版(或者以上)的负载均衡器是基于WebFlux技术的,响应式方式也会触发线程切换,导致Header转发丢失。通过
http://nepxion.com/discovery的异步场景下DiscoveryAgent解决方案
来解决
③ 业务代码里,Feign或者RestTemplate调用代码放在异步场景中,因为线程切换,导致Header转发丢失。通过
http://nepxion.com/discovery的异步场景下DiscoveryAgent解决方案
来解决
2017-2050 ©Nepxion Studio Apache License
- 如何对接Foundation基础平台实施收敛集成
- 如何对接DevOps运维平台实施流量管控
- 如何部署对接DevOps运维平台的控制台
- 如何对接DevOps运维平台执行半自动化蓝绿灰度发布
- 如何使用DevOps运维平台对接的公共接口
- 如何设计全链路智能编排高级蓝绿灰度发布界面
- 如何实现Windows10下GraalVM本地镜像化
- 蓝绿灰度发布
- 流量染色
- 隔离路由
- 故障转移
- 多活单元化
- 限流熔断降级权限
- 网关动态路由
- 可观测监控
- 如何操作配置中心
- 如何理解框架开关配置
- 如何理解规则策略里内容格式配置
- 如何操作网关和服务的蓝绿灰度发布规则策略配置
- 如何操作网关动态路由规则策略配置
- 如何操作Sentinel规则策略配置
- 如何实施规则策略配置和业务配置在配置中心的合并和分离
- 如何理解自动扫描目录
- 如何自定义流量管控
- 如何自定义实现组合式的防护
- 如何自定义高级配置订阅功能
- 如何自定义订阅框架事件
- 如何自定义解决业务自身跨线程上下文切换的问题
- 如何自定义重用框架内置的Swagger模块
- 如何自定义Header全链路传递
- 如何遵循Nepxion Discovery网关标准实现对其它网关全链路流量管控的二次开发
- 如何遵循Nepxion Discovery服务标准实现对消息队列等其它中间件全链路流量管控的二次开发