作者:劉延允
本次分享主要圍繞Go在數(shù)據(jù)庫(kù)中間件應(yīng)用這方面展開;首先會(huì)聊一下程序開發(fā)的需求,具體會(huì)參考Go的特性是否滿足這些需求;接下來(lái)會(huì)介紹一下近期采用Go語(yǔ)言開發(fā)的mysql中間件這個(gè)項(xiàng)目,整體方案,分表路由、故障切換、平滑擴(kuò)容,系統(tǒng)運(yùn)維,主要從以上這五個(gè)方面進(jìn)行展開。
程序開發(fā)需求
程序開發(fā)對(duì)開發(fā)語(yǔ)言的要求,簡(jiǎn)單概括如下幾點(diǎn):
語(yǔ)言特性精煉,容易入門
開發(fā)效率高,代碼邏輯清晰
運(yùn)行性能強(qiáng),節(jié)省機(jī)器資源
部署維護(hù)方便
生態(tài)圈完善
Golang的特性
結(jié)合Golang與C之間區(qū)別,闡述一下Golang的特性:
Go語(yǔ)法簡(jiǎn)練;沒(méi)有學(xué)習(xí)壓力
開發(fā)效率高;語(yǔ)言描述能力接近于腳本語(yǔ)言
性能高;接近于C/C++,充分利用資源
容易部署;可執(zhí)行程序,編譯時(shí)解決上線部署、運(yùn)行時(shí)的依賴
強(qiáng)大的標(biāo)準(zhǔn)庫(kù)、豐富的第三方庫(kù)、go test、pprof
自動(dòng)內(nèi)存管理;內(nèi)存泄漏與野指針是C/C++語(yǔ)言開發(fā)者的噩夢(mèng)
Go routine + channel;簡(jiǎn)單的并發(fā)與簡(jiǎn)易的數(shù)據(jù)同步
Go開發(fā)mysql中間件
系統(tǒng)整體方案圖 1
本系統(tǒng)開發(fā)的出發(fā)點(diǎn)是:突破mysql的單機(jī)、單表容量,解決mysql訪問(wèn)的單點(diǎn)問(wèn)題。
上圖是系統(tǒng)整體框架圖,整套系統(tǒng)致力于提供一套 mysql 分布式解決方案,上層應(yīng)用接入本系統(tǒng)與使用單機(jī)mysql一樣;系統(tǒng)內(nèi)部會(huì)做一些路由分發(fā)、故障切換、讀寫分離等工作。
proxy接收SQL請(qǐng)求,解析SQL語(yǔ)句、路由分發(fā)以及組裝返回結(jié)果;
mysql-group都是一個(gè)“復(fù)制集”,可以是主從模式、主主模式;
dbmoniter主要是負(fù)責(zé)故障切換、數(shù)據(jù)修復(fù)等;
zookeeper上存儲(chǔ)相關(guān)的配置信息。
分表路由邏輯分表規(guī)則遵循哈希分表與分段分表兩種;哈希分表是shardkey通過(guò)Hash函數(shù)分表,分段分表是按照年、月、日或者整形范圍進(jìn)行分表。這兩種方式的區(qū)別在于因哈希規(guī)則不同,導(dǎo)致其數(shù)據(jù)組織方式上的差異性。
故障主備切換關(guān)于MySQL的高可用方案,業(yè)內(nèi)流行的解決方案有MHA。MHA在部署方面還是有點(diǎn)麻煩的,需要在每臺(tái)機(jī)器上都部署一個(gè)agent,然后機(jī)器之間進(jìn)行SSH授權(quán)。我們采取的策略是通過(guò)配置Rsync拉取mysql的binlog日志的方式處理。
故障的幾種情形以及對(duì)應(yīng)的處理:
當(dāng)從節(jié)點(diǎn)掛掉,可以剔除下線的處理;當(dāng)主節(jié)點(diǎn)掛了,但是機(jī)器存活的情況下,可以通過(guò)binlog恢復(fù)數(shù)據(jù),將備節(jié)點(diǎn)提升為主節(jié)點(diǎn);當(dāng)主節(jié)點(diǎn)掛了,同時(shí)機(jī)器不存活的情況下,可以采用relaylog恢復(fù)數(shù)據(jù),同時(shí)將備節(jié)點(diǎn)提升為主節(jié)點(diǎn)。我們實(shí)現(xiàn)了如下的雙主模式主備切換機(jī)制,這點(diǎn)是MHA不支持的。
圖 2
主備切換數(shù)據(jù)恢復(fù)的過(guò)程:Master故障時(shí)試圖通過(guò)Rsync拉取Binlog,最大程度保證數(shù)據(jù)不丟失;Slave之間的數(shù)據(jù)差異通過(guò)中繼日志恢復(fù)。
圖 3
在線平滑擴(kuò)容數(shù)據(jù)遷移的方式分為兩種:
表遷移,將整張表的數(shù)據(jù)從一個(gè)Mysql遷移到另一個(gè);表拆分,將數(shù)據(jù)表的部分?jǐn)?shù)據(jù)從一個(gè)Mysql遷移到另一個(gè)數(shù)據(jù)庫(kù)的過(guò)程。擴(kuò)容的工作原理:mysqldump導(dǎo)存量數(shù)據(jù)?+?binlog追增量
擴(kuò)容工作流程:
首先,導(dǎo)出存量數(shù)據(jù);
其次,訂閱binlog變更,追增量;
再次,待同步后,修改路由規(guī)則;
最后,清理不需要的冗余數(shù)據(jù)。
這樣設(shè)計(jì)的好處就在于其中任一環(huán)節(jié)出問(wèn)題都可以馬上進(jìn)行回滾,對(duì)數(shù)據(jù)操作相對(duì)比較安全;下圖是擴(kuò)容時(shí)的流程圖。
圖 4
系統(tǒng)管理命令圖 5
如圖 5 所示是提供了幾個(gè)主要管理命令,比如上下線MySQL、數(shù)據(jù)遷移指令、添加路由等。
- 蜜度索驥:以跨模態(tài)檢索技術(shù)助力“企宣”向上生長(zhǎng)
- Gartner:預(yù)計(jì)2025年全球IT支出達(dá)到5.74萬(wàn)億美元 同比增長(zhǎng)9.3%
- 被聯(lián)想海外起訴專利侵權(quán) 中興通訊回應(yīng)
- “數(shù)據(jù)要素×”大賽圓滿落幕,啟信寶在金融服務(wù)賽道斬獲佳績(jī)
- JetBrains 面向非商業(yè)用途免費(fèi)提供 WebStorm 和 Rider
- IDC:2024年邊緣計(jì)算支出將達(dá)到2280億美元
- 聯(lián)想集團(tuán)任命前戴爾高管擔(dān)任基礎(chǔ)設(shè)施方案集團(tuán)新總裁
- 報(bào)告稱上半年IT安全軟件市場(chǎng)規(guī)模112.5億元,同比增長(zhǎng)4.1%
- 報(bào)告稱中國(guó)邊緣服務(wù)器市場(chǎng)量?jī)r(jià)齊漲 2028年將達(dá)108億美元
- Gartner數(shù)字化轉(zhuǎn)型調(diào)查:52%的企業(yè)未能實(shí)現(xiàn)預(yù)期目標(biāo)
- 驅(qū)動(dòng)未來(lái):數(shù)據(jù)中心能源的變革與創(chuàng)新
免責(zé)聲明:本網(wǎng)站內(nèi)容主要來(lái)自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁(yè)或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書面權(quán)利通知或不實(shí)情況說(shuō)明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。