Go在酷狗資料庫中介軟體的應用,go酷狗中介軟體
作者:劉延允
本次分享主要圍繞Go在資料庫中介軟體應用這方面展開;首先會聊一下程式開發的需求,具體會參考Go的特性是否滿足這些需求;接下來會介紹一下近期採用Go語言開發的mysql中介軟體這個項目,整體方案,分表路由、故障切換、平滑擴容,系統營運,主要從以上這五個方面進行展開。
程式開發需求
程式開發對開發語言的要求,簡單概括如下幾點:
語言特性精鍊,容易入門
開發效率高,代碼邏輯清晰
運行效能強,節省機器資源
部署維護方便
生態圈完善
Golang的特性
結合Golang與C之間區別,闡述一下Golang的特性:
Go文法簡練;沒有學習壓力
開發效率高;語言描述能力接近於指令碼語言
效能高;接近於C/C++,充分利用資源
容易部署;可執行程式,編譯時間解決上線部署、運行時的依賴
強大的標準庫、豐富的第三方庫、go test、pprof
自動記憶體管理;記憶體流失與野指標是C/C++語言開發人員的噩夢
Go routine + channel;簡單的並發與簡易的資料同步
Go開發mysql中介軟體
圖 1
本系統開發的出發點是:突破mysql的單機、單表容量,解決mysql訪問的單點問題。
是系統整體架構圖,整套系統致力於提供一套 mysql 分布式解決方案,上層應用接入本系統與使用單機mysql一樣;系統內部會做一些路由分發、故障切換、讀寫分離等工作。
proxy接收SQL請求,解析SQL語句、路由分發以及組裝返回結果;
mysql-group都是一個“複製集”,可以是主從模式、主主模式;
dbmoniter主要是負責故障切換、資料修複等;
zookeeper上儲存相關的配置資訊。
分表規則遵循雜湊分表與分段分表兩種;雜湊分表是shardkey通過Hash函數分表,分段分表是按照年、月、日或者整形範圍進行分表。這兩種方式的區別在於因雜湊規則不同,導致其資料群組織方式上的差異性。
關於MySQL的高可用方案,業內流行的解決方案有MHA。MHA在部署方面還是有點麻煩的,需要在每台機器上都部署一個agent,然後機器之間進行SSH授權。我們採取的策略是通過配置Rsync拉取mysql的binlog日誌的方式處理。
故障的幾種情形以及對應的處理:
我們實現了如下的雙主模式主備切換機制,這點是MHA不支援的。
圖 2
主備切換資料恢複的過程:Master故障時試圖通過Rsync拉取Binlog,最大程度保證資料不丟失;Slave之間的資料差異通過中繼日誌恢複。
圖 3
資料移轉的方式分為兩種:
擴容的工作原理:mysqldump導存量資料 + binlog追增量
擴容工作流程:
首先,匯出存量資料;
其次,訂閱binlog變更,追增量;
再次,待同步後,修改路由規則;
最後,清理不需要的冗餘資料。
這樣設計的好處就在於其中任一環節出問題都可以馬上進行復原,對資料操作相對比較安全;是擴容時的流程圖。
圖 4
圖 5
5 所示是提供了幾個主要管理命令,比如上下線MySQL、資料移轉指令、添加路由等。
End.
轉載請註明來自36大資料(36dsj.com):36大資料 » Go在酷狗資料庫中介軟體的應用