分布式ID生成器-雪花算法
旺道朋友圈广告 -> 最新发布
文章图片1

1. 雪花算法(Snowflake)

Twitter的Snowflake算法是在分布式系统中一种自增ID的算法,ID能够按照时间有序生成并且可以做到全局唯一。Twitter对雪花算法的需求:

性能

  • 每个进程每秒至少10k个id
  • 响应速率2ms(包括网络延迟)

协调

对于数据中心内部和跨数据中心的高可用性,生成id的机器无需进行集群协调。也就是说无需再每个服务之间进行通讯进行协调。

直接排序

无需加载整个对象ID就能排序(时间戳)

紧凑

生成的ID要紧凑,换句话说就是ID所占的长度需要适中在完成业务需要的基础上。

高可用

ID生成服务要高可用,例如:存储服务

Tips: Twitter的雪花算法的说明github.com/twitter-arc…

1.1 雪花算法的数据结构

雪花算法生产的ID所占8个字节64位,也就是长整型 long 的长度。

文章图片2

  • 首位bit位表示符号位,生成ID都是正数所以最高位就是0
  • 时间戳(41bit),毫秒级别时间戳。但是实际开发过程中使用的时间戳使用的是时间戳的差值。这个差值=当前时间戳 - 开发者设置的固定时间戳 ,那么41位的时间戳可以使用69年
  • (1L << 41) / (1000L * 60 * 60 * 24 * 365) 算出来差不多69年
  • 机器ID(10bit),一共可以配置1024台机器,如果有多个机房在10bit进行机房和机器好进行组合
  • 序列号(12bit),每一台机器1ms可以生成4096(如果一台机器一毫秒内生成超过4096需要进行保护)

1.2 系统时钟依赖

应该使用NTP来保持系统时钟的准确性。Snowflake 可以防止非单调时钟的影响,也就是时钟倒走。如果您的时钟运行得很快,并且NTP告诉它重复几毫秒,那么 Snowflake 将拒绝生成id,直到上次我们生成id之后的某个时间。在ntp不会让时钟倒转的模式下运行。

如果时间进行回拨那么生成的ID就有可能出现重复的情况。

2. 雪花算法Java实现

/** * @author mxsm * @date 2022/4/9 21:17 * @Since 1.0.0 */public class SnowflakeGenerator {    private static final long FIXED_TIMESTAMP = 1649491204306L;    private int machineId;    private int sequenceNumber = 0;    //最后一次生成ID时间    private volatile long lastTimestamp = -1L;    public SnowflakeGenerator(int machineId) {        this.machineId = machineId;    }    public synchronized long nextId() {        //获取当前时间        long currentTimestamp = System.currentTimeMillis();        //同一个毫秒内生成ID        if(currentTimestamp == lastTimestamp){            sequenceNumber += 1;            //处理一秒超过4096个            if(sequenceNumber > 4096){                while (currentTimestamp <= lastTimestamp){                    currentTimestamp = System.currentTimeMillis();                }                sequenceNumber = 0;            }        }else {            //重置序列号            sequenceNumber = 0;        }        lastTimestamp = currentTimestamp;        return ( (currentTimestamp - FIXED_TIMESTAMP) << 22) | (machineId << 12) | sequenceNumber;    }}

Tips: 代码地址
https://github.com/mxsm/distributed-id-generator/tree/main/generator-snowflake

以上代码是简单的实现。

3.优缺点

优点:

  • ID生成服务与服务之间没有协调。靠要单独进行工作。
  • 在ID生成服务本地生成没有网络的消耗效率高,高性能高可用:生成时不依赖于数据库,完全在内存中生成
  • 高吞吐:每秒钟能生成数百万的自增 ID

缺点:

  • 依赖与系统时间的一致性,如果系统时间被回调,或者改变,可能会造成 ID 冲突或者重复。

Tips: 在本人公司没有单独部署雪花算法的生产服务器,而是将生成器直接集成到了每个项目的代码中。机器ID是IP地址取模32后的值。所以在高并发下可能会出现小概率的重复情况。在可允许的范围内

4. 总结

雪花算法的服务集群没有服务之间的协调和同步。可以说是用单机组成的高可用分布式ID可用集群。雪花算法依赖时间戳,如果时间戳出现回拨的情况就有可能ID重复的情况。总体来说雪花算法相对于Redis实现 UUID 以及MySQL有更优。



作者:蚂蚁背大象
链接:
https://juejin.cn/post/7084624216074485774


教育培训机构-如何策划节日招生?
做教育培训,最重要的事情莫过于招生了。面对不同的学员,招生方…于招生。目标不同,活动策划也会不一样。② 活动主题要鲜明不仅主题要鲜明,主题之间要有连续性。就像看连续剧一样,一集接一集,一环扣一环。策划好一系列活动,一个接一个来,从多个角度延续活动的宣传,突出主题,引起关注度。常用的招生方式有:体验课招…-------------想要获得更多运营技巧、doc文案,
教育培训:如何提高满班率和续班率
什么是满班率?就是实际人数除以计划招生人数,这个值就是满班率…员有流失是正常的,但要保证一个概率。在保障老学员续期的基础上,我们也要大胆创新,开设网络课程,拓宽招生区域。实地课程录制后,进一步发行到商弈云课上,通过商弈云课系统转成真实流量,网上有人点击观看,点赞,可以按点播量分佣金。助你在日常的营销推…-----------------------想要获得更多运
培训机构难盈利的问题出在哪里,如何实现盈利?
竞争白热化实地培训班、托管辅导班竞争白热化了,利润越来越稀薄…现没有多少盈利。还有一部分负责人在刚招生时,掌握了不少资金,开始盲目扩张,盲目做课程推广,以期待获得更多生源和收费,从而使培训班陷入了这种恶性循环的陷阱里。其实这些到手的钱,并不是你的利润,而是你未来要支出的钱。如遇到行业快速发展时期,或者…-----想要获得更多运营技巧、doc文件,请“关注”并“转
“差异化”经营是网络培训赚钱的关键所在
“差异化经营”这个词,相信大多数人都耳熟能详,但要做到的却是…。在现有的基础上更新升级或者资源整合就是对现有的产品或者技术,进行升级版本,或者通过一些资源整合,成一个项目。你的技能以前是用来生产或制造产品,现在是把技能升级成知识培训,转换云课堂。直白一点就是可以让老师自行录好课程并上传到学校的商弈云课…在着缺点和不足之处。在创新改革时,要从功能、服务、价格等方面
教育培训行业是如何运作的?
以前读书时,学校附近有个小摊卖鸡蛋灌饼。刚开始的时候只有一家….%,剩下的一对一和多人大班其实市场份额都很小。家长报培训班,是希望孩子能够学到知识。老师通过课上教学和课后辅导来满足孩子的需求,达到成绩提高的目标。我见过上百人的大培训班,为什么一个班这么多人?因为是名师讲课,但人太多坐后面,基本听不到重…是你的核心竞争力。想要得到用户的认同,你就必须做到产品质量好
旺道:实体店怎么做网络营销?
年纪大了,体力不好了,便赚不了什么钱了。所以,一定要在年轻的…写文案都是非常头痛的事情,那么下面我会给大家提供一个解决方案。在互联网营销系统里面有很多细节营销,软文营销就是其中一种,但好多小白头痛写文章,所以可以用这个方法也一样可以植入广告语,或者是图片广告,轮显切换广告,使用 旺道营销系统,也就是每…以帮你吸引海量精准粉丝。有了粉丝,你通过广告、产品、服务就可
旺道:圈里圈外,铁饭碗距离瓷饭碗究竟有多远?
中国人爱混圈子,从线下一直混到线上,各种奇形怪状的圈子勾勒出…不能推则敷衍了事,盼着混到主任科员退休;一种是老黄牛式,踏踏实实、兢兢业业工作,但拙于人际关系,活干得最多,但依旧不见晋升迹象;还有一种是提线木偶式,你扯一下线他动一下,好像脑子和身体是分离的。我突然一拍脑袋,这是提前衰老的迹象啊,工作内容…即使选择留在铁饭碗圈里,也应保有随时离开的思想警惕和进行必要
旺道:微信要双开了,朋友圈推广更好做了
现在手机只能登一个微信,如两个,三个微信的小伙伴们就只能退出…动推广工具、 设置头像点击头像图标,点“+”选择图片,可以上传你的企业,个人头像,产品服务等。旺道微信朋友圈广告免费朋友圈广告-旺道、 设置推广主题点“广告”,再点“+”设置推广的主题(类别),填好中文主题,以及你的网址。教你不花一分钱做朋…简直就是一劳永逸哟。如果你点开发布的文章看不到广告,那就是你
旺道:如何能让网站多个关键词排名百度首页?
最近接了一个单,做婴儿游泳馆加盟的。优化推广范围是全国,但是…泳馆加盟哪家好”、“婴儿游泳加盟多少钱”这类与我息息相关的词。如何能让网站多个关键词排名百度首页?但客户并不认同,客户说这个词指数低,或者说搜的人不多。是,这是一方面原因。但是,指数低有什么关系,你是卖产品还是卖指数。搜的人不多有什么关系,…实现广告效果最大化,来满足大众化的广告需求。对于这样的四两拔
旺道:如何成为网络营销达人?这个技能帮你节省80%的时间
在某次名师讲坛上,听到了一个让人警醒的故事。说有个村子缺水,…准的产品。现在已经不是新鲜事物,好多企业因为百度竞价的高额费用,头疼不已,所以做网站关键词优化排名,成为了企业必选的推广项目。做优化也要做到有成效,不然就是一分钱也是昂贵的。用 旺道智能机器人 就可以持续代替人工去做,它非常聪明,只要你够耐…手,设备先进,你多努力奔跑也于事无补。简单说,要去一个地方,

此文章来源来互联网,如果你有任何版权冲突,可以联络我们,微信号:WANCOME,QQ:1444641。加我们时,请说明来意,我们将优先处理你的问题。




商弈云推  | 一键推  | 随手推  | 圈推广  | 跨圈推
粤ICP备10213132号
旺道商标注册证号:8608864
Copyright © 2016 环企网络信息科技有限公司 版权所有