思考(六十七):按段(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 给服务

该方案,有以下优点:

猜你喜欢

转载自blog.csdn.net/u013272009/article/details/106311278