系統設計入門: Replication And Sharding

ChunJen Wang
jimmy-wang
Published in
Apr 24, 2022

假想一情境,系統因為database故障,而導致無法執行,可以怎麼處理?
> 規劃main database與遇到問題時替代方案的replica

Replication

目的在於提升分散式系統可用性、效能、容錯,基本概念就是將資料複製一份到另一處(replica)儲存。

  • 當故障發生時,Replica可以取代Main執行
  • 跨國家或區域時,更適合使用此方法,例如LinkedIn為全球服務,在US與India分別有database(db),為了加速速度,US users使用LinkedIn服務時,會優先取用US db;同時India也在sync US db避免今天US db故障時,US users完全無法進行發文、建立連結或任何需要寫入db資料事件。
  • 但對上述做法,對於Client端並不需要知道背後有Replication存在。

資料庫如Oracle可以進行replication的物件(objects)包含:

  1. Tables
  2. Indexes
  3. Views
  4. Packages and Package Bodies
  5. Procedures and Functions
  6. Triggers
  7. Sequences
  8. Synonyms

萬一資料量超級龐大呢? (tons of data)>分開儲存資料 ,但作法?
>Sharding

Sharding

也被稱為data partitioning。概念是將集中的資料分散存放到不同的db server(獨立CPU與memory)。

  • 將資料單筆單筆(row)分別儲存於不同的db空間
  • 新增shards可以透過hash function概念降低異動
  • 便於水平擴充
  • 適合透過雲端服務部署
舉例切分出2個shard(左上與右上)

然而,如何分配資料進入shards就變成相當重要的議題。
舉例如如下圖,以key字母開頭作為分配資料(sharding strategy),容易導致db系統負荷過載(overloaded)。

db : DATA_DIR=aedb_data_0, PORT=3000因為前面已insert key為b, f資料,後續再新增任何資料如bar, baz, foobar….全數依據開頭字母往這個db塞資料,甚至取用資料也會從同一個shard撈資料,形成hot spot。

更多內容也可參考Oracle介紹

  1. Replication Overview
  2. Overview of Oracle Sharding

--

--

ChunJen Wang
jimmy-wang

嗨,歡迎你的到來,我目前在銀行擔任DS。過去曾做過銀行大型專案BA,也曾在轉職科技業DE中踢了鐵板,相信每一個人都有自己要走的路,而努力的過程,可以讓我們離心中理想更接近,如果我的文章能帶給你一些啟發與幫助,別忘了幫我在文章底下按下拍手~^^