目的
snowflake是常见的id(编号)生成算法,由时间戳+业务id+机器id+序列号组合而成,在电商系统中,用于订单号的生成、支付单号的生成等等。本发号器主要解决在容器化的部署情况时,自动扩容时保持机器id的唯一性。
本解决方案是基于spring boot实现,适合将发号器嵌入在应用内部,而非独立的生成器app:
思路
难点在于扩容时,产生的一个app多个实例。 通过的app启动时在redis中注册自己,同时存在一个心跳,定时向redis中报告自己的存活。 如果挂掉,reids里面清掉自己的实例,根据实例的情况运算workid。