Skip to content
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
Discussion options

You must be logged in to vote

这些Collections类都是有Eclipse Collections,一些默认是thread-safe,一些不是线程安全的。 但是没有关系,这些数据的更新都是单个操作的,也就是service provider instance实例才能更新自己的数据,而且service provider实例上下线并不是在一个点的(批量),很少出现同时并发多个实例更新的情况。
线程安全是要加锁的,但是在路由这个场景,这是不需要的,会影响性能,尤其是Broker的QPS比较大,需要进行大量的加锁操作,性能一定会收到影响的。在更新数据的时候,不加锁也没有问题,路由的数据还是能工作的,而不是说要保证数据的完全一致性,我们只需要保证路由调用到服务提供方,即便最新更新的数据没有被读取到或者被删除的实例数据被读取到,但是路由是能工作的,新上线的instance是能提供服务的,已经从路由表中删除的instance有延迟下线的特性,还是能提供进行提供服务的。

这个是设计的出发点,但是可能实现方面有一些细节没有考虑到,欢迎反馈或者提bug :)

Replies: 1 comment

Comment options

You must be logged in to vote
0 replies
Answer selected by huangjianqin
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Category
Q&A
Labels
None yet
2 participants