ZooKeeper常见问题和解决方案--《我和开源的故事》

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: ZooKeeper常见问题和解决方案--《我和开源的故事》。这里是zookeeper的翻译,也是作者的学习笔记,文中内容添加了不少作者本人的思考。
这里是Developer的最后一篇,本来想参考多课网的10篇是哪几篇,结果他删除了。嘤嘤嘤。

使用zk创建高级结构的指南

    本文写的是zookeeper实现高阶函数的方法,这些只需要在客户端实现即可,无需zk支持。
    虽然zk使用异步通知,但是你依然可以用它构建同步一致性原语,比如队列和锁。因为zk规定了更新的总顺序,而且可以通过机制查看这个顺序。
    下文将试图采取最佳方案去避免轮询、定时查询或其他可能,导致“羊群效应”的操作。这样可以避免流量激增,或可伸缩性被限制。
    文章有限,提及内容不多,比如可撤销的读写优先锁就没提及。

关于错误处理的重要事项

碎碎念:为啥是在这里,因为这篇文章不是一口气写完的。心境总是在不断的变化,想自己也不是营销人才。靠自媒体赚钱这条路,好像也行不通的样子。不如,老老实实的让他回归我的笔记用途,如果能有幸帮助到有缘的你,那是我的幸运。

使用这些方法时可能会出现一些可恢复错误。例如,有部分方法使用了临时顺序节点。创造临时顺序节点的时候会有错误出现:create()在服务上成功,然后在服务器想将节点名称返回给客户端的时候崩溃。由于客户端重连时,该会话仍然有效,所以客户端很难知道节点是否创立。下面的这个会解决这个问题。

开箱即用的应用程序:名称服务、配置、组成员

名称服务和配置是zookeeper的两个主要应用,有zookeeper的api提供。
zookeeper的另一个功能是组成员关系。组由一个节点表示,其余成员可以在组节点下创建临时节点(树呀)。当zk检测到失败时,异常失败的成员节点将被自动删除。

屏障

分布式系统可以用屏障一组节点在都满足指定条件时再开始继续处理。zookeeper通过屏障节点实现

  • 1 客户端调用zk的exists(),并设置watch为true
  • 2 如果exists()返回false,则屏障已经不在,客户端可以继续
  • 3 如果exists()返回true,则屏障仍在,客户端可以等待屏障节点的watch事件
  • 4 但watch事件被触发,再次重复2 3

双重屏障

双重屏障可以同步计算的开始。进程够数开始计算,都计算完,删除节点,进程离开。

原来屏障之前有学过,那么后面的我就不赘述了。

队列

分布式队列是一种常见的数据结构。zookeeper实现分布式队列的方法:

  • 1 指定znode保存队列,即队列节点
  • 2 通过create()将内容放入队列
  • 3 放入队列的节点以queue-x结尾。由于调用create的时候序列性和临时性都设置为true所以新路径名的格式:path-to-queue-node/queue-X,x是单调递增的数字
  • 4 客户端想移除时,调用getChildren()函数,并在节点上设置watch为true。
最近读书的时候,看到有个人的评论:盛大世界,日升月落,四季更迭。 突然就感觉,哦豁,人生在世一场修行。

优先级队列

实现优先级队列,需要做出两个改变:1,路径名以queue-YY结尾,
~~未完待续

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
目录
相关文章
|
Java 测试技术 API
Zookeeper开源客户端Curator之基本功能讲解
Zookeeper开源客户端Curator之基本功能讲解
590 0
Zookeeper开源客户端Curator之基本功能讲解
|
存储 缓存 Java
详解Zookeeper(铲屎官)在众多中间件的应用和在Spring Boot业务系统中实现分布式锁和注册中心解决方案
`ZooKeeper `是一个**开放源码的分布式协调服务**,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户。 分布式应用程序可以基于` Zookeeper` 实现诸如**数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列**等功能。
23116 11
详解Zookeeper(铲屎官)在众多中间件的应用和在Spring Boot业务系统中实现分布式锁和注册中心解决方案
|
Kubernetes Java 开发者
【测评体验】探索阿里云MSE-Nacos的开源版
本文通过体验测评,分享对阿里云MSE-Nacos的开源版的测评,重点关注其在开源选型、最佳实践和开源需求方面的表现。通过对性能、功能、控制台体验、上下游生态和社区体验的比对,以及对使用过程中遇到的问题和需求的探讨,读者可以了解阿里云MSE-Nacos开源版的优势、挑战和未来发展方向。
445 1
【测评体验】探索阿里云MSE-Nacos的开源版
|
运维 供应链 负载均衡
带你读《云原生架构白皮书2022新版》——阿里云 MSE 云原生网关助力斯凯奇轻松应对双 11 大促
带你读《云原生架构白皮书2022新版》——阿里云 MSE 云原生网关助力斯凯奇轻松应对双 11 大促
279 6
|
弹性计算 运维 监控
全托管:MSE+SAE 微服务应用全托管解决方案
进入新世纪互联网时代后,以腾讯和阿里为代表的社交电商巨头开始面临流量和复杂度大增的挑战。此时的研发团队相较于之前已经明显扩大,并开始实践 SOA /微服务架构,比如阿里的 HSF。
1325 0
全托管:MSE+SAE 微服务应用全托管解决方案
|
Java API Apache
【分布式】Zookeeper使用--开源客户端(一)
上一篇博客已经介绍了如何使用Zookeeper提供的原生态Java API进行操作,本篇博文主要讲解如何通过开源客户端来进行操作。
135 0
【分布式】Zookeeper使用--开源客户端(一)
|
运维 Kubernetes Cloud Native
让微服务开源更普惠,阿里云微服务引擎MSE全球开服
MSE 于2020年10月在国内开启商业化服务,目前已吸引近万客户使用,用于在云上更低成本构建、更稳定运行微服务架构。此次,MSE 向阿里云国际站开放服务,旨在帮助更多客户享受到更加普惠的微服务技术。
461 0
|
缓存 NoSQL 数据库
别再纠结Redis/zookeeper,告诉你分布式锁的正确解决方案(下)
别再纠结Redis/zookeeper,告诉你分布式锁的正确解决方案(下)
122 0
别再纠结Redis/zookeeper,告诉你分布式锁的正确解决方案(下)
|
Java API 开发者
【分布式】Zookeeper使用--开源客户端(二)
上一篇博客已经介绍了如何使用Zookeeper提供的原生态Java API进行操作,本篇博文主要讲解如何通过开源客户端来进行操作。
165 0
|
分布式计算 Java API
Zookeeper开源客户端Curator之Master/Leader选举
Zookeeper开源客户端Curator之Master/Leader选举
431 0