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

80后聊架構(gòu):必知必會(huì),三類數(shù)據(jù)庫(kù)高可用與一致性架構(gòu)實(shí)踐

開發(fā)
數(shù)據(jù)庫(kù)架構(gòu)設(shè)計(jì)的過(guò)程中,如何折衷高可用與一致性的問(wèn)題呢?以MySQL為例,有三種常見的復(fù)制方式。

上一篇《數(shù)據(jù)庫(kù)擴(kuò)展性架構(gòu)實(shí)踐》聊的是數(shù)據(jù)庫(kù)架構(gòu)設(shè)計(jì)中的scalability實(shí)踐,并沒(méi)有解決availability與consistency的問(wèn)題。

數(shù)據(jù)庫(kù)架構(gòu)設(shè)計(jì)的過(guò)程中,如何折衷高可用與一致性的問(wèn)題呢?

前面的文章聊過(guò),高可用的核心方法論是:冗余(replication) + 故障自動(dòng)轉(zhuǎn)移(fail-over)。

最容易想到的,是數(shù)據(jù)庫(kù)主從集群,每份數(shù)據(jù)都進(jìn)行復(fù)制,每個(gè)實(shí)例都獨(dú)享 DISK/MEM/CPU 資源,避免實(shí)例之間的資源競(jìng)爭(zhēng)。

如上圖所示:

  • 把整體數(shù)據(jù)存儲(chǔ)分復(fù)制了N份,每份之間數(shù)據(jù)都一樣;
  • 每份數(shù)據(jù)的 DISK/MEM/CPU 都在一個(gè)DBMS進(jìn)程內(nèi),部署在一臺(tái)服務(wù)器上;
  • 每份數(shù)據(jù)的資源之間的沒(méi)有競(jìng)爭(zhēng);

理想很豐滿,現(xiàn)實(shí)很骨感,思路沒(méi)問(wèn)題,但實(shí)際執(zhí)行“復(fù)制”的過(guò)程中,會(huì)碰到一些問(wèn)題。

以MySQL為例,有3種常見的復(fù)制方式:

  • 異步復(fù)制;
  • 半同步復(fù)制;
  • 組復(fù)制;

第一種,異步復(fù)制(Asynchronous Replication)

又叫主從復(fù)制(Primary-Secondary Replication),是互聯(lián)網(wǎng)公司用的最多的數(shù)據(jù)復(fù)制與數(shù)據(jù)庫(kù)集群化方法,它的思路是,從庫(kù)執(zhí)行串行化后的主庫(kù)事務(wù)。

其核心原理如上圖所示:

(1) 第一條時(shí)間線:主庫(kù)時(shí)間線;

  • 主庫(kù)執(zhí)行事務(wù)
  • 主庫(kù)事務(wù)串行化binlog
  • binlog同步給從庫(kù)
  • 主庫(kù)事務(wù)提交完成

(2) 第二條/第三條時(shí)間線:從庫(kù)時(shí)間線;

  • 收到relay log
  • 執(zhí)行和主庫(kù)一樣的事務(wù)
  • 生成自己的binlog(還可以繼續(xù)二級(jí)從庫(kù))
  • 從庫(kù)事務(wù)提交完成

從這個(gè)時(shí)間線可以看到:

  • 主庫(kù)事務(wù)提交;
  • 從庫(kù)事務(wù)執(zhí)行;

是并行執(zhí)行的,主庫(kù)并不能保證從庫(kù)的事務(wù)一定執(zhí)行成功,甚至不能保證從庫(kù)一定收到相關(guān)的請(qǐng)求,這也是其稱作“異步復(fù)制”的原因。

第二種,半同步復(fù)制(Semi-synchronous Replication)

為了解決異步復(fù)制中“不能保證從庫(kù)一定收到請(qǐng)求”等問(wèn)題,對(duì)異步復(fù)制做了升級(jí)。

其核心原理如上圖所示:

(1) 第一條時(shí)間線:主庫(kù)時(shí)間線;

  • 主庫(kù)執(zhí)行事務(wù)
  • 主庫(kù)事務(wù)串行化binlog
  • binlog同步給從庫(kù)
  • 等從庫(kù)確認(rèn)收到請(qǐng)求,主庫(kù)事務(wù)才提交完成

(2) 第二條/第三條時(shí)間線:從庫(kù)時(shí)間線;

  • 收到relay log
  • 執(zhí)行和主庫(kù)一樣的事務(wù),并給主庫(kù)一個(gè)確認(rèn)
  • 生成自己的binlog(還可以繼續(xù)二級(jí)從庫(kù))
  • 從庫(kù)事務(wù)提交完成

從這個(gè)時(shí)間線可以看到:

  • 主庫(kù)收到從庫(kù)的ACK,才會(huì)提交;
  • 從庫(kù)收到請(qǐng)求后,事務(wù)提交前,會(huì)給主庫(kù)一個(gè)ACK;

半同步復(fù)制存在什么問(wèn)題呢?

  • 主庫(kù)的性能,會(huì)受到較大的影響,事務(wù)提交之前,中間至少要等待2個(gè)主從之間的網(wǎng)絡(luò)TTL;
  • 從庫(kù)仍然有延時(shí),主從之間數(shù)據(jù)仍然不一致;
  • 主從角色有差異,主節(jié)點(diǎn)仍然是單點(diǎn);

大數(shù)據(jù)量,高并發(fā)量的互聯(lián)網(wǎng)業(yè)務(wù),一般不使用“半同步復(fù)制”,更多的公司仍然使用“異步復(fù)制”的模式。

最后是MySQL5.7里,新提出的MySQL組復(fù)制。

第三種,組復(fù)制(MySQL Group Replication,MGR)

MGR有一些帥氣的能力:

  • 解決了單點(diǎn)寫入的問(wèn)題,一個(gè)分組內(nèi)的所有節(jié)點(diǎn)都能夠?qū)懭耄?/li>
  • 最終一致性,緩解了一致性問(wèn)題,可以認(rèn)為大部分實(shí)例的數(shù)據(jù)都是最新的;
  • 高可用,系統(tǒng)故障時(shí)(即使是腦裂),系統(tǒng)依然可用;

如上圖所示:

  • 首先,分組內(nèi)的MySQL實(shí)例不再是“主從”關(guān)系,而是對(duì)等的“成員”關(guān)系,故每個(gè)節(jié)點(diǎn)都可以寫入;
  • 其次,增加了一個(gè)協(xié)商共識(shí)的認(rèn)證(certify)環(huán)節(jié),多數(shù)節(jié)點(diǎn)達(dá)成一致的事務(wù)才能提交;

畫外音:Garela也是此類機(jī)制。

結(jié)尾稍作總結(jié),為了折衷數(shù)據(jù)庫(kù)高可用,一致性,性能等架構(gòu)設(shè)計(jì)要素,一般有三類常見復(fù)制方式:

  • 異步復(fù)制,傳統(tǒng)主從,互聯(lián)網(wǎng)公司最常用;
  • 半同步復(fù)制,從庫(kù)確認(rèn),主庫(kù)才提交;
  • 組復(fù)制,MySQL 5.7的新功能,核心在于分布式共識(shí)算法;

知其然,知其所以然。

思路比結(jié)論更重要。

責(zé)任編輯:趙寧寧 來(lái)源: 架構(gòu)師之路
相關(guān)推薦

2023-12-27 14:23:10

微服務(wù)數(shù)據(jù)存儲(chǔ)

2017-05-19 15:00:05

session架構(gòu)web-server

2018-09-11 10:46:10

緩存數(shù)據(jù)庫(kù)一致性

2021-04-24 16:58:03

數(shù)據(jù)庫(kù)工具技術(shù)

2021-06-11 09:21:58

緩存數(shù)據(jù)庫(kù)Redis

2023-06-25 09:44:00

一致性哈希數(shù)據(jù)庫(kù)

2023-06-07 08:10:29

2017-07-02 16:28:06

MySQL數(shù)據(jù)庫(kù)集群

2017-07-25 14:38:56

數(shù)據(jù)庫(kù)一致性非鎖定讀一致性鎖定讀

2020-09-03 09:45:38

緩存數(shù)據(jù)庫(kù)分布式

2023-11-27 07:23:39

2019-12-17 08:40:33

微服務(wù)架構(gòu)數(shù)據(jù)

2023-11-22 12:55:59

微服務(wù)架構(gòu)數(shù)據(jù)庫(kù)

2019-01-15 17:58:03

微服務(wù)架構(gòu)數(shù)據(jù)

2024-10-28 12:41:25

2022-03-29 10:39:10

緩存數(shù)據(jù)庫(kù)數(shù)據(jù)

2019-11-21 10:19:45

數(shù)據(jù)應(yīng)用場(chǎng)景系統(tǒng)

2024-11-22 10:49:46

2021-04-15 10:01:18

Sqlite數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)知識(shí)

2022-05-05 08:32:29

NacosAP架構(gòu)
點(diǎn)贊
收藏

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