小麦带你学服注册体系九

简介: Threadlocal学习

## ThreadLocal


在全链路跟踪框架中,Trace信息的传递功能是基于ThreadLocal的。但实际业务中可能会使用异步调用,这样就会丢失Trace信息,破坏了链路的完整性。


### InheritableThreadLocal


`InheritableThreadLocal` 是 JDK 本身自带的一种线程传递解决方案。顾名思义,由当前线程创建的线程,将会继承当前线程里 ThreadLocal 保存的值。Thread内部为InheritableThreadLocal开辟了一个单独的ThreadLocalMap。在父线程创建一个子线程的时候,会检查这个ThreadLocalMap是否为空,不为空则会浅拷贝给子线程的ThreadLocalMap。




### TransmittableThreadLocal


Transmittable ThreadLocal是阿里开源的库,继承了InheritableThreadLocal,优化了在使用线程池等会池化复用线程的情况下传递ThreadLocal的使用。简单来说,有个专门的TtlRunnable和TtlCallable包装类,用于读取原Thread的ThreadLocal对象及值并存于Runnable/Callable中,在执行run或者call方法的时候再将存于Runnable/Callable中的ThreadLocal对象和值读取出来,存入调用run或者call的线程中。




## Zipkin


Zipkin 是 Twitter 的一个开源项目,它基于 Google Dapper 实现,它致力于收集服务的定时数据,以解决微服务架构中的延迟问题,包括数据的收集、存储、查找和展现。


### Zipkin基本架构





在服务运行的过程中会产生很多链路信息,产生数据的地方可以称之为Reporter。将链路信息通过多种传输方式如HTTP,RPC,kafka消息队列等发送到Zipkin的采集器,Zipkin处理后最终将链路信息保存到存储器中。运维人员通过UI界面调用接口即可查询调用链信息。




### Zipkin核心组件



Zipkin有四大核心组件


- **Collector**


 一旦Collector采集线程获取到链路追踪数据,Zipkin就会对其进行验证、存储和索引,并调用存储接口保存数据,以便进行查找。


- **Storage**


 Zipkin Storage最初是为了在Cassandra上存储数据而构建的,因为Cassandra是可伸缩的,具有灵活的模式,并且在Twitter中大量使用。除了Cassandra,还支持支持ElasticSearch和MySQL存储,后续可能会提供第三方扩展。


- **Query Service**


 链路追踪数据被存储和索引之后,webui 可以调用query service查询任意数据帮助运维人员快速定位线上问题。query service提供了简单的json api来查找和检索数据。


- **Web UI**


 Zipkin 提供了基本查询、搜索的web界面,运维人员可以根据具体的调用链信息快速识别线上问题。

相关文章
|
4月前
|
人工智能 自然语言处理 算法
瓴羊Quick Service智能客服算法通过国家网信办深度合成服务算法备案
瓴羊Quick Service智能客服算法通过国家网信办深度合成服务算法备案
|
6月前
|
人工智能 供应链 安全
推进数据入港 宝尊与瓴羊共同构建管理品牌的“好数据”
推进数据入港 宝尊与瓴羊共同构建管理品牌的“好数据”
|
新零售 存储 供应链
严选库存中心设计实践
严选库存中心设计实践
337 0
《快递行业云上技术服务白皮书》——3. 快递业务介绍——3.3 快递业务主体流程
《快递行业云上技术服务白皮书》——3. 快递业务介绍——3.3 快递业务主体流程
109 0
|
消息中间件 NoSQL 安全
|
缓存 NoSQL Dubbo
小麦带你学服注册体系二
含金量文章,你不得不看的好文章
|
运维 监控 微服务
|
缓存 监控 负载均衡