Zookeeper如何实现全局唯一ID生成机制?
- 内容介绍
- 文章标签
- 相关推荐
本文共计414个文字,预计阅读时间需要2分钟。
系统生成唯一ID有多种方案,如数据库的auto_increment,UUID,Redis的ID生成(使用INCR和INCRBY),Twitter的snowflake算法,ZooKeeper生成ID,MongoDb的ObjectId等。下面简要介绍ZooKeeper的ID生成。
ZooKeeper利用其ZAB协议和一致性机制,在分布式环境中实现高效的唯一ID生成。以下是ZooKeeper生成ID的基本步骤:
1. 创建一个临时有序节点,节点名称包含服务器编号、进程编号、时间戳和序列号。
2.由于节点创建是有序的,通过读取临时有序节点的序列号,可以获取唯一ID。
3.删除临时节点,释放资源。
这种方式可以保证分布式系统中每个节点生成的ID是唯一的,且具有较高的性能。
系统唯一ID生成分案有很多种,例如:数据库 auto_increment,UUID,Redis生成ID(Redis原子操作INCR和INCRBY),Twiitter的snowflake算法,ZooKeeper生成ID,MongoDb的ObjectId,下面我们就看一下ZooKeeper实现分布式系统唯一ID。
public int idGen() throws Exception { String zkAddress = "127.0.0.1:2181"; String idNode = "/id"; //重试策略 RetryPolicy retry = new RetryNTimes(3, 2000); //创建连接客户端 CuratorFramework client = CuratorFrameworkFactory.builder(). connectString(zkAddress). sessionTimeoutMs(5000). connectionTimeoutMs(10000). retryPolicy(retry). build(); //启动客户端 client.start(); if (null == client.checkExists().forPath(idNode)) { client.create().withMode(CreateMode.PERSISTENT) .forPath(idNode); } Stat stat = client.setData().withVersion(-1).forPath(idNode); return stat.getVersion(); }
注意:换了ZooKeeper,数据就要从0开始,还没有直接可以修改指定数字那里开始,只能写程序一点点的创建,直到达到你要想的数据 ,这是它最大的弊端。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易盾网络。
本文共计414个文字,预计阅读时间需要2分钟。
系统生成唯一ID有多种方案,如数据库的auto_increment,UUID,Redis的ID生成(使用INCR和INCRBY),Twitter的snowflake算法,ZooKeeper生成ID,MongoDb的ObjectId等。下面简要介绍ZooKeeper的ID生成。
ZooKeeper利用其ZAB协议和一致性机制,在分布式环境中实现高效的唯一ID生成。以下是ZooKeeper生成ID的基本步骤:
1. 创建一个临时有序节点,节点名称包含服务器编号、进程编号、时间戳和序列号。
2.由于节点创建是有序的,通过读取临时有序节点的序列号,可以获取唯一ID。
3.删除临时节点,释放资源。
这种方式可以保证分布式系统中每个节点生成的ID是唯一的,且具有较高的性能。
系统唯一ID生成分案有很多种,例如:数据库 auto_increment,UUID,Redis生成ID(Redis原子操作INCR和INCRBY),Twiitter的snowflake算法,ZooKeeper生成ID,MongoDb的ObjectId,下面我们就看一下ZooKeeper实现分布式系统唯一ID。
public int idGen() throws Exception { String zkAddress = "127.0.0.1:2181"; String idNode = "/id"; //重试策略 RetryPolicy retry = new RetryNTimes(3, 2000); //创建连接客户端 CuratorFramework client = CuratorFrameworkFactory.builder(). connectString(zkAddress). sessionTimeoutMs(5000). connectionTimeoutMs(10000). retryPolicy(retry). build(); //启动客户端 client.start(); if (null == client.checkExists().forPath(idNode)) { client.create().withMode(CreateMode.PERSISTENT) .forPath(idNode); } Stat stat = client.setData().withVersion(-1).forPath(idNode); return stat.getVersion(); }
注意:换了ZooKeeper,数据就要从0开始,还没有直接可以修改指定数字那里开始,只能写程序一点点的创建,直到达到你要想的数据 ,这是它最大的弊端。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易盾网络。

