日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

ES数据同步方案

發(fā)布時(shí)間:2024/1/1 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ES数据同步方案 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

?

當(dāng)業(yè)務(wù)量上升后,由于mysql對(duì)全文檢索或模糊查詢支持的能力不強(qiáng),在系統(tǒng)中查詢的地方,往往會(huì)出現(xiàn)慢sql等,拖累系統(tǒng)其他模塊,造成性能低下。

隨著ES使用普及率的升高,ES是mysql的一個(gè)有效補(bǔ)充。我們可以將數(shù)據(jù)發(fā)送到搜索引擎(如ES)上,由搜索引擎來(lái)提供專業(yè)的服務(wù)。

接下來(lái),就結(jié)合工作中實(shí)際用到的場(chǎng)景,對(duì)數(shù)據(jù)從mysql到es的同步進(jìn)行一些分析。

在實(shí)踐中我總結(jié)出了以下幾種方式。

第1種:同步雙寫

這是一種最為簡(jiǎn)單的方式,在將數(shù)據(jù)寫到mysql時(shí),同時(shí)將數(shù)據(jù)寫到ES,實(shí)現(xiàn)數(shù)據(jù)的雙寫。

優(yōu)點(diǎn):

業(yè)務(wù)邏輯簡(jiǎn)單。

缺點(diǎn):

硬編碼:有需要寫入mysql的地方都需要添加寫入ES的代碼;業(yè)務(wù)強(qiáng)耦合;存在雙寫失敗丟數(shù)據(jù)風(fēng)險(xiǎn);性能較差:本來(lái)mysql的性能就不是很高,再加寫一個(gè)ES,系統(tǒng)的性能必然會(huì)下降。說(shuō)明:

上面第3點(diǎn)講到的雙寫失敗風(fēng)險(xiǎn),包括以下3種:

ES系統(tǒng)不可用;應(yīng)用系統(tǒng)和ES之間的網(wǎng)絡(luò)故障;應(yīng)用系統(tǒng)重啟,導(dǎo)致系統(tǒng)來(lái)不及寫入ES等。針對(duì)這種情況,有數(shù)據(jù)強(qiáng)一致性要求的,就必須雙寫放到事物中來(lái)處理,但是一旦用上事物,則性能下降更加明顯。

第2種:異步雙寫(MQ方式)

針對(duì)第一種同步雙寫的性能和數(shù)據(jù)丟失問(wèn)題,可以考慮引入MQ,從而形成了異步雙寫的方案,如下圖所示:

由于MQ的性能基本比mysql高出一個(gè)數(shù)量級(jí),所以性能可以得到顯著的提高。

優(yōu)點(diǎn):

性能高;不存在丟數(shù)據(jù)問(wèn)題。缺點(diǎn):

硬編碼問(wèn)題:依然存在業(yè)務(wù)強(qiáng)耦合:依然存在復(fù)雜度增加:系統(tǒng)中增加了mq的代碼,;可能存在時(shí)延問(wèn)題:程序的寫入性能提高了,但是由于MQ的消費(fèi)可能由于網(wǎng)絡(luò)或其它原因?qū)е掠脩魧懭氲臄?shù)據(jù)不一定可以馬上看到,造成延時(shí)。第3種:異步雙寫(Worker方式)

上面兩種方案中都存在硬編碼問(wèn)題,也就是有任何對(duì)mysq進(jìn)行增刪改查的地方要么植入ES代碼,要么替換為MQ代碼,代碼的侵入性太強(qiáng)。

如果對(duì)實(shí)時(shí)性要求不高的情況下,可以考慮用定時(shí)器來(lái)處理,具體步驟如下:

數(shù)據(jù)庫(kù)的相關(guān)表中增加一個(gè)字段為timestamp的字段,任何crud操作都會(huì)導(dǎo)致該字段的時(shí)間發(fā)生變化;原來(lái)程序中的CURD操作不做任何變化;增加一個(gè)定時(shí)器程序(京東內(nèi)部叫Worker),讓該程序按一定的時(shí)間周期掃描指定的表,把該時(shí)間段內(nèi)發(fā)生變化的數(shù)據(jù)提取出來(lái);逐條寫入到ES中。入下圖所示

優(yōu)點(diǎn):

不改變?cè)瓉?lái)代碼,沒(méi)有侵入性、沒(méi)有硬編碼;沒(méi)有業(yè)務(wù)強(qiáng)耦合;不改變?cè)瓉?lái)程序的性能;Worker代碼編寫簡(jiǎn)單不需要考慮增刪改查。缺點(diǎn):

時(shí)效性較差,由于定時(shí)器工作周期不可能設(shè)在秒級(jí),所以實(shí)時(shí)性沒(méi)有上面2中好;對(duì)數(shù)據(jù)庫(kù)有一定的輪詢壓力,一種改進(jìn)方法是將輪詢放到壓力不大的重庫(kù)上。第4種:Binlog 同步方式:

上面三種方案要么有代碼侵入,要么有硬編碼,要么有時(shí)延,第4中方案,可以利用mysql的binlog來(lái)進(jìn)行同步

具體步驟如下:

1) 讀取mysql的binlog日志,獲取指定表的日志信息;

2) 將讀取的信息轉(zhuǎn)為MQ;

3) 編寫一個(gè)MQ消費(fèi)程序;

4) 不斷消費(fèi)MQ,每消費(fèi)完一條消息,將消息寫入到ES中。

優(yōu)點(diǎn):

沒(méi)有代碼侵入、沒(méi)有硬編碼;原有系統(tǒng)不需要任何變化,沒(méi)有感知;性能高;業(yè)務(wù)解耦,不需要關(guān)注原來(lái)系統(tǒng)的業(yè)務(wù)邏輯。缺點(diǎn):

構(gòu)建Binlog系統(tǒng)復(fù)雜;也像方案二,存在MQ延時(shí)的風(fēng)險(xiǎn)。

總結(jié)

以上是生活随笔為你收集整理的ES数据同步方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。