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