新聞中心
本次分享主要圍繞Go在數據庫中間件應用這方面展開;首先會聊一下程序開發(fā)的需求,具體會參考Go的特性是否滿足這些需求;接下來會介紹一下近期采用Go語言開發(fā)的mysql中間件這個項目,整體方案,分表路由、故障切換、平滑擴容,系統(tǒng)運維,主要從以上這五個方面進行展開。

在甘泉等地區(qū),都構建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供成都網站建設、網站設計 網站設計制作定制網站建設,公司網站建設,企業(yè)網站建設,成都品牌網站建設,成都全網營銷推廣,外貿營銷網站建設,甘泉網站建設費用合理。
程序開發(fā)需求
程序開發(fā)對開發(fā)語言的要求,簡單概括如下幾點:
語言特性精煉,容易入門
開發(fā)效率高,代碼邏輯清晰
運行性能強,節(jié)省機器資源
部署維護方便
生態(tài)圈完善
Golang的特性
結合Golang與C之間區(qū)別,闡述一下Golang的特性:
Go語法簡練;沒有學習壓力
開發(fā)效率高;語言描述能力接近于腳本語言
性能高;接近于C/C++,充分利用資源
容易部署;可執(zhí)行程序,編譯時解決上線部署、運行時的依賴
強大的標準庫、豐富的第三方庫、go test、pprof
自動內存管理;內存泄漏與野指針是C/C++語言開發(fā)者的噩夢
Go routine + channel;簡單的并發(fā)與簡易的數據同步
Go開發(fā)mysql中間件
- 系統(tǒng)整體方案
圖 1
本系統(tǒng)開發(fā)的出發(fā)點是:突破mysql的單機、單表容量,解決mysql訪問的單點問題。
上圖是系統(tǒng)整體框架圖,整套系統(tǒng)致力于提供一套 mysql 分布式解決方案,上層應用接入本系統(tǒng)與使用單機mysql一樣;系統(tǒng)內部會做一些路由分發(fā)、故障切換、讀寫分離等工作。
proxy接收SQL請求,解析SQL語句、路由分發(fā)以及組裝返回結果;
mysql-group都是一個“復制集”,可以是主從模式、主主模式;
dbmoniter主要是負責故障切換、數據修復等;
zookeeper上存儲相關的配置信息。
- 分表路由邏輯
分表規(guī)則遵循哈希分表與分段分表兩種;哈希分表是shardkey通過Hash函數分表,分段分表是按照年、月、日或者整形范圍進行分表。這兩種方式的區(qū)別在于因哈希規(guī)則不同,導致其數據組織方式上的差異性。
- 故障主備切換
關于MySQL的高可用方案,業(yè)內流行的解決方案有MHA。MHA在部署方面還是有點麻煩的,需要在每臺機器上都部署一個agent,然后機器之間進行SSH授權。我們采取的策略是通過配置Rsync拉取mysql的binlog日志的方式處理。
故障的幾種情形以及對應的處理:
- 當從節(jié)點掛掉,可以剔除下線的處理;
- 當主節(jié)點掛了,但是機器存活的情況下,可以通過binlog恢復數據,將備節(jié)點提升為主節(jié)點;
- 當主節(jié)點掛了,同時機器不存活的情況下,可以采用relaylog恢復數據,同時將備節(jié)點提升為主節(jié)點。
我們實現了如下的雙主模式主備切換機制,這點是MHA不支持的。
圖 2
主備切換數據恢復的過程:Master故障時試圖通過Rsync拉取Binlog,最大程度保證數據不丟失;Slave之間的數據差異通過中繼日志恢復。
圖 3
- 在線平滑擴容
數據遷移的方式分為兩種:
- 表遷移,將整張表的數據從一個Mysql遷移到另一個;
- 表拆分,將數據表的部分數據從一個Mysql遷移到另一個數據庫的過程。
擴容的工作原理:mysqldump導存量數據 + binlog追增量
擴容工作流程:
首先,導出存量數據;
其次,訂閱binlog變更,追增量;
再次,待同步后,修改路由規(guī)則;
最后,清理不需要的冗余數據。
這樣設計的好處就在于其中任一環(huán)節(jié)出問題都可以馬上進行回滾,對數據操作相對比較安全;下圖是擴容時的流程圖。
圖 4
- 系統(tǒng)管理命令
圖 5
如圖 5 所示是提供了幾個主要管理命令,比如上下線MySQL、數據遷移指令、添加路由等。
分享名稱:Go在酷狗數據庫中間件的應用
本文地址:http://www.dlmjj.cn/article/dphipsp.html


咨詢
建站咨詢
