Go在酷狗資料庫中介軟體的應用,go酷狗中介軟體

來源:互聯網
上載者:User

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在酷狗資料庫中介軟體的應用

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.