跳到主要内容

分片与副本机制研究

· 阅读需 2 分钟

Gemini: https://gemini.google.com/share/f5c5f79c9d34

导读

副本

  • 主从复制
  • 多主复制

分片

  • 数据在哪里分片?
    1. 在应用程序管理一个巨大的数据库连接池集合,对 JDBC 进行连接.(Apache-ShardingSphere-JDBC)
    2. 在应用程序与数据库之间搭建一个代理(Vitess)
  • 分片策略
    • 散列算法
    • 范围分片
    • 目录分片
    • 地理位置分片
    • 列表分片
    • 复合/混合分片
  • 读写分离
    • 读请求:负载均衡🈯至所有分片
    • 写请求:请求主库
  • 数据聚合
    • 聚合函数
      • max,min
      • count
      • sum
      • avg -> sun/count
    • 关联查询
      • 从分片上下功夫,将关联条件作为分片的 key
      • 广播表(每个分片中都存在)
      • 数据冗余,避免关联查询
      • 在应用程序层面关联
  • 全局唯一 ID
    • UUID 的升级版(包含时间戳)
    • 号段模式(美团 Leaf)
    • 雪花算法(单机递增,全局趋势递增,时间回拨问题)
    • Redis 自增
    • Zookeeper 自增
  • 分布式事务

短链系统

  1. 号段模式(Segment) + 混淆加密(Feistel Cipher) + Base62 编码
  2. 独立预发号服务(Key Generation Service,KGS)
    • 独立的后台服务,在空闲时不断生成 6-7 位的 Base62 字符串
    • 查询数据库是否已存在
    • 从未使用密钥表中快速拿走一个可用的短字符串。
  3. uuid , 不推荐,长度太长
  4. 雪花算法,长度不符合,递增
  5. 哈希值,取前 6-7 位,有重复危险

Feistel Cipher 算法