分布式系统ID的几种生成办法
前言 一般单机或者单数据库的项目可能规模比较小,适应的场景也比较有限,平台的访问量和业务量都较小,业务ID的生成方式比较原始但是够用,它并没有给这样的系统带来问题和瓶颈,所以这种情况下我们并没有对此给予太多的关注。但是对于大厂的那种大规模复杂业务、分布式高并发的应用场景,显然这种ID的生成方式不会像小项目一样仅仅依靠简单的数据自增序列来完成,而且在分布式环境下这种方式已经无法满足业务的需求,不仅无法完成业务能力,业务ID生成的速度或者重复问题可能给系统带来严重的故障。所以这一次,我们看看大厂都是怎么分析和解决这种ID生成问题的,同时,我也将我之前使用过的方式拿出来对比,看看有什么问题,从中能够得到什么启发。 分布式ID的生成特性 在分析之前,我们先明确一下业务ID的生成特性,在此特性的基础上,我们能够对下面的这几种生成方式有更加深刻的认识和感悟。 全局唯一 ,这是基本要求,不能出现重复。 数字类型,趋势递增 ,后面的ID必须比前面的大,这是从MySQL存储引擎来考虑的,需要保证写入数据的性能。 长度短 ,能够提高查询效率,这也是从MySQL数据库规范出发的,尤其是ID作为主键时。 信息安全 ,如果ID连续生成,势必会泄露业务信息,甚至可能被猜出,所以需要无规则不规则。 高可用低延时 ,ID生成快,能够扛住高并发,延时足够低不至于成为业务瓶颈。 分布式ID的几种生成办法