1、什么是zookeeper?
- ZooKeeper是 一 个 开 放 源 码 的 分 布 式 协 调 服 务 , 它 是 集 群 的 管 理 者 , 监 视 着 集 群中 各 个 节 点 的 状 态 根 据 节 点 提 交 的 反 馈 进 行 下 一 步 合 理 操 作 。 最 终 , 将 简 单 易 用的 接 口 和 性 能 高 效 、 功 能 稳 定 的 系 统 提 供 给 用 户。
2、zookeeper有哪些作用及优点?
- zookeeper保证了分布式的一致性,且有以下的一致性特性:
- 顺序一致性
- 原子性
- 单一视图
- 可靠性
- 实时性(最终一致性)
- 分 布 式 应 用 程 序 可 以 基 于Zookeeper实 现 诸 如 数 据 发 布/订 阅 、 负 载 均 衡 、 命 名服 务、分 布 式 协 调/通 知、集 群 管 理、Master [mɑːstə(r)] 选 举、分 布 式 锁 和 分 布 式 队 列 等 功 能。
3、zookeeper是如何处理客户端的读请求与写请求?
- 客 户 端 的 读 请 求 可 以 被 集 群 中 的 任 意 一 台 机 器 处 理 ,如 果 读 请 求 在 节 点 上 注 册 了监 听 器,这 个 监 听 器 也 是 由 所 连 接 的zookeeper机 器 来 处 理。
- 对 于 写 请 求,这 些请 求 会 同 时 发 给 其 他zookeeper机 器 并 且 达 成 一 致 后,请 求 才 会 返 回 成 功。因 此,随着zookeeper的 集 群 机 器 增 多,读 请 求 的 吞 吐 会 提 高 但 是 写 请 求 的 吞 吐 会 下 降。
4、zookeeper提供了什么 ?
- 文件系统:Zookeeper提 供 一 个 多 层 级 的 节 点 命 名 空 间(节 点 称 为znode [noʊd])。与 文 件 系 统 不同 的 是 , 这 些 节 点 都 可 以 设 置 关 联 的 数 据 , 而 文 件 系 统 中 只 有 文 件 节 点 可 以 存 放数 据 而 目 录 节 点 不 行 。Zookeeper为 了 保 证 高 吞 吐 和 低 延 迟 , 在 内 存 中 维 护 了 这 个 树 状 的 目 录 结 构 ,这种 特 性 使 得Zookeeper不 能 用 于 存 放 大 量 的 数 据 , 每 个 节 点 的 存 放 数 据 上 限为1M。
- 通知机制:zookeeper提供了Zookeeper Watcher [ˈwɑːtʃər] 监听器,用于数据变更通知; Zookeeper允 许 客 户 端 向 服 务 端 的 某 个Znode注 册 一 个Watcher监 听 , 当 服 务端 的 一 些 指 定 事 件 触 发 了 这 个Watcher, 服 务 端 会 向 指 定 客 户 端 发 送 一 个 事 件 通知 来 实 现 分 布 式 的 通 知 功 能 , 然 后 客 户 端 根 据Watcher通 知 状 态 和 事 件 类 型 做 出业 务 上 的 改 变 ;
- zookeeper watcher 的工作机制:①客户端注册watcher ; ②服务端处理watcher ; ③ 客户端回调watcher;
- watcher的特性总结:
- 一次性:无 论 是 服 务 端 还 是 客 户 端,一 旦 一 个Watcher被 触 发,Zookeeper都 会 将 其 从 相应 的 存 储 中 移 除 。 这 样 的 设 计 有 效 的 减 轻 了 服 务 端 的 压 力 , 不 然 对 于 更 新 非 常 频繁 的 节 点 , 服 务 端 会 不 断 的 向 客 户 端 发 送 事 件 通 知 , 无 论 对 于 网 络 还 是 服 务 端 的压 力 都 非 常 大 。
- 客户端串行执行:客 户 端Watcher回 调 的 过 程 是 一 个 串 行 同 步 的 过 程 。
- 轻量:
- Watcher通 知 非 常 简 单,只 会 告 诉 客 户 端 发 生 了 事 件,而 不 会 说 明 事 件 的 具体 内 容。
- 客 户 端 向 服 务 端 注 册Watcher的 时 候 , 并 不 会 把 客 户 端 真 实 的Watcher对象 实 体 传 递 到 服 务 端,仅 仅 是 在 客 户 端 请 求 中 使 用boolean类 型 属 性 进 行 了 标 记。
- watcherevent异 步 发 送watcher的 通 知 事 件 从server发 送 到client是 异 步的,这 就 存 在 一 个 问 题,不 同 的 客 户 端 和 服 务 器 之 间 通 过socket进 行 通 信,由 于网 络 延 迟 或 其 他 因 素 导 致 客 户 端 在 不 通 的 时 刻 监 听 到 事 件,由 于Zookeeper本 身提 供 了orderingguarantee, 即 客 户 端 监 听 事 件 后 , 才 会 感 知 它 所 监 视znode发 生 了 变 化 。 所 以 我 们 使 用Zookeeper不 能 期 望 能 够 监 控 到 节 点 每 次 的 变 化 。Zookeeper只 能 保 证 最 终 的 一 致 性 , 而 无 法 保 证 强 一 致 性 。
- 注 册watchergetData、exists、getChildren
- 触 发watchercreate、delete、setData
- 当 一 个 客 户 端 连 接 到 一 个 新 的 服 务 器 上 时,watch将 会 被 以 任 意 会 话 事 件 触 发。当 与 一 个 服 务 器 失 去 连 接 的 时 候 , 是 无 法 接 收 到watch的 。 而 当client重 新 连 接时 , 如 果 需 要 的 话 , 所 有 先 前 注 册 过 的watch, 都 会 被 重 新 注 册 。 通 常 这 是 完 全透 明 的 。 只 有 在 一 个 特 殊 情 况 下 ,watch可 能 会 丢 失 : 对 于 一 个 未 创 建 的znode的existwatch,如 果 在 客 户 端 断 开 连 接 期 间 被 创 建 了,并 且 随 后 在 客 户 端 连 接 上之 前 又 删 除 了 , 这 种 情 况 下 , 这 个watch事 件 可 能 会 被 丢 失
- zookeeper的数据节点Znode有四种类型,分别是:
- PERSISTENT [pərˈsɪstənt] -持 久 节 点:除 非 手 动 删 除 , 否 则 节 点 一 直 存 在 于Zookeeper上;
- EPHEMERAL [ɪˈfemərəl] -临 时 节 点:临 时 节 点 的 生 命 周 期 与 客 户 端 会 话 绑 定 , 一 旦 客 户 端 会 话 失 效 ( 客 户 端与zookeeper连 接 断 开 不 一 定 会 话 失 效 ) , 那 么 这 个 客 户 端 创 建 的 所 有 临 时 节 点 都会 被 移 除 ;
- PERSISTENT_SEQUENTIAL [sɪˈkwenʃl] -持 久 顺 序 节 点:基 本 特 性 同 持 久 节 点 , 只 是 增 加 了 顺 序 属 性 , 节 点 名 后 边 会 追 加 一 个 由 父 节 点 维护 的 自 增 整 型 数 字 ;
- EPHEMERAL_SEQUENTIAL-临 时 顺 序 节 点:基 本 特 性 同 临 时 节 点 , 增 加 了 顺 序 属 性 , 节 点 名 后 边 会 追 加 一 个 由 父 节 点 维 护 的自 增 整 型 数 字
5、什么是ZAB协议?
- ZAB协 议 是 为 分 布 式 协 调 服务Zookeeper专 门 设 计 的 一 种 支 持 崩 溃 恢 复 的 原 子 广播 协 议 ;ZAB协 议 包 括 两 种 基 本 的 模 式 :崩 溃 恢 复 和 消 息 广 播。
6、能简单说说崩溃恢复和消息广播吗?
- 当 整 个zookeeper集 群 刚 刚 启 动 或 者Leader [ˈliːdər] 服 务 器 宕 机 、 重 启 或 者 网 络 故 障 导致 不 存 在 过 半 的 服 务 器 与Leader服 务 器 保 持 正 常 通 信 时,所 有 进 程(服 务 器)进入 崩 溃 恢 复 模 式 , 首 先 选 举 产 生 新 的Leader服 务 器 , 然 后 集 群 中Follower [fɑːloʊər] 服 务器 开 始 与 新 的Leader服 务 器 进 行 数 据 同 步 , 当 集 群 中 超 过 半 数 机 器 与 该Leader服 务 器 完 成 数 据 同 步 之 后 , 退 出 恢 复 模 式 进 入 消 息 广 播 模 式 ,Leader服 务 器 开 始接 收 客 户 端 的 事 务 请 求 生 成 事 物 提 案 来 进 行 事 务 请 求 处 理 。
