13 | 标记透传:微服务系统如何做标记透传方案选型?
高楼
你好,我是高楼。
接下来的两节课,我们会详细讲讲标记透传。这节课呢,我会带你看看,在微服务系统中如何对标记透传方案进行选型。下节课我们会进入实战,讲解如何基于微服务技术进行标记透传的落地。
在微服务系统中,服务之间可以通过各种方式和协议进行通信,而且一般链路都很长。在全链路压测的系统中,线上压测要保证压测安全且可控,不会对真实用户产生影响,也不会对线上环境造成数据的污染,我们首要解决的就是压测标记在整条链路中透传和识别的问题。
分布式系统的压测流量透传主要包含两大方面:
跨线程间的透传:能够做到跨线程间对压测标记进行传递,同时可以兼容不同的协议类型,支持对标记的存取操作;
跨服务间的透传:能够通过网络在上下游服务间进行标记传递,有点像“击鼓传花”的感觉,而且可以做到全链路双向传递。
接下来,我们分别看看这两大方面都有哪些可供选择的标记透传方案。
跨线程间的透传
我们先来看下跨线程间的透传。对于涉及多线程调用的服务来说,一个重点就是要保证压测标识在跨线程的情况下不丢失。
这个时候,我们就不得不提到本地线程专属变量 ThreadLocal 了。ThreadLocal 能够提供线程局部专属变量,这些变量和普通变量的不同之处在于,我们访问的每个变量 (通过 Get 或 Set 的方法) 的线程都有独立初始化的变量副本。ThreadLocal 将状态与线程关联起来的私有静态字段 (例如 Request ID 或 TraceID) 保存起来。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了微服务系统中的标记透传方案选型,涵盖了跨线程间的透传和跨服务间的透传两大方面。在跨线程间的透传中,介绍了 ThreadLocal、InheritableThreadLocal 和 TransmittableThreadLocal 的使用,以解决线程池中线程变量复制混乱的问题。同时,文章详细展示了如何在微服务系统中实现全链路压测标记的透传,确保压测标识在跨线程的情况下不丢失。在跨服务间的透传方面,文章探讨了作为参数传递和作为 Header 传递的方案,并深入讨论了改造 TraceId 的实现原理和具体操作步骤。此外,还介绍了 Sleuth 框架的功能和实现原理,以及如何利用 Sleuth 实现自定义 TraceId 传递。总的来说,本文通过详实的示例代码和运行结果,为读者提供了对标记透传方案的全面了解和选型参考。文章内容涵盖了多种技术方案,包括字节码增强技术和 Sleuth Baggage,以及它们的优缺点和适用场景。读者可以通过本文快速了解标记透传的背景、目标和常见方案,为自身项目的技术选型提供参考。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《全链路压测实战 30 讲》,新⼈⾸单¥59
《全链路压测实战 30 讲》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(2)
- 最新
- 精选
- Geek_e8b108高老师,您讲的技术实现很详细,想直观了解一下这些改造的侵入性程度,请问这些改造分别具体发生在什么层面,是开发框架、技术中台(公共服务组件-全局路由、服务治理等)、应用程序、业务逻辑代码?如果组织内存在不同开发框架技术栈,是否需要特别考虑?谢谢!
作者回复: 看怎么设计代码结构。我们的改造是在公共服务组件、网关、应用程序里。你可以设计成一个SDK,直接使用。业务逻辑代码不用修改。
2022-02-211 - 习惯、从不习惯高老师你好,我连续买了你两个课程,课程很棒,持续性在学习?如果有什么问题想问你的话?是否可以加群或者是你微信?能留联系方式嘛
作者回复: 微信:Zee_7D
2023-12-19归属地:北京
收起评论