近几篇文章聊CAS被骂得较多,今天还是聊CAS,谈谈CAS在一种“分布式ID生成方案”上的应用。
所谓“分布式ID生成方案”,是指在分布式环境下,生成全局唯一ID的方法。
可以利用DB自增键(auto inc id)来生成全局唯一ID,插入一条记录,生成一个ID:
这个方案利用了数据库的单点特性,其优点为:
无需写额外代码
全局唯一
绝对递增
递增ID的步长确定
其不足为:
需要做数据库HA,保证生成ID的高可用
数据库中记录数较多
生成ID的性能,取决于数据库插入性能
优化方案为:
利用双主保证高可用
定期删除数据
增加一层服务,采用批量生成的方式降低数据库的写压力,提升整体性能
增加服务后,DB中只需保存当前最大的ID即可,在服务启动初始化的过程中,首先拉取当前的max-id: