-
Notifications
You must be signed in to change notification settings - Fork 1.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
TTL v3 project management #432
Comments
v3有没有发布的时间点? |
还没有定 😄 @mingyang66 一方面,重构/新增的内容有些多,期望想得清楚些。 谢谢关注 💕 大家如果有实际/目标的场景需求 可以提,以调整实现优先级和发布节奏。 |
OK,最近一直在关注TTL的更新 |
集成SkyWalking这部分,请问打算怎么迭代呢,是否会成为skywalking的自定义插件模式支持~ |
|
明白,感谢回复;最近在使用skywalking的多线程插件时遇到了些问题,发现如果测试应用使用了自定义加载器会导致切入异常,所以看到了TTL,有想用TTL替换skywalking中的多线程插件的想法 |
嗯嗯 ❤️ @haoyongdong 这个所涉及的「支持运行时加载TTL Agent #169」(即使只用在测试场景),
|
SkyWalking目前在SpringCloudGateway中的问题较多,如果TTL能成为SW的上下文进程内容器就好了 |
大佬,能简单说下实现的的思路吗?我们自己内部也在尝试 |
@cxntsh 实现的的思路,在上面 issue 的正文中,有一些说明:
|
hi @oldratlee !我正在尝试基于 master 实现如下功能:
但是当我在执行测试的时候发现代码不能正确的运行,请问 master 分支代码当前是处于不可正常运行状态吗? |
大佬,请问这部分的实现现在有代码示例了吗? 我想通过使用ttl代替skywalking中的threadlocal作为上下文传递, |
@oldratlee 大佬,估计什么时候能完成kotlin协程的支持。现在kotin协程在后端用的越来越多啦!感谢大佬! |
嗯嗯,
|
关于
TransmittableThreadLocal(TTL)
v3新功能推荐都在
v3
中提供,原因:TTL
域的核心问题(包含了可扩展的能力、不包含扩展的实现)在v2
解决了,并且稳定;TTL
核心功能,v2
已经是开放的可以用自己的实现来替代最核心
TransmittableThreadLocal
类实现v2
聚焦v3
升级 成为可能。v2
老版本的 并行大维护工作 与 保持兼容性的历史包袱(如不优或过度的设计、对低版本Java
的支持),从而在v3
聚焦输出有价值的工作。v3
作为在大版本升级,可以是不兼容升级TTL v2
的兼容包(即ttl2-compatible 3.x
模块),以简化用户的升级过程v3
有价值的新功能可以引导大家从v2
升级、试用/使用、优化v3
。下面是
v3
的工作项列表及其进展。TTL core
API 不兼容升级
TransmittableThreadLocal#copy
方法名改成transmiteeValue
copy
是容易想到和理解这个过程与行为了。 😂TTL v2
中,这个方法被命名成了copy
的原因。transmiteeValue
命名也与JDK
的InheritableThreadLocal.childValue()
方法名有了一致性。TransmittableThreadLocal
的before/after execute
方法TransmittableThreadLocal
类是TTL
的用户API
,要尽量简化,包含的是核心功能(非外围/可附加的功能)Transmitter
支持before/after execute
回调的注册Transmitter
是TTL
的开发者API
;开发者角色可以关注生命周期这样完备也复杂的问题TTL Transmitter
上提到根包下,成为子包transmitter
TransmittableThreadLocal
类文件越写越长…TTL Transmitter
的CRR
方法 返回具体类型,而不是Object
DisableInheritableThreadFactory
接口DisableInheritableForkJoinWorkerThreadFactory
API
v2
因为开关参数导致工具方法的个数太多了ThreadLocalTransmitRegistry
(9f19a97)TtlTimerTask
, makeAPI
more concise (83c3be3)threadpool
toexecutor
(72c6b69)TtlUnwrap
类,该类的方法合并到TtlWrappers
类 (5b68280)在
v2
中这些工具方法放在TtlUnwrap
类中是为了支持Java 6
;v3
支持Java 8+
,不再需要这么做了。TtlForkJoinPoolHelper
类,该类的方法合并到TtlExecutors
类 (5b68280)原因同上
v2
中@Deprecated
的类与方法: (5b68280)com.alibaba.ttl.TtlEnhanced
com.alibaba.ttl.TtlWrappers#wrap(...)
Transmittance/CRR
分离成独立包(成为一个小框架)transmitter
、transmittee
、CRR
TTL
)。TransmittableThreadLocal
也只是CRR
的一个普通使用方TTL Transmitter
类(TTL
的使用方)仍以static
方法的方式暴露TTL CRR
操作CRR
作为TTL
开发扩展的下层API
,与TTL
用户API
分离开。com.alibaba.crr
包下com.alibaba.ttl3
包下,在包名上也体现出了CRR
与TTL
的独立性。TransmittableThreadLocal
创建、持有并注册TtlTransmittee
(静态实例)。TTL Transmitter
实例化TtlTransmittee
并持有。Transmitter
支持before/after execute
回调及其注册可以支持
TTL v2
的已有功能/v3
中去除的功能(TransmittableThreadLocal
的before/after execute
方法)Transmitter
支持before/after execute
回调方法的调用是一致性的(4ba3dd6)CrrTransmitCallback
实例:beforeX
就一定要收到afterX
xReplay
就一定要收到xRestore
TTL Agent
✨🆕
TTL Agent
模块化Agent Jar
与API Jar
API
包大小很小,用户运行时依赖不excludeTTL
包而冗余了也成本小Agent
包支持不同的打包格式,不同场景使用友好shade
依赖的TTL Agent
包repackage
/shade
依赖TTL Agent
到自己的Agent
包中,并且共享一份shade
的依赖(如字节码库)byte-buddy
Agent
打包格式TTL Agent
的扩展机制可以加载应用中的类增强的逻辑实现,但不需要三方提供
Java Agent
实现;从而简化三方提供
Agent
的类增强逻能力。TTL
的集成往往涉及API
与Agent
两者的支持。Agent
的扩展机制✨
TTL Agent
支持运行时加载生效TTL Agent
支持运行时加载生效ConcurrentWeakMap
/ConcurrentWeakHashMap
(ade56ea)Spring
中有ConcurrentWeakHashMap
实现ConcurrentWeakMap
,实现内部使用,不需要复杂化ConcurrentWeakMap
存储类实例与capture
的关联 替代 在已有的类上新增capture
字段Agent
可以在运行时增强已有的类;GC
负担,考虑只在运行时加载TTL Agent
时使用这个方案。Agent
开发相关的文档到支持运行时加载TTL Agent(aka. Agent Attach使用方式 ) #169
配置体验优化
-D properties
来配置TTL Agent
,而不是Agent
参数。Agent
参数写起来读起来繁琐易错。Agent
字节码实现byte-buddy
实现测试
v2
单元测试迁移到v3
TTL core
模块TTL Agent
模块注意:原则上,
v2
的测试代码一行不能改,以确保尽量发现兼容包的v2
功能break。文档
markdown
文档中的文件链接,因为模块移动了目录v3
文档中去除v2
的版本新功能说明,v3
中v2
功能都一开始就有的ttl2-compatible
的实现成代理到TTL3
v2
的相关方法(如check
)中,兼容逻辑添加通过
v3
实现类来判断的兼容逻辑@Deprecated
及其说明v3
、v3
的用法、v3
与v2
不兼容的内容生态集成支持
往往涉及
API
与Agent
两者的支持🆕✨
Kotlin
支持Kotlin
语言的一等公民支持 First-class support for Kotlin language #119kotlin coroutine
支持 the kotlin coroutine integration #118API
支持Agent
支持🆕✨
Spring/SpringBoot
集成wrapper
支持Spring
,集成Spring Async Executors
TTL支持Spring的ThreadPoolTaskExecutor,如提供getTtlAsyncTaskExecutor #173Agent
但配置更简单API
支持。参考项目Dreamroute/ttl-spring-boot-starter
Spring/SpringBoot
注解,如@EnableTtlExecutor
,@SkipTttlWrapper
Agent
支持session cache
的Spring
支持Misc
待细化展开
Spring Reactor
#499RxJava
hystrix
VertX
SkyWalking
AKKA
优化(如性能)
TtlAttachments
没有使用时不创建,比如在TtlRunnable
中的使用Throwable
,只捕捉NonFatal Exception
(8eb51d4)scala.util.control
expected size
to initializehash map
instead ofcapacity
(8590e25)equals
/hashCode
implementations of TTL wrappers (4f18607)ttl-bom
(d573053)The text was updated successfully, but these errors were encountered: