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 成為競爭資源。
現(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é)果,再針對這個(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 線程安全的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
java servlet手機(jī)app訪問接口(一)數(shù)據(jù)加密傳輸驗(yàn)證
這篇文章主要為大家詳細(xì)介紹了java servlet手機(jī)app訪問接口(一),數(shù)據(jù)加密傳輸驗(yàn)證,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12
JSONArray在Java中的應(yīng)用操作實(shí)例
JSONArray是org.json庫用于處理JSON數(shù)組的類,可將Java對象(Map/List)轉(zhuǎn)換為JSON格式,提供增刪改查等操作,適用于前后端數(shù)據(jù)交互,并涵蓋安全、性能優(yōu)化及最佳實(shí)踐,本文給大家介紹JSONArray在Java中的應(yīng)用,感興趣的朋友一起看看吧2025-07-07
Spring Boot教程之利用ActiveMQ實(shí)現(xiàn)延遲消息
這篇文章主要給大家介紹了關(guān)于Spring Boot教程之利用ActiveMQ實(shí)現(xiàn)延遲消息的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Spring Boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
關(guān)于Idea使用git時(shí)commit特別慢的問題及解決方法
這篇文章主要介紹了關(guān)于Idea使用git時(shí)commit特別慢的問題及解決方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
java關(guān)于String.split("|")的使用方式
這篇文章主要介紹了java關(guān)于String.split("|")的使用方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
Java工具之ja-netfilter?2022.1?配置教程
這篇文章主要介紹了Java工具之ja-netfilter?2022.1?配置教程,本防火墻基于javaagent,所以目前只有基于java的程序能夠使用,需要的朋友可以參考下2022-04-04
MySQL中關(guān)鍵字UNION和UNION ALL的區(qū)別
本文主要介紹了MySQL中關(guān)鍵字UNION和UNION ALL的區(qū)別,深入探討UNION和UNION ALL的定義、用法、主要區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下2024-06-06
WebClient拋UnsupportedMediaTypeException異常解決
這篇文章主要為大家介紹了WebClient拋UnsupportedMediaTypeException異常的解決方案,文中給大家介紹了六中方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-02-02

