weblab-tw / ddia-study-group

Designing Data-Intensive Applications Study Group
36 stars 4 forks source link

第五章節: 主從複製/讀寫分離的實作?客戶如何決定應操作哪一個副本? -- Mason #55

Open 0x171-0 opened 2 years ago

0x171-0 commented 2 years ago

5.1 Quetion

Implementation

Knowledge

kylemocode commented 2 years ago

DB 有沒有自己的機制我就不清楚了🧐

AK4codee commented 2 years ago
  1. MySQL 可以設定主從資料庫同步,可參考這篇 MySQL 主從設定
  2. 我們公司是做讀寫分離,讀是連接從庫(一般來說是 read-only),寫入時是主庫,就是在環境變數設定不同連接字串
  3. 若是連線問題,我有使用過 Polly 套件處理 Retry(可以設定特定情況或特定 Error 做出相對應處理);若是處理失敗...我問過主管一樣的問題XD他說這種 Error 會透過他們自己寫的機器人傳到群組上,看到就要去處理
0x171-0 commented 2 years ago

感謝大家分享,我昨天照著 AK4codee 分享的 MySQL 主從設定 實作有成功喔,Kyle 分享的 ORM 的部分,我也查了我們公司使用的 TypeORM,目前我們搭配 Posgres 最多,也是可以在連接的 config 直接設定,可以參照 官方文件 Replication 的章節 看起來跟 Sequelize 設定方式幾乎一樣,另外我也查了 Posgres 跟 Redis 的 主從設定方式,感覺目前這三種 DB 設定方式滿像的,都是透過改 config 檔案就可以達成主從的設置。

Parkerhiphop commented 2 years ago

RDBMS 的 水平 auto-scaling 應該是做不到,還是會事先分配。

最後一題,KK 早期都是用 offset,跳過的過程是 full scan,而不是直接跳過去。後來都用 cursor,先用時間戳的做法,但時間點太近會有跳掉的問題,後來用 時間戳+id 做雙 column 就能很快地跳到該筆數。

邏輯日誌可以鬆偶和,概念類似 Git,不管是哪種 DB 都一定有 Row。

WAL 跟引擎有很大的關係可參照前面第三或四章,與本身 DB 內部的演算法很相關。

Message Queue 用 Kafka 會紀錄 offset 不會掉資料,Redis 本身則沒對遺失資料做什麼處理。

Mongo 有分三種:單機、雙機和叢集版。 叢集版會有 Coordinator,即 Read、Write 和 Coordinator 三種角色。 新的 Node 加進來時,只要讓 Coordinator 知道就好。 但 Coordinator 是固定的,若掛掉有一個評分機制會讓別人替補。

RDBMS 則很難做到 自動的 Load Balance。