我們總結(jié)一下新搜索系統(tǒng)需要解決的幾個(gè)問題:
-
海量請(qǐng)求。幾百萬的請(qǐng)求毫無壓力,上千萬上億也要可以扛得住。
-
實(shí)時(shí)搜索。指的是當(dāng)一個(gè)用戶修改了其數(shù)據(jù)之后,另一個(gè)用戶能實(shí)時(shí)地搜索到改用戶。
海量請(qǐng)求。要扛得起海量的搜索請(qǐng)求,可以使用ElasticSearch來實(shí)現(xiàn),它是在Lucene的基礎(chǔ)上進(jìn)行封裝的一個(gè)開源項(xiàng)目,它將Lucene復(fù)雜的原理以及API封裝起來,對(duì)外提供了一個(gè)易用的API接口。ElasticSearch現(xiàn)在已經(jīng)廣泛地被許多公司使用,其中包括:愛奇藝、百姓網(wǎng)、58到家等公司。
實(shí)時(shí)搜索。阿里有一個(gè)開源項(xiàng)目Canal,就是用來解決這個(gè)問題的,Canal項(xiàng)目利用了MySQL數(shù)據(jù)庫主從同步的原理,將Canal Server模擬成一臺(tái)需要同步的從庫,從而讓主庫將binlog日志流發(fā)送到Canal Server接口。Canal項(xiàng)目對(duì)binlog日志的解析進(jìn)行了封裝,我們可以直接得到解析后的數(shù)據(jù),而不需要理會(huì)binlog的日志格式。而且Canal項(xiàng)目整合了zookeeper,整體實(shí)現(xiàn)了高可用,可伸縮性強(qiáng),是一個(gè)不錯(cuò)的解決方案。
經(jīng)過一段時(shí)間的技術(shù)預(yù)研,我們?cè)O(shè)計(jì)了整個(gè)搜索技術(shù)架構(gòu):
從架構(gòu)圖可以看出整個(gè)系統(tǒng)分為兩大部分:
-
Canal數(shù)據(jù)變更服務(wù)平臺(tái)。這部分負(fù)責(zé)解析MySQL的binlog日志,并將其解析后的數(shù)據(jù)封裝成特定的對(duì)象放到Kafka中。
-
Kafka數(shù)據(jù)消費(fèi)方。這部分負(fù)責(zé)消費(fèi)存放在Kafka中的消息,當(dāng)消費(fèi)方拿到具體的用戶表變更消息時(shí),將最新的用戶信息存放到ES數(shù)據(jù)倉庫中。
Canal技術(shù)變更基礎(chǔ)平臺(tái)
因?yàn)榭紤]到未來可能有其他項(xiàng)目需要監(jiān)控?cái)?shù)據(jù)庫某些表的變化,因此我們將Canal獲取MySQL數(shù)據(jù)變更部分做成一個(gè)公用的平臺(tái)。當(dāng)有其他業(yè)務(wù)需要增加監(jiān)控的表時(shí),我們可以直接修改配置文件,重啟服務(wù)器即可完成添加,極大地提高了開發(fā)效率。
在這一部分中,主要分為兩大部分:Canal Server 和 Canal Client。
Canal Server端。Canal Server偽裝成MySQL的一個(gè)從庫,使主庫發(fā)送binlog日志給 Canal Server,Canal Server 收到binlog消息之后進(jìn)行解析,解析完成后將消息直接發(fā)送給Canal Client。在Canal Server端可以設(shè)置配置文件進(jìn)行具體scheme(數(shù)據(jù)庫)和table(數(shù)據(jù)庫表)的篩選,從而實(shí)現(xiàn)動(dòng)態(tài)地增加對(duì)數(shù)據(jù)庫表的監(jiān)視。
Canal Client端。Canal Client端接收到Canal Server的消息后直接將消息存到Kafka指定Partition中,并將最新的binlogid發(fā)送給zookeeper集群保存。
Kafka消息消費(fèi)端
Canal技術(shù)變更平臺(tái)在獲取到對(duì)應(yīng)的數(shù)據(jù)庫變更消息后會(huì)將其放到指定的Kafka分片里,具體的業(yè)務(wù)項(xiàng)目需要到指定的Kafka片區(qū)里消費(fèi)對(duì)應(yīng)的數(shù)據(jù)變更消息,之后根據(jù)具體的業(yè)務(wù)需求進(jìn)行處理。
因?yàn)镃anal變化是根據(jù)表為最小單位進(jìn)行地,因此我在實(shí)現(xiàn)方面定義了一個(gè)以表為處理單位的MsgDealer
接口:
-
`public interface MsgDealer {`
-
`void deal(CanalMsgVo canalMsgVo);`
自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進(jìn)入阿里一直到現(xiàn)在。
深知大多數(shù)Java工程師,想要提升技能,往往是自己摸索成長(zhǎng)或者是報(bào)班學(xué)習(xí),但對(duì)于培訓(xùn)機(jī)構(gòu)動(dòng)則幾千的學(xué)費(fèi),著實(shí)壓力不小。自己不成體系的自學(xué)效果低效又漫長(zhǎng),而且極易碰到天花板技術(shù)停滯不前!
因此收集整理了一份《2024年Java開發(fā)全套學(xué)習(xí)資料》,初衷也很簡(jiǎn)單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時(shí)減輕大家的負(fù)擔(dān)。
既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗(yàn)的小伙伴深入學(xué)習(xí)提升的進(jìn)階課程,基本涵蓋了95%以上Java開發(fā)知識(shí)點(diǎn),真正體系化!
由于文件比較大,這里只是將部分目錄截圖出來,每個(gè)節(jié)點(diǎn)里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實(shí)戰(zhàn)項(xiàng)目、講解視頻,并且會(huì)持續(xù)更新!
如果你覺得這些內(nèi)容對(duì)你有幫助,可以掃碼獲取?。。▊渥ava獲取)

最后
這份清華大牛整理的進(jìn)大廠必備的redis視頻、面試題和技術(shù)文檔
祝大家早日進(jìn)入大廠,拿到滿意的薪資和職級(jí)~~~加油??!
感謝大家的支持??!
《一線大廠Java面試題解析+核心總結(jié)學(xué)習(xí)筆記+最新講解視頻+實(shí)戰(zhàn)項(xiàng)目源碼》,點(diǎn)擊傳送門即可獲?。?/strong>
74)]文章來源:http://www.zghlxwxcb.cn/news/detail-845569.html
《一線大廠Java面試題解析+核心總結(jié)學(xué)習(xí)筆記+最新講解視頻+實(shí)戰(zhàn)項(xiàng)目源碼》,點(diǎn)擊傳送門即可獲?。?/strong>文章來源地址http://www.zghlxwxcb.cn/news/detail-845569.html
到了這里,關(guān)于ElasticSearch + Canal 開發(fā)千萬級(jí)的實(shí)時(shí)搜索系統(tǒng)【轉(zhuǎn)】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!