码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • zookeeper如何保证单一系统镜像


    官方文档描述

    文档地址:https://zookeeper.apache.org/doc/current/zookeeperOver.html

    ZooKeeper 非常快速且非常简单。但是,由于它的目标是成为构建更复杂服务(例如同步)的基础,因此它提供了一组保证。这些是:

    • 顺序一致性——来自客户端的更新将按照它们发送的顺序应用。
    • 原子性——更新要么成功要么失败。没有部分结果。
    • 单一系统映像——无论连接到哪个服务器,客户端都将看到相同的服务视图。即,即使客户端故障转移到具有相同会话的不同服务器,客户端也永远不会看到系统的旧视图。
    • 可靠性——应用更新后,它将一直持续到客户端覆盖更新为止。
    • 及时性——系统的客户视图保证在特定时间范围内是最新的。

    英文单一系统映像描述

    Single System Image - A client will see the same view of the service regardless of the server that it connects to. i.e., a client will never see an older view of the system even if the client fails over to a different server with the same session.

    思考

    很多人会认为这句话的含义是:

    1. 当客户端A将资源R的值进行了修改,R1->R2->R3的情况下,客户端B只要请求是在A客户端收到R值修改成功的响应后到达的ZooKeeper服务器,那么客户端B看到的R值必然是R3.

    我的疑惑是

    假如有5个节点的集群,leader+4个follower。 leader写入数据为R1->R2->R3,因为ZAB协议并不是强一致性,follower1、follower2的数据为R1->R2->R3(保证写入成功),但是follower3是R1->R2,follower4是R1.此时客户端和follower3有连接,读取到的数据为R2;

    1. 但写入方认为R3已经写入成功,这不就是最终一致了。
    2. 客户端和follower3因网络原因断开连接,连接到了follower4会不会读到R1。如果读到,就违反了顺序一致性

    针对这两个问题查了下资料

    • https://stackoverflow.com/questions/40797443/how-zookeeper-guarantees-single-system-image
    • https://github.com/apache/zookeeper/pull/931

    问题1: 一致性问题

    zk保证的是
    及时性——系统的客户视图保证在特定时间范围内是最新的。
    时间范围可以通过配置修改:syncLimit tickTime 来实现

    问题3:顺序性

    zk保证的是,如何客户端读取到R2,就可能读取到R2之前的值;实现方式是: 客户端保留了一个 zxid,如果它从较新的服务器读取了一些数据,它将不会连接到较旧的 follower

    看官方文档的另一个收获是

    3.6.0 中的新增功能:客户端还可以在 znode 上设置永久的递归监​​视,这些监视在触发时不会被删除,并且会递归地触发已注册 znode 以及任何子 znode 上的更改。

    New in 3.6.0: Clients can also set permanent, recursive watches on a znode that are not removed when triggered and that trigger for changes on the registered znode as well as any children znodes recursively.

    可以不用触发一次,添加一次监听了

  • 相关阅读:
    gitlab将本地文件项目上传至gitlab服务
    个人网页设计成品DW静态网页 HTML网页设计结课作业 web课程设计网页规划与设计 Web大学生个人网页成品 web网页设计期末课程大作业
    粒子群算法总结(保证受益匪浅)——针对多元函数的不同维度的速度和位置约束
    快速排序的简单理解
    LeetCode_排序_中等_912.排序数组
    IGBT和SiC MOSFET的驱动参数的计算方法
    vscode windows mingw配置
    急需一个可以短视频配音的手机App~
    JAVA IO——IO原理和分类
    [一篇读懂]C语言二讲:运算符与表达式
  • 原文地址:https://blog.csdn.net/qq_23934475/article/details/127886547
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号