雪花算法(04)机器信息-创新互联

时间部分生成后,下一步是机器信息,占10位。我们这里把机器信息分成两部分,一部分是数据中心id,占5位,一部分是机器id,占5位。这两个id可以在部署项目的时候根据不同的机器自定义不同的id,这样能人为的保障每个id都不同。比如:

成都创新互联专业为企业提供寻乌网站建设、寻乌做网站、寻乌网站设计、寻乌网站制作等企业网站建设、网页设计与制作、寻乌企业网站模板建站服务,10年寻乌做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

雪花算法(04)机器信息

也可以根据自己机器的情况自动生成,不过有很小很小的风险会重复,这个风险碰到的几率不大,当然如果能手动设置还是最好的。我们来说一下自己生成的情况。

我们的jdk库中,有api可以获取本地机器的hostname和hostaddress,我们来看一下:

雪花算法(04)机器信息

我们来把hostname的信息作为数据中心id,把hostaddress的信息作为机器id,如何把两个字符串改为两个数字id呢?其实很简单。获取字符串的字节数组,然后把数组的每个数字相加,对节点数的大值取余:

雪花算法(04)机器信息

每个id的长度都是5,二进制中5个1的大值就是31,所以数据id和机器id每个的大值也是31,下面是获取两个id的方法:

雪花算法(04)机器信息

如果出现异常,返回一个随机数,保证id的可靠性。下面可以定义两个的id了:

雪花算法(04)机器信息

因为机器信息分成了两部分分别生成的,所以,要分别位移,数据id要向左位移17位,机器id要向左位移12位。正好占据10位。

现在我们再来看下第二部分机器信息的限制,这两个id每个的值都占五位,二进制的值从 00000 到11111,整数的范围就是0-31之间共32个。那么雪花算法可以部署的机器数就是32*32=1024个,这是机器信息的限制,现在看这数字也是足足的够了。注意如果自己给这两个参数赋值,也要限制在31之内。

代码地址:https://gitee.com/blueses/snowflake-demo 04

创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。


文章标题:雪花算法(04)机器信息-创新互联
网址分享:http://myzitong.com/article/deocoi.html