`
m635674608
  • 浏览: 5043637 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

分布式追踪TTL 需求场景

 
阅读更多

需求场景

ThreadLocal的需求场景即是TTL的潜在需求场景,如果你的业务需要『在使用线程池等会缓存线程的组件情况下传递ThreadLocal』则是TTL目标场景。

下面是几个典型场景例子。

1. 分布式跟踪系统

关于『分布式跟踪系统』可以了解一下GoogleDapper(介绍的论文:中文| 英文)。分布式跟踪系统作为基础设施,不会限制『使用线程池等会缓存线程的组件』,并期望对业务逻辑尽可能的透明。

分布式跟踪系统的实现的示意Demo参见DistributedTracerUseDemo.java

PS: 多谢 @wyzssw 对分布式追踪系统场景说明交流和实现上讨论建议:

2. 应用容器或上层框架跨应用代码给下层SDK传递信息

举个具体的业务场景,在App EnginePAAS)上会运行由应用提供商提供的应用(SAAS模式)。多个SAAS用户购买并使用这个应用(即SAAS应用)。SAAS应用往往是一个实例为多个SAAS用户提供服务。
# 另一种模式是:SAAS用户使用完全独立一个SAAS应用,包含独立应用实例及其后的数据源(如DB、缓存,etc)。

需要避免的SAAS应用拿到多个SAAS用户的数据。一个解决方法是处理过程关联好一个SAAS用户的上下文,在上下文中应用只能处理(读/写)这个SAAS用户的数据。请求由SAAS用户发起(如从Web请求进入App Engine),App Engine可以知道是从哪个SAAS用户,在Web请求时在上下文中设置好SAAS用户ID。应用处理数据(DBWeb、消息 etc.)是通过App Engine提供的服务SDK来完成。当应用处理数据时,SDK检查数据所属的SAAS用户是否和上下文中的SAAS用户ID一致,如果不一致则拒绝数据的读写。

应用代码会使用线程池,并且这样的使用是正常的业务需求。SAAS用户ID的从要App Engine传递到下层SDK,要支持这样的用法。

上面场景使用TTL的整体构架

构架图

构架涉及3个角色:容器、用户应用、SDK

整体流程:

  1. 请求进入PAAS容器,提取上下文信息并设置好上下文。
  2. 进入用户应用处理业务,业务调用SDK(如DB、消息、etc)。
    用户应用会使用线程池,所以调用SDK的线程可能不是请求的线程。
  3. 进入SDK处理。
    提取上下文的信息,决定是否符合拒绝处理。

整个过程中,上下文的传递 对于 用户应用代码 期望是透明的。

3. 日志收集记录系统上下文

由于不限制用户应用使用线程池,系统的上下文需要能跨线程的传递,且不影响应用代码。

Log4j2 MDCTTL集成

Log4j2通过Thread Context提供了Mapped Diagnostic ContextMDC,诊断上下文)的功能,通过ThreadLocal/InheritableThreadLocal实现上下文传递。

Thread Context文档中提到了在使用线程池等会缓存线程的组件(如Executors)时有问题,需要提供一个机制方案:

The Stack and the Map are managed per thread and are based on ThreadLocal by default. The Map can be configured to use an InheritableThreadLocal by setting system property isThreadContextMapInheritable to "true". When configured this way, the contents of the Map will be passed to child threads. However, as discussed in the Executors class and in other cases where thread pooling is utilized, the ThreadContext may not always be automatically passed to worker threads. In those cases the pooling mechanism should provide a means for doing so. The getContext() and cloneStack() methods can be used to obtain copies of the Map and Stack respectively.

即是TTL要解决的问题,提供Log4j2 MDCTTL集成,详见工程log4j2-ttl-thread-context-map

PS: 多谢 @bwzhang2011 和 @wuwen5 对日志场景说明交流和实现上讨论建议:

 

https://github.com/alibaba/transmittable-thread-local/blob/master/docs/requirement-scenario.md

分享到:
评论

相关推荐

    Apache Cassandra是一套开源分布式Key-Value存储系统

    作为一款Key-Value存储系统,Cassandra在设计时就考虑了大规模数据存储和处理的需求,因此它非常适合那些需要处理PB级别数据、对数据可用性和读写性能有高要求的应用场景。 在Cassandra的设计哲学中,它强调了数据...

    2-4+网易大数据体系之时序数据技术.pdf

    7. **APM(Application Performance Monitoring)服务**:监控应用的调用次数、错误率,追踪慢加载、慢SQL,以及异常会话,确保应用的高效运行。 8. **工业互联网服务**:在工业场景中,收集和分析设备运行数据,...

    springboot部署系统(部署+缓存管理+业务降级+应用监控).zip

    另外,可以配合Prometheus和Grafana进行度量数据的收集和展示,或者使用Spring Cloud Sleuth和Zipkin进行分布式追踪,帮助开发者分析调用链路,找出性能瓶颈。 【源码学习】 对于"基于java的程序源码及相关资料",...

    redis入门与提升

    - 持久化:为了防止数据丢失,Redis提供了RDB(快照)和AOF(Append Only File)两种持久化方式,可以根据需求选择合适的策略。 - 主从复制:通过复制,可以创建一个或多个从服务器,实现读写分离,提高系统可用性...

    MQ java 编程指南

    最后,书中会提供实战案例,包括电商订单处理、用户行为追踪以及实时数据分析等场景,帮助读者将理论知识应用于实际项目,解决具体问题。 总的来说,《MQ Java编程指南》是一本全面且深入的教程,它不仅介绍了MQ的...

    RabbitMQ从入门到进阶

    RabbitMQ提供了多种交换器类型,如direct(点对点)、topic(主题)、fanout(广播)和headers(基于头部),满足不同场景的需求。此外,还有死信队列、延迟队列等高级特性,以应对更复杂的业务需求。 总之,...

    Hadoop;学习资料

    MongoDB的核心特性包括动态模式、复制集以实现高可用性、分片技术来扩展存储和处理能力,以及TTL(Time To Live)索引实现自动过期数据。 学习MongoDB,你需要熟悉它的CRUD(创建、读取、更新、删除)操作,以及...

    Python库 | icmplib-1.2.2-py3-none-any.whl

    2. **Traceroute功能**:类似于Linux命令行中的traceroute,icmplib也实现了这一功能,用于追踪数据包在网络中从源到目的地经过的路由器路径。这对于分析网络延迟、检测路由问题十分有用。 3. **自定义ICMP报文**:...

    01-2022年北京大数据面试题汇总.pdf

    - 常见的状态缩减方式包括定时清理旧状态、使用状态后端如RocksDB的TTL特性等。 - 旁路缓存(Side Input)虽然不能直接保证端到端一致性,但可以在一定程度上提高系统的响应速度和效率。 ### 二、ClickHouse ...

    华为内部网络工具(全能网络IP类调试:+IPOP)V4.02+绿色版

    3. **多平台支持**:虽然名为“华为内部网络工具”,但IPOP实际上支持跨平台运行,可以在Windows、Linux、Mac OS等多种操作系统上使用,满足不同工作场景的需求。 4. **绿色版特性**:作为绿色版软件,IPOP无需安装...

    cassandra cql 3.1

    Apache Cassandra是一个开源的、分布式的NoSQL数据库管理系统,特别适用于需要处理大量数据且要求高可用性的应用场景。CQL(Cassandra Query Language)是Cassandra的查询语言,它类似于传统的SQL,但是为了适应...

    EWRF-302系列2UA型无线数传模块简介

    1. **接口方式**:支持232/485/TTL串口,数据格式可选8N1/8E1/8O1,方便与不同设备连接。 2. **接收灵敏度**:高度接收灵敏度使得在视距下的可靠传输距离可达1200米。 3. **调制方式**:采用FSK调制,支持OOK/ASK...

    Hadoop的全部配置

    Hadoop作为分布式计算框架,在配置方面具有相当的灵活性与复杂性。根据提供的信息,“Hadoop的全部配置”这一标题暗示着文章将覆盖Hadoop配置的所有方面,包括但不限于核心配置文件(如`core-site.xml`、`hdfs-site....

    华为网络技术大赛模拟题答案及解析.pdf

    13. **Tracert(跟踪路由)**:Tracert使用UDP封装跟踪数据,通过TTL字段和ICMP错误消息来追踪数据包的路径。 14. **Trunk端口**:Trunk端口在交换机上可以同时发送带有VLAN标签和未标签的数据帧,允许数据在不同...

    RabbitMQ系统升级相关1

    Mnesia是Erlang语言的标准分布式数据库,RabbitMQ基于它来存储队列、交换机、绑定等信息。 在升级过程中,以下几个关键步骤是必须关注的: 1. **remove_user_scope**:这可能涉及到用户权限管理的更新,移除旧的...

    2022年上半年网络工程师 综合知识

    **解析**: Tracert命令发送的ICMP消息类型为Type=8(Code=0),并且通过逐步增加TTL值的方式来追踪路径上的路由器。因此,当需要到达第三跳的路由器时,IP报文的TTL字段应该设置为3。正确答案为 **B. ICMP消息的Type=8...

    华为网络技术大赛模拟题答案和解析

    通过设置不同的TTL值,Tracert可以逐跳追踪数据包到达目的地的路径。 - **应用**:Tracert常用于网络故障排查中,帮助管理员了解数据包在网络中的具体路径,从而定位可能导致问题的路由器或链路。 #### Trunk端口的...

    rabbitmq面试题.pdf

    - **定义:** RabbitMQ是一款开源的消息代理软件,基于AMQP 0-9-1协议标准构建,主要用于在分布式系统之间进行消息传递。 - **工作原理:** - 生产者将消息发送到交换器(Exchange)。 - 交换器根据规则(如路由键...

    IT系统工程师面试题

    traceroute通过发送具有逐渐增加的TTL(Time To Live)值的ICMP报文,追踪数据包到达目标主机所经过的路径。当TTL过期时,中间路由器会返回一个ICMP超时报文,从而得知数据包经过的每一跳。 ### TCP三次握手过程 1...

Global site tag (gtag.js) - Google Analytics