This repository has been archived by the owner on Jul 16, 2024. It is now read-only.
想问下为什么com.alibaba.spring.boot.rsocket.broker.route.ServiceRoutingSelectorImpl里面的集合没有使用线程安全的集合类 #145
Answered
by
linux-china
huangjianqin
asked this question in
Q&A
-
Reactive新手, 这个地方没有看懂, 请教一下. |
Beta Was this translation helpful? Give feedback.
Answered by
linux-china
Sep 16, 2021
Replies: 1 comment
-
这些Collections类都是有Eclipse Collections,一些默认是thread-safe,一些不是线程安全的。 但是没有关系,这些数据的更新都是单个操作的,也就是service provider instance实例才能更新自己的数据,而且service provider实例上下线并不是在一个点的(批量),很少出现同时并发多个实例更新的情况。 这个是设计的出发点,但是可能实现方面有一些细节没有考虑到,欢迎反馈或者提bug :) |
Beta Was this translation helpful? Give feedback.
0 replies
Answer selected by
huangjianqin
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
这些Collections类都是有Eclipse Collections,一些默认是thread-safe,一些不是线程安全的。 但是没有关系,这些数据的更新都是单个操作的,也就是service provider instance实例才能更新自己的数据,而且service provider实例上下线并不是在一个点的(批量),很少出现同时并发多个实例更新的情况。
线程安全是要加锁的,但是在路由这个场景,这是不需要的,会影响性能,尤其是Broker的QPS比较大,需要进行大量的加锁操作,性能一定会收到影响的。在更新数据的时候,不加锁也没有问题,路由的数据还是能工作的,而不是说要保证数据的完全一致性,我们只需要保证路由调用到服务提供方,即便最新更新的数据没有被读取到或者被删除的实例数据被读取到,但是路由是能工作的,新上线的instance是能提供服务的,已经从路由表中删除的instance有延迟下线的特性,还是能提供进行提供服务的。
这个是设计的出发点,但是可能实现方面有一些细节没有考虑到,欢迎反馈或者提bug :)