分布式ID生成服务的思考
ID生成服务,应该是任何一间互联网公司都需要用到的一项基础设施。最近研究了美团点评开源的分布式ID生成服务Leaf(博客),有了一些思考。
美团点评这个Leaf
方案,我觉得是比较复杂的,包括使用了雪花算法、数据库保存业务类型,以及为了保证响应速度而做了异步更新和双Buffer等等。
我对于唯一ID的几个观点:
最好是足够简短的纯数字ID,比如QQ号码,我想很多人应该都记得自己的QQ号,也愿意去记忆。简短的数字订单号很方便客人遇到问题,电话咨询客服时,可以报上这一串订单号,用户体验会比较好。当然你可以反驳说淘宝、京东的订单号都是很长的一串,客服咨询时也没必要报订单号等等,这个就见仁见智了。
实现原理越简单越好,简单的系统发生问题的可能性越低。针对第一点,简短数字ID又要保证全局唯一性,想用算法来解决是很难的,最容易想到的就是用空间换时间,预先生成一大批ID,使用的时候再逐个去取。虽然看上去是很笨,但是很有效啊。
依赖的东西越少越好,最好预生成的ID就放在跑服务的机器上,而不需要又另外维护一套数据库,还要考虑数据库的分布式部署和性能。
基于以上的想法,我实现了一个简单粗暴的预生成唯一纯数字ID生成服务:idgend。目前完成度还比较低,但是也印证了我的想法是可行的。
Last modified on 2020-03-27