今天是2020-12-23。
最后两节就看看算法,也算是不用动手了,就是烧脑。
一。分布式系统全局唯一id的生成规则要求
1.全局唯一:不能出现重复的id
2.趋势递增:
3.单调递增:保证全局情况下,生成的id一定大于上一个id
4.信息安全:如果id连续,可能会被轻易的获取信息,所以要让id无规则/不规则,还要满足第三条
5.含时间戳:可以方便了解id的生成时间
二。分布式系统全局唯一id的可用性要求
1.高可用:发一个获取分布式全局id的请求,服务器要保证百分之99的情况下能创建并响应给我需要的id
2.低延迟:服务器响应的速度要非常快,流量大的系统不允许高延迟
3.高qps:要承担的住同一时刻大数量的流量
三。通常会想到的方案
- UUID,在这个地方的不足,存入数据库时的性能比较差:
1.分布式id一般会作为主键,无法预测生成顺序,就不能以有序数字来存储。而且mysql推荐主键尽量短,但是UUID太长
2.分布式id作为主键,就会有主键索引。mysql的索引使用b+树实现,每一次存入新的UUID,都会修改底层的B+树,但UUID是无序的,这个修改的成本就会很大。存入时是无序的,不但会导致中间节点分裂