思考(六十七):按段(segment)分片的數據庫應用

問題

在使用數據庫的應用中,通常會通過對 ID 做 hash 映射到分庫分表,達成壓力均攤

在實際實施過程中,通常會有 2 個問題:

  • 當實例進行擴容時,必須停服維護, rehash 用戶數據
  • 不同實例壓力分擔不均,通常 ID 越大的那些實例壓力大

因此,實作中,通常會使用按段(segment)劃分維護數據集

本文,舉 3 個例子來闡述其思想:

  1. 美團 Leaf-segment 數據庫方案實現分佈式ID生成器
  2. 永不遷移數據和避免熱點的 MySQL 橫向擴展方案
  3. Redis 集羣的按哈希槽實現分片

Leaf-segment 數據庫方案

該方案在官方的博客中也要詳細描述: 傳送門

這裏簡要闡述下其原理:

在這裏插入圖片描述

如圖,該圖摘自官方博客,服務向 Leaf 請求申請一個唯一的 test_tag ID

  1. DB 中保存當前 test_tag 的已被預定的最大 max_id
  2. 向 DB 預定 id 的 步長(step)

因此 Leaf 可以通過向 DB 預定最新的 ID 段,然後快速的在本地互不干擾的直接分配 ID 給服務

該方案,有以下優點:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章