Skip to content

如何解决蓝绿灰度发布失效问题

HaojunRen edited this page Aug 14, 2024 · 13 revisions

如果遇到在蓝绿灰度发布执行过程中,逻辑并没有按照规则策略的预期去执行,那么有如下方式可供使用

全链路蓝绿灰度发布自动化模拟流程测试

适用于测试环境或者开发环境

具体用法,请参考

全链路蓝绿灰度发布自动化流量侦测测试

适用于生产环境

具体用法,请参考

全链路蓝绿灰度埋点Debug辅助监控

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 Informationn-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

           

Total visits

讲义篇

集成篇

概念篇

实践篇

功能篇

配置篇

扩展篇

测试篇

升级篇

贡献篇

Clone this wiki locally