dubbo服务发布原理(分布式专题 – Dubbo + Zookeeper)
雪花算法的原理
第一位符号位固定为0 ,41位时间戳 ,10位workld ,12位序列号 ,位数可以有不同实现
优点:每个毫秒值包含的ID值很多 ,不够可以变动位数来增加 ,性能佳 (依赖workld的实现) 。.时间戳值在高位 ,中间是固定的机器码 ,自增的序列在低位 ,整个ID是趋势递增的 。0能够根据业务场景数据库节点布置灵活调整bit位划分 ,灵活度高 。
缺点:
强依赖于机器时钟 ,如果时钟回拔 ,会导致重复的ID生成,所以一般基于此的算法发现时钟回拨 ,都会抛异常.
处理 ,阻止ID生成,这可能导致服务不可用 。为什么Zookeeper可以用来作为注册中心
可以利用Zookeeper的临时节点和watch机制来实现注册中心的自动注册和发现 ,另外Zookeeper中的数据都是存在内存中的 ,并且Zookeeper底层采用了nio ,多线程模型 ,所以Zokeeper的性能也是比较高的 ,所以可以用来作为注册中心 ,但是如果考虑到注册中心应该是注册可用性的话 ,那么Zookeeper则不太合适 ,因为Zookeeper是CP的 ,它注重的是一致性 ,所以集群数据不-致时 ,集群将不可用 ,所以用Redis 、Eureka 、Nacos来作为注册中心将更合适 。
数据库实现分布式锁的问题及解决方案
利用唯一约束键存储key,insert成功则代表获取锁成功 ,失败则获取失败 ,操作完成需要删除锁问题:
非阻塞,锁获取失败后没有排队机制 ,需要自己编码实现阻塞 ,可以使用自旋 ,直到获取锁;
不可重入 ,如果加锁的方法需要递归 ,则第二次插入会失败 ,可以使用记录线程标识解决重入问题;
死锁 ,删除锁失败 、则其他线程没办法获取锁 ,可以设置超时时间 、使用定时任务检查.
数据库单点故障 ,数据库高可用 。创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!