解决Java异步场景下丢失线程上下文的方法

博客内容讲述了在高并发场景下,程序性能下降的问题,以及如何通过引入微服务、多线程等方案来提升性能。然而,这些方案带来了上下文丢失的挑战,特别是在使用ThreadLocal时。NepxionDiscoveryAgent被提出作为一种解决方案,声称能解决JAVA异步场景下的上下文丢失问题,并支持全链路蓝绿灰度发布,包括多种复杂发布场景和流量管理。此外,该框架还提供了丰富的监控、隔离、限流和熔断等功能,以增强微服务的稳定性和可靠性。

背景

你不是做单纯的内部管理系统。

只是服务着内部这群人。

你的用户是整个网络上冲浪的人。

他们向你扑面而来,这个时候使用常规的操作手法你会发现程序变得越来越慢,

于是,你不停的增加硬件,扩大带宽...

但是你发现,程序还是不得不变慢的现实情况摆在了你的桌上。

于是,微服务、多线程等各种高性能方案就不得不加入到了解放大军中。

但是每个新加入的成员,引入的次生风险也是同步存在着....

例如,我们今天谈到的上下文丢失的情况。

问题出现的原因场景

大家都在追求高性能,所以很多底层的东西都是共用的,例如ThreadLocal。

你用一直爽,官方、第三方也在用着它...

当你在代码中使用高性能的异步解决方案时,你会发现一个不得不面对的现实问题:

web上下文丢失了.... 

web上下文丢失了....

web上下文丢失了....

然后一句国粹从你口中脱口而出....

但是为了碎银几两,你又不得不继续苦灯奋战...

web上下文丢失的场景分为多种情况:

1、子线程情况,需要重置上下文..

2、@Async注解导致的异步情况

3、Future计算下的情况

... ..

你发现问题场景太多,总有很多意想不到的情况在等着你。

特别是你还带着一帮不太靠谱的小弟的情况下,出了问题还要帮他们搽搽屁股。

这个时候你会感觉非常的疲惫...

 或许这个时候,它能帮到你

Nepxion Discovery Agent 

Nepxion Discovery Agent 号称能解决一切JAVA异步场景下上下文丢失的情况。

Discovery【探索】微服务框架,基于Spring Cloud & Spring Cloud Alibaba,Discovery服务注册发现、Ribbon负载均衡、Feign和RestTemplate调用、Spring Cloud Gateway和Zuul过滤等组件全方位增强的企业级微服务开源解决方案,更贴近企业级需求,更具有企业级的插件引入、开箱即用特征

官方介绍能够解决以下面临的疑难杂症:

① 微服务框架支持的基本功能

  • 支持阿里巴巴Spring Cloud Alibaba中间件生态圈
  • 支持阿里巴巴Nacos、Eureka、Consul和Zookeeper四个服务注册发现中心
  • 支持阿里巴巴Nacos、携程Apollo、Redis和Zookeeper四个远程配置中心
  • 支持阿里巴巴Sentinel和Hystrix两个熔断限流降级权限中间件
  • 支持OpenTracing和OpenTelemetry规范下的调用链中间件,Jaeger、SkyWalking和Zipkin等
  • 支持Prometheus Micrometer和Spring Boot Admin两个指标中间件
  • 支持Java Agent解决异步跨线程ThreadLocal上下文传递
  • 支持Spring Spel解决蓝绿灰度参数的驱动逻辑
  • 支持Spring Matcher解决元数据匹配的通配逻辑
  • 支持Spring Cloud Gateway、Zuul网关和微服务三大模块的蓝绿灰度发布等一系列功能
  • 支持和兼容Spring Cloud Edgware版、Finchley版、Greenwich版和Hoxton版

② 微服务框架支持的应用功能

  • 全链路蓝绿灰度发布

    • 全链路版本、区域、 IP地址和端口匹配蓝绿发布
    • 全链路版本、区域、 IP地址和端口权重灰度发布
    • 全链路蓝 | 绿 | 兜底、蓝 | 兜底的蓝绿路由类型
    • 全链路稳定、灰度的灰度路由类型
    • 全链路网关、服务端到端混合蓝绿灰度发布
    • 全链路域网关、非域网关部署
    • 全链路条件驱动、非条件驱动
    • 全链路前端触发后端蓝绿灰度发布
    • 全局订阅式蓝绿灰度发布
    • 全链路自定义网关、服务的过滤器、负载均衡策略类触发蓝绿灰度发布
    • 全链路动态变更元数据的蓝绿灰度发布
    • 全链路Header、Parameter、Cookie、域名、RPC Method等参数化规则策略驱动
    • 全链路本地和远程、局部和全局无参数化规则策略驱动
    • 全链路条件表达式、通配表达式支持
    • 全链路内置Header,支持定时Job的服务调用蓝绿灰度发布
  • 全链路蓝绿灰度发布编排建模和流量侦测

    • 全链路蓝绿发布编排建模
    • 全链路灰度发布编排建模
    • 全链路蓝绿发布流量侦测
    • 全链路灰度发布流量侦测
    • 全链路蓝绿灰度发布混合流量侦测
  • 全链路蓝绿灰度发布容灾

    • 发布失败下的版本故障转移
    • 并行发布下的版本偏好
  • 服务下线场景下全链路蓝绿灰度发布,实时性的流量绝对无损

    • 全局唯一ID屏蔽
    • IP地址和端口屏蔽
  • 异步场景下全链路蓝绿灰度发布

    • 异步跨线程Agent插件
    • Hystrix线程池隔离插件
  • 全链路数据库和消息队列蓝绿发布

    • 基于多Datasource的数据库蓝绿发布
    • 基于多Queue的消息队列蓝绿发布
  • 全链路规则策略推送

    • 基于远程配置中心的规则策略订阅推送
    • 基于Swagger和Rest的规则策略推送
    • 基于图形化桌面端和Web端的规则策略推送
  • 全链路环境隔离和路由

    • 全链路环境隔离
    • 全链路环境路由
  • 全链路可用区亲和性隔离和路由

    • 全链路可用区亲和性隔离
    • 全链路可用区亲和性路由
  • 全链路服务隔离和准入

    • 消费端服务隔离
    • 提供端服务隔离
    • 注册发现隔离和准入
  • 全链路服务限流熔断降级权限

    • Sentinel基于服务名的防护
    • Sentinel基于组的防护
    • Sentinel基于版本的防护
    • Sentinel基于区域的防护
    • Sentinel基于环境的防护
    • Sentinel基于可用区的防护
    • Sentinel基于IP地址和端口的防护
    • Sentinel自定义Header、Parameter、Cookie的防护
    • Sentinel自定义业务参数的防护
    • Sentinel自定义组合式的防护
  • 全链路监控

    • 蓝绿灰度埋点和熔断埋点的调用链监控
    • 蓝绿灰度埋点和熔断埋点的日志监控
  • 全链路服务侧注解

  • 全链路服务侧API权限

  • 元数据流量染色

    • Git插件自动化的元数据流量染色
    • 服务名前缀的元数据流量染色
    • 运维平台参数化的元数据流量染色
    • 注册中心动态化的元数据流量染色
    • 用户自定义的元数据流量染色

 根据官方的解释来看,基本上这些问题都没了,还能支持灰度发布。相信你的生活可以简单一些了。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沛哥儿

如果你觉得有用请推荐给更多的人

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值