houdq / blog

java 学习笔记
0 stars 0 forks source link

可伸缩服务架构:框架和中间件 #97

Open houdq opened 11 months ago

houdq commented 11 months ago

image

houdq commented 11 months ago

分布式的发号器

技术选型

UUID 生成:

基于时间戳&时钟序列生成 基于名字空间/名字的散列值 (MD5/SHA1) 生成 基于随机数生成

弊端

  1. 可读性差
  2. 无序,会导致 b+tree 随机写入,影响性能
  3. 依赖时间,性能较差
  4. 长度占用空间大

基于数据库生成

  1. 数据库自增
  2. 数据库sequence

sequence弊端

总结:强依赖数据库

snowflake 雪花算法

snowflake

  1. Twitter 开源
  2. Scala编写
houdq commented 11 months ago

自增ID

多台机器不同初始值、同步长自增 批量缓存自增ID

弊端

不适合多表 不适合分布式系统,可能会重复 数据迁移带来问题,主键规则需要重新搞

houdq commented 11 months ago

总结:全局 id 需要做到以下几点

唯一性:生成的ID全局唯一,在特定范围内冲突概率极小 有序性:生成的ID按某种规则有序,便于数据库插入及排序 可用性:可保证高并发下的可用性 自主性:分布式环境下不依赖中心认证即可自行生成ID 安全性:不暴露系统和业务的信息

houdq commented 11 months ago

雪花算法