shardingsphered 線程安全問題示例分析
shardingsphere
shardingsphere 版本 3.1.0 ,也是目前的最新的正式版,項目并發(fā)量很高很笨重(啟動較慢),且使用了按天分表策略,在使用 shardingsphere 的過程中發(fā)現(xiàn)其存在分表策略的線程安全問題,會導(dǎo)致分表策略沒有執(zhí)行,直接查詢的沒有分表策略的邏輯表。
原因:
io.shardingsphere.core.parsing.antlr.extractor.impl.FromWhereExtractor
實現(xiàn)類定義
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
是有線程安全問題的。
并發(fā)量高的時候,predicateSegmentExtractor 成為競爭資源。
現(xiàn)象分析
這導(dǎo)致的現(xiàn)象是:
應(yīng)用啟動后分表策略不起效果,且是隨機性的,假設(shè)有 20 個應(yīng)用節(jié)點,應(yīng)用重啟之后,其中會有一個或者少量節(jié)點會出現(xiàn)分表策略無效,查詢不到結(jié)果,再針對這個節(jié)點進行重啟就會恢復(fù)正常,隨機性極高。
不僅僅是我們遇到這個問題,有別的研發(fā)公司也遇到過這種問題:
https://github.com/apache/shardingsphere/issues/1967
以上就是shardingsphered 線程安全問題示例分析的詳細內(nèi)容,更多關(guān)于shardingsphered 線程安全的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
java如何實現(xiàn)圖片轉(zhuǎn)化為數(shù)據(jù)流
這篇文章主要介紹了java如何實現(xiàn)圖片轉(zhuǎn)化為數(shù)據(jù)流,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01關(guān)于jvm的垃圾回收器以及觸發(fā)full gc的場景
這篇文章主要介紹了關(guān)于jvm的垃圾回收器以及觸發(fā)full gc的場景,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04java門禁系統(tǒng)面向?qū)ο蟪绦蛟O(shè)計
這篇文章主要為大家詳細介紹了java門禁系統(tǒng)面向?qū)ο蟪绦蛟O(shè)計,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-01-01Java面向?qū)ο缶幊蹋ǚ庋b/繼承/多態(tài))實例解析
這篇文章主要介紹了Java面向?qū)ο缶幊蹋ǚ庋b/繼承/多態(tài))實例解析的相關(guān)內(nèi)容,具有一定參考價值,需要的朋友可以了解下。2017-10-10