自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Go在酷狗數(shù)據(jù)庫中間件的應(yīng)用

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

[[212810]]

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

程序開發(fā)需求

程序開發(fā)對(duì)開發(fā)語言的要求,簡(jiǎn)單概括如下幾點(diǎn):

語言特性精煉,容易入門

開發(fā)效率高,代碼邏輯清晰

運(yùn)行性能強(qiáng),節(jié)省機(jī)器資源

部署維護(hù)方便

生態(tài)圈完善

Golang的特性

結(jié)合Golang與C之間區(qū)別,闡述一下Golang的特性:

Go語法簡(jiǎn)練;沒有學(xué)習(xí)壓力

開發(fā)效率高;語言描述能力接近于腳本語言

性能高;接近于C/C++,充分利用資源

容易部署;可執(zhí)行程序,編譯時(shí)解決上線部署、運(yùn)行時(shí)的依賴

強(qiáng)大的標(biāo)準(zhǔn)庫、豐富的第三方庫、go test、pprof

自動(dòng)內(nèi)存管理;內(nèi)存泄漏與野指針是C/C++語言開發(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訪問的單點(diǎn)問題。

上圖是系統(tǒng)整體框架圖,整套系統(tǒng)致力于提供一套 mysql 分布式解決方案,上層應(yīng)用接入本系統(tǒng)與使用單機(jī)mysql一樣;系統(tǒng)內(nèi)部會(huì)做一些路由分發(fā)、故障切換、讀寫分離等工作。

proxy接收SQL請(qǐng)求,解析SQL語句、路由分發(fā)以及組裝返回結(jié)果;

mysql-group都是一個(gè)“復(fù)制集”,可以是主從模式、主主模式;

dbmoniter主要是負(fù)責(zé)故障切換、數(shù)據(jù)修復(fù)等;

zookeeper上存儲(chǔ)相關(guān)的配置信息。

  • 分表路由邏輯

分表規(guī)則遵循哈希分表與分段分表兩種;哈希分表是shardkey通過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)。我們采取的策略是通過配置Rsync拉取mysql的binlog日志的方式處理。

故障的幾種情形以及對(duì)應(yīng)的處理:

  1. 當(dāng)從節(jié)點(diǎn)掛掉,可以剔除下線的處理;
  2. 當(dāng)主節(jié)點(diǎn)掛了,但是機(jī)器存活的情況下,可以通過binlog恢復(fù)數(shù)據(jù),將備節(jié)點(diǎn)提升為主節(jié)點(diǎn);
  3. 當(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ù)的過程:Master故障時(shí)試圖通過Rsync拉取Binlog,最大程度保證數(shù)據(jù)不丟失;Slave之間的數(shù)據(jù)差異通過中繼日志恢復(fù)。

圖 3

  • 在線平滑擴(kuò)容

數(shù)據(jù)遷移的方式分為兩種:

  1. 表遷移,將整張表的數(shù)據(jù)從一個(gè)Mysql遷移到另一個(gè);
  2. 表拆分,將數(shù)據(jù)表的部分?jǐn)?shù)據(jù)從一個(gè)Mysql遷移到另一個(gè)數(shù)據(jù)庫的過程。

擴(kuò)容的工作原理:mysqldump導(dǎo)存量數(shù)據(jù) + binlog追增量

擴(kuò)容工作流程:

首先,導(dǎo)出存量數(shù)據(jù);

其次,訂閱binlog變更,追增量;

再次,待同步后,修改路由規(guī)則;

最后,清理不需要的冗余數(shù)據(jù)。

這樣設(shè)計(jì)的好處就在于其中任一環(huán)節(jié)出問題都可以馬上進(jìn)行回滾,對(duì)數(shù)據(jù)操作相對(duì)比較安全;下圖是擴(kuò)容時(shí)的流程圖。

圖 4

  • 系統(tǒng)管理命令

圖 5

如圖 5 所示是提供了幾個(gè)主要管理命令,比如上下線MySQL、數(shù)據(jù)遷移指令、添加路由等。 

責(zé)任編輯:龐桂玉 來源: 36大數(shù)據(jù)
相關(guān)推薦

2017-12-01 05:04:32

數(shù)據(jù)庫中間件Atlas

2017-11-27 05:36:16

數(shù)據(jù)庫中間件TDDL

2017-11-27 05:06:42

數(shù)據(jù)庫中間件cobar

2022-11-18 07:54:02

Go中間件項(xiàng)目

2018-02-24 19:37:33

Java8數(shù)據(jù)庫中間件

2011-08-10 13:03:58

CJDBC數(shù)據(jù)庫集群

2009-01-20 10:45:55

Oracle數(shù)據(jù)庫中間件

2017-05-23 18:55:05

mysql-proxy數(shù)據(jù)庫架構(gòu)

2015-12-21 14:56:12

Go語言Http網(wǎng)絡(luò)協(xié)議

2021-10-06 19:03:35

Go中間件Middleware

2017-07-26 09:41:28

MyCATSQLMongoDB

2024-12-06 08:29:29

2021-07-27 05:49:59

MySQL數(shù)據(jù)庫中間件

2013-12-12 10:55:21

2017-12-01 05:40:56

數(shù)據(jù)庫中間件join

2017-11-27 06:01:37

數(shù)據(jù)庫中間件中間層

2017-07-18 17:35:16

數(shù)據(jù)庫MyCATPreparedSta

2017-11-03 11:02:08

數(shù)據(jù)庫中間件

2017-11-30 08:56:14

數(shù)據(jù)庫中間件架構(gòu)師

2009-03-12 11:45:41

Oracle數(shù)據(jù)庫中間件
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)