全链路压测实战 30 讲
高楼
盾山科技 CEO,7DGroup 创始人
21053 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 38 讲
全链路压测实战 30 讲
15
15
1.0x
00:00/00:00
登录|注册

13 | 标记透传:微服务系统如何做标记透传方案选型?

你好,我是高楼。
接下来的两节课,我们会详细讲讲标记透传。这节课呢,我会带你看看,在微服务系统中如何对标记透传方案进行选型。下节课我们会进入实战,讲解如何基于微服务技术进行标记透传的落地。
在微服务系统中,服务之间可以通过各种方式和协议进行通信,而且一般链路都很长。在全链路压测的系统中,线上压测要保证压测安全且可控,不会对真实用户产生影响,也不会对线上环境造成数据的污染,我们首要解决的就是压测标记在整条链路中透传和识别的问题。
分布式系统的压测流量透传主要包含两大方面:
跨线程间的透传:能够做到跨线程间对压测标记进行传递,同时可以兼容不同的协议类型,支持对标记的存取操作;
跨服务间的透传:能够通过网络在上下游服务间进行标记传递,有点像“击鼓传花”的感觉,而且可以做到全链路双向传递。
接下来,我们分别看看这两大方面都有哪些可供选择的标记透传方案。

跨线程间的透传

我们先来看下跨线程间的透传。对于涉及多线程调用的服务来说,一个重点就是要保证压测标识在跨线程的情况下不丢失。
这个时候,我们就不得不提到本地线程专属变量 ThreadLocal 了。ThreadLocal 能够提供线程局部专属变量,这些变量和普通变量的不同之处在于,我们访问的每个变量 (通过 Get 或 Set 的方法) 的线程都有独立初始化的变量副本。ThreadLocal 将状态与线程关联起来的私有静态字段 (例如 Request ID 或 TraceID) 保存起来。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了微服务系统中的标记透传方案选型,涵盖了跨线程间的透传和跨服务间的透传两大方面。在跨线程间的透传中,介绍了 ThreadLocal、InheritableThreadLocal 和 TransmittableThreadLocal 的使用,以解决线程池中线程变量复制混乱的问题。同时,文章详细展示了如何在微服务系统中实现全链路压测标记的透传,确保压测标识在跨线程的情况下不丢失。在跨服务间的透传方面,文章探讨了作为参数传递和作为 Header 传递的方案,并深入讨论了改造 TraceId 的实现原理和具体操作步骤。此外,还介绍了 Sleuth 框架的功能和实现原理,以及如何利用 Sleuth 实现自定义 TraceId 传递。总的来说,本文通过详实的示例代码和运行结果,为读者提供了对标记透传方案的全面了解和选型参考。文章内容涵盖了多种技术方案,包括字节码增强技术和 Sleuth Baggage,以及它们的优缺点和适用场景。读者可以通过本文快速了解标记透传的背景、目标和常见方案,为自身项目的技术选型提供参考。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《全链路压测实战 30 讲》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(2)

  • 最新
  • 精选
  • Geek_e8b108
    高老师,您讲的技术实现很详细,想直观了解一下这些改造的侵入性程度,请问这些改造分别具体发生在什么层面,是开发框架、技术中台(公共服务组件-全局路由、服务治理等)、应用程序、业务逻辑代码?如果组织内存在不同开发框架技术栈,是否需要特别考虑?谢谢!

    作者回复: 看怎么设计代码结构。我们的改造是在公共服务组件、网关、应用程序里。你可以设计成一个SDK,直接使用。业务逻辑代码不用修改。

    2022-02-21
    1
  • 习惯、从不习惯
    高老师你好,我连续买了你两个课程,课程很棒,持续性在学习?如果有什么问题想问你的话?是否可以加群或者是你微信?能留联系方式嘛

    作者回复: 微信:Zee_7D

    2023-12-19归属地:北京
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部