刚怀孕能同房吗,blbl,广西旅游-单台相声,相声表演艺术家汇聚,相声节信息发布

admin 2019-05-16 阅读:301

欢迎重视头条号:老顾聊技能

精品原创技能共享,常识的组装工


目录

  1. 前语
  2. 回忆雪花算法
  3. 优化思路
  4. 发动场景的全体流程
  5. 服务运转中流程
  6. 暂时节点的效果
  7. 总结

前语

老顾之前在文章共享大厂分布式仅有ID规划计划,快来围观 中介绍了分布式仅有ID的一种计划,此计划满意了ID的基本要求

1、整个体系ID仅有

2、ID是数字类型,并且是趋势递加的

3、ID简略,查询功率快

但不适用订单ID的场景,由于竞争对手能够猜测咱们体系的订单量。之前老顾也介绍过redis的生成ID的计划,此计划比较简单,事务没有特殊要求的话引荐运用redis计划

这篇文章老顾介绍一下美团公司的开源的snowflake计划。

回忆雪花snowflake算法

雪花算法生成64位的二进制正整数,然后转换成10进制的数。64位二进制数由如下部分组成:

  • 1位标识符:始终是0
  • 41位时刻戳:41位时刻截不是存储当时时刻的时刻截,而是存储时刻截的差值(当时时刻截 - 开端时刻截 )得到的值,这儿的的开端时刻截,一般是咱们的id生成器开端运用的时刻,由咱们程序来指定的
  • 10位机器标识码:能够布置在1024个节点,假如机器分机房(IDC)布置,这10位能够由 5位机房ID + 5位机器ID 组成
  • 12位序列:毫秒内的计数,12位的计数次序号支撑每个节点每毫秒(同一机器,同一时刻截)发生4096个ID序号

长处:

1、此计划每秒能够发生409.6万个ID,功用快

2、时刻戳在高位,自增序列在低位,整个ID是趋势递加的,依照时刻有序递加

3、灵敏度高,能够依据事务需求,调整bit位的区分,满意不同的需求

缺陷:

1、依靠机器的时钟,假如服务器时钟回拨,会导致重复ID生成

在分布式场景中,服务器时钟回拨会常常遇到,一般存在10ms之间的回拨;小伙伴们就说这点10ms,很短能够不考虑吧。但此算法便是建立在毫秒等级的生成计划,一旦回拨,就很有或许存在重复ID。

优化思路

雪花算法的问题便是时钟回拨导致,那咱们能不能尽量防止回拨呢?思路便是:咱们在体系中监控每台时钟是否回拨?假如回拨了,咱们作一下调整就行了。

上图是全体架构,运用zookeeper中间件的特性

一个ID服务便是一个生成ID的运用,多个能够确保高可用

咱们先看耐久化节点的效果:便是保存各个ID服务的节点信息,并保存时钟

发动场景的全体流程

1、ID服务发动,注册到zookeeper

2、查看是否之前注册过,假如没有注册过,就把此服务注册到zookeeper中

3、节点的信息运用次序节点,确保仅有。ID服务再把此生成的次序ID当作workID,保存到本地文件体系中,这样今后再次发动时,就拿着此workId到zk上面去查找,是否之前注册过(其实这个逻辑,就完成了主动发workId的功用,不需求人为到每个ID服务去装备,极大的减少运维本钱)

4、假如之前没有注册过,生成了ID服务的zk节点,并把本地的时钟保存到此zk节点中。(保存时需求判别检测,此时钟是否正常?怎样做呢?留一个思考点)。

5、假如在注册的时分,发现现已注册了,要去比较一下本地时钟 和 zk节点上面的时钟,假如本地时钟 大于 zk上的,表明正常,发动成功不然表明本地的时钟发生了回拨,发动不成功,发动报警机制。

服务运转中的流程

1、ID服务发动成功,供给ID服务

2、ID服务会每隔3秒,把本地时钟上签到zk节点上面

暂时节点的效果

小伙伴们还记得老顾留下的思考点,怎样判别本地时钟是否正确?便是运用暂时节点。

1、遍历一切正在供给服务的ID服务器(IP + port),获取一切的ID服务器当地时钟,求平均值sum(time)/nodeSize。

2、如abs( 本地体系时刻-sum(time)/nodeSize ) < 阈值,以为当时体系时刻精确,正常发动服务,一起写暂时节点leaf_temporary/${self} 保持租约

3、如大于阈值,以为时钟不正确,发动不成功,报警

总结

美团的雪花算法中心思维,就介绍到这儿,期望能够协助小伙伴。假如需求源码,能够去github中leaf-snowflake。值得一看。全体完成逻辑比较明晰。

或许小伙伴们用不到,不过最主要的是了解他们的规划思维,和处理计划。


-End-

如有收成,请帮助转发,您的鼓舞是作者最大的动力,谢谢!

10几年的经历实战共享

相关微服务,分布式,高并发,高可用,企业实战,干货等原创文章正在路上

欢迎重视头条号:老顾聊技能

精品原创技能共享,常识的组装工

引荐阅览

1、共享大厂分布式仅有ID规划计划,快来围观

2、你想了解一线大厂的分布式仅有ID生成计划吗?

3、你知道怎样处理大数据量吗?(数据拆分篇)

4、怎样永不搬迁数据和防止热门? 依据服务器目标分配数据量(揭秘篇)

5、你知道怎样分库分表吗?怎样做到永不搬迁数据和防止热门吗?

6、你了解大型网站的页面静态化吗?

7、你知道怎样更新缓存吗?怎样确保缓存和数据库双写一致性?

8、你知道怎样处理DB读写别离,导致数据不一致问题吗?

9、DB读写别离情况下,怎样处理缓存和数据库不一致性问题?

10、你真的知道怎样运用缓存吗?

11、怎样运用锁,防止缓存击穿?重构思维的重要性

12、海量订单发生的事务高峰期,怎样防止音讯的重复消费?

13、你知道怎样保证出产端100%音讯投递成功吗?