shardingsphered 线程安全问题示例分析
shardingsphere
shardingsphere 版本 3.1.0 ,也是目前的最新的正式版,项目并发量很高很笨重(启动较慢),且使用了按天分表策略,在使用 shardingsphere 的过程中发现其存在分表策略的线程安全问题,会导致分表策略没有执行,直接查询的没有分表策略的逻辑表。
原因:
io.shardingsphere.core.parsing.antlr.extractor.impl.FromWhereExtractor
实现类定义
public final class FromWhereExtractor implements OptionalSQLSegmentExtractor { private final TableNameExtractor tableNameExtractor = new TableNameExtractor(); private PredicateExtractor predicateSegmentExtractor; ... public Optional<FromWhereSegment> extract(final ParserRuleContext ancestorNode, final ParserRuleContext rootNode) { ... predicateSegmentExtractor = new PredicateExtractor(result.getTableAliases()); ... } ...
这个地方 predicateSegmentExtractor
是有线程安全问题的。
并发量高的时候,predicateSegmentExtractor 成为竞争资源。
现象分析
这导致的现象是:
应用启动后分表策略不起效果,且是随机性的,假设有 20 个应用节点,应用重启之后,其中会有一个或者少量节点会出现分表策略无效,查询不到结果,再针对这个节点进行重启就会恢复正常,随机性极高。
不仅仅是我们遇到这个问题,有别的研发公司也遇到过这种问题:
https://github.com/apache/shardingsphere/issues/1967
以上就是shardingsphered 线程安全问题示例分析的详细内容,更多关于shardingsphered 线程安全的资料请关注脚本之家其它相关文章!
相关文章
SpringBoot集成ElasticSearch(ES)实现全文搜索功能
Elasticsearch是一个开源的分布式搜索和分析引擎,它被设计用于处理大规模数据集,它提供了一个分布式多用户能力的全文搜索引擎,本文将给大家介绍SpringBoot集成ElasticSearch(ES)实现全文搜索功能,需要的朋友可以参考下2024-02-02maven导入本地仓库jar包,报:Could not find artifact的解决
这篇文章主要介绍了maven导入本地仓库jar包,报:Could not find artifact的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-03-03SPRINGBOOT读取PROPERTIES配置文件数据过程详解
这篇文章主要介绍了SPRINGBOOT读取PROPERTIES配置文件数据过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2019-12-12SpringBoot @JsonDeserialize自定义Json序列化方式
这篇文章主要介绍了SpringBoot @JsonDeserialize自定义Json序列化方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-10-10基于Java Agent的premain方式实现方法耗时监控问题
javaagent是在JDK5之后提供的新特性,也可以叫java代理,这篇文章主要介绍了基于Java Agent的premain方式实现方法耗时监控问题,需要的朋友可以参考下2022-10-10
最新评论