依赖zookeeper组件的一种高可用实践

本文介绍了如何利用Zookeeper生成全局唯一的workId,探讨了Zookeeper的分布式锁实现以及在电商系统分库分表中的应用。文中提到了早期和优化后的部署模式,优化后采用Observer角色提升读性能并降低故障影响。
摘要由CSDN通过智能技术生成

背景

       电子商务系统大量使用mysql数据库作为其交易和存储的系统; 随着商户和用户量的不断增长,mysql中存储的数据量会越来越大,这时把所有数据存储在一张表或者一个数据库中会极大的影响系统的性能和安全。 分库分表是业界一个比较通用的方案,并且也比较成熟。

       为了进行分库分表,我们需要为业务表中设置一个唯一的id;举个商品中心的例子:为了把一个租户下的所有菜品,菜价,菜品分类放在一下,会在所有这些表上加上一个全局唯一的租户id。

全局id算法

          经过我们前期的调研和讨论,我们最终选择了twitter的snowflake(详细介绍请参考分布式自增ID服务。),  算法生成64位的id如下:

未用
毫秒数
datacenterId
workId
毫秒内序列号
1bit 41bit 5bit 5bit 12bit

       该算法在本地进程运行效率非常高,但datacenterId, 和workId需要在一个集群中被分配成唯一的;在实际应用中,datacenterId可能没有,那workId就是10个bit。

       下面章节将重点介绍唯一workId的生成过程。

zookeeper生成唯一的workId

                workId分配算法在zookeeper中的节点

0001001


       invoicing标识进销存服务的节点。

       lock是实现分布式锁的节点,Lock_i是临时顺序节点。

       workId节点下存储每一个机器节点,key=ip1,  data=workId1  (算法保证workId不重复),为永久节点。

 zookeeper的节点类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值