没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
Zookeeper ⼊⻔⽂章
5天前
以下⽂章来源于编程新说 ,作者编程新说李新杰
Java后端
编程新说编程新说
现任架构师,已⼯作11年,Java技术栈,计算机基础,⽤⼼写⽂章,欢迎关注!
点击上⽅ Java后端,选择 设为星标
优质⽂章,及时送达
公众号:编程新说
⼤ 家 好,今 天 来 讲 讲 z o o keeper,其 实 很 早 就 计 划 写 关 于 它 的 ⽂ 章,但 是 由 于 各 种 原 因 ⼀ 直 推 到 了 今 天 。
本 ⽂ 会 以 类 ⽐ 的 ⽅ 式 循 序 渐 进、层 层 展 开 。各 位 坐 稳 了,让 我 们 开 启 ⼀ 段 ⼤ 脑 的 旅 程 。
边 界 的 产 ⽣ 与 突 破边 界 的 产 ⽣ 与 突 破
不 觉 间 孩 ⼦ 已 经 上 ⼩ 学 了,前 段 时 间 还 参 加 了 ⼀ 次 家 ⻓ 会,那 就 以 学 校 和 开 会 来 说 吧,这 ⼤ 家 都 很 熟 悉 。
如 果 ⼀ 个 班 要 想 开 班 会,那 随 时 开 都 ⾏,不 需 要 提 前 安 排 与 通 知,因 为 ⼀ 个 班 级 从 内 部 看 就 是 ⼀ 个 整 体,在 班 级 内,
同 学 之 间 以 及 与 ⽼ 师 之 间 都 可 以 随 意 交 流,没 有 任 何 隔 阂 与 阻 碍 。
⼀ 个 班 级 从 外 部 看 就 是 ⼀ 个 独 ⽴ 的 个 体,因 为 班 级 与 班 级 之 间 是 完 全 独 ⽴ 的,因 此 ⼀ 个 班 级 的 学 ⽣ 和 ⽼ 师 都 不 会 随
便 跑 到 其 它 班 级 去 。这 是 因 为 存 在 着 ⼀ 个 边 界,即 班 级 边 界 。
正 是 这 个 班 级 边 界 把 班 级 隔 开 了,边 界 之 内 的 事 情,如 班 会,可 以 随 便 开 展,因 为 它 和 边 界 之 外 的 ⼀ 切 都 ⽆ 关 。但是
⼀ 旦 涉 及 到 边 界 之 外,也 就 是 跨 边 界,那 么 问 题 就 产 ⽣ 了 。
⽐ 如 学 校 要 开 ⼀ 个 全 体 班 级 ⼤ 会,肯 定 会 提 前 安 排 好 时 间 地 点,以 及 各 个 班 级 在 操 场 上 的 排 列 顺 序,还 要 提 前 进 ⾏ 相
应 的 通 知 。
为 什 么 ⼀ 个 班 的 班 会 可 以 随 时 随 地 进 ⾏,⽽ 全 体 班 级 ⼤ 会 就 要 提 前 安 排 与 通 知 呢 ?就 是 因 为 它 跨 了 班 级 边 界,是 ⼀ 个
跨 边 界 问 题 。
⽽ 且 班 级 与 班 级 之 间 互 相 独 ⽴,互 相 不 太 熟 悉,可 能 沟 通 起 来 也 不 容 易,因 此 需 要 提 前 安 排 好 。
那 如 何 通 知 呢 ?可 以 让 班 级 之 间 互 相 通 知,如 ⼀ 班 通 知 ⼆ 班,⼆ 班 通 知 三 班 等 等 。也可以由⼀个独⽴于所有班级之外
的 ⼈,如 教 务 处 或 学 ⽣ 处 的 ⼈,来 依 次 通 知 所 有 班 级 。
这 两 种 通 知 ⽅ 法 在 现 实 中 都 有 使 ⽤,所 有 没 有 绝 对 的 好 与 坏 之 分,视 情 况 ⽽ 定 即 可 。
读 者 需 要 明 确 这 两 种 ⽅ 法 代 表 了 处 理 此 类 问 题 的 两 种 ⽅ 式,⼀ 种 是 独 ⽴ 个 体 之 间 互 相 直 接 交 流 来 解 决,⼀ 种 是 需 要
第 三 ⽅ 介 ⼊ 来 协 调 解 决 。
这 ⾥ 可 以 得 出 ⼀ 个 结 论,边 界 的 产 ⽣ 是 ⼀ 种 ⾃ 然 现 象,⽽ 且 通 常 边 界 不 会 被 打 碎 或 消 失,但 是 可 以 通 过 其 它 ⼿ 段 让 边
界 两 边 的 事 物 进 ⾏ 交 流 协 商,这 顶 多 是 算 是 ⼀ 种“ 突 破 ”吧 。
计 算 机 相 关 的 边 界 产 ⽣ 与 突 破计 算 机 相 关 的 边 界 产 ⽣ 与 突 破
上 ⼀ ⼩ 节 的 描 述 ⾮ 常 简 单,相 信 所 有 ⼈ 都 能 明 ⽩ 。接 着 就 来 说 说 和 计 算 机 相 关 的 边 界 。其 实 有 很 多,我 们 就 说 ⼀ 两 种
吧 。
操 作 系 统 ⾥ ⾯ 有 内 核 空 间 和 ⽤ ⼾ 空 间,它 们 之 间 是 有 边 界 的,但 是 它 们 之 间 依 然 是 可 以 交 流 的,因 为 操 作 系 统 的 开 发
者 已 经 做 好 了 交 流 的 ⽅ 式 ⽅ 法 。
每 个 应 ⽤ 程 序 通 常 都 是 ⼀ 个 进 程,由 于 应 ⽤ 之 间 通 常 差 别 较 ⼤,⽽ 且 还 有 ⼀ 些 其 它 ⽅ ⾯ 的 考 虑,如 安 全 问 题,所 以 进
程 之 间 是 有 边 界 的,即 进 程 边 界 。
操 作 系 统 是 按 进 程 分 配 资 源 的,因 此 ⼀ 个 进 程 内 部 的 线 程 共 享 这 些 资 源 。由 于 进 程 边 界 的 存 在,这 些 资 源 不 能 被 别 的
进 程 使 ⽤ 。所 以 进 程 就 像 是 ⼀ 个 班 级 。
由 于 不 同 进 ⾏ 之 间 通 常 不 需 要 交 流,就 像 班 级 之 间 通 常 也 不 怎 么 交 流 ⼀ 样,所 以 默 认 情 况 下 进 程 之 间 ⽆ 法 交 流,这 与
操 作 系 统 的 内 核 和 ⽤ ⼾ 空 间 是 不 同 的 。
但 总 归 有 特 殊 情 况 吧,如 果 进 程 间 需 要 交 流 怎 么 办 ?那 只 能 由 开 发 ⼈ 员 ⾃ ⼰ 想 办 法,如 通 过 S o c k e t,来 实 现 。这 种 情
况 在 中 间 件 ⾥ 很 常 ⻅,如 N g inx就涉及多个进程 。
因 为 中 间 件 的 开 发 者 ⼀ 般 都 是 ⽜ X的⼈,他 们 能 够 搞 定 。但 问 题 是 绝 ⼤ 多 数 开 发 ⼈ 员 都 是 搞 业 务 开 发 的,他 们 受 能
⼒、时 间 或 ⾦ 钱 限 制,往 往 做 不 出 来 ⽣ 产 级 别 的 交 流 ⽅ 法 。
可 是 有 时 候 业 务 ⼈ 员 开 发 的 应 ⽤ 程 序 的 进 程 之 间 也 是 需 要 交 流 的,就 像 要 开 全 体 班 级 ⼤ 会 那 样,我 们 可 以 类 ⽐ 着 来
寻 求 解 决 ⽅ 案 。
我 们 可 以 让 进 程 之 间 直 接 互 相 交 流,就 像 班 级 之 间 互 相 通 知 那 样,这 ⼀ ⽅ ⾯ 对 开 发 ⼈ 员 要 求 ⾼ 且 费 时 费 ⼒,另 ⼀ ⽅ ⾯
是 当 进 程 多 了 之 后,它 们 之 间 的 直 接 交 流 就 变 成 了 ⼀ 张 ⽹,会 很 乱 。
为 了 说 明 这 ⼀ 点,我 们 看 个 简 单 ⽰ 例 。假 如 张 三 、李 四 、王 五 是 同 事,周 五 下 午 下 班 时 互 相 穿 错 了 ⾐ 服,遗 憾 的 是 晚 上
回 到 家 后 才 发 现 。他 们 都 想 在 第 ⼆ 天,就 是 周 六,换 过 来 。
张 三 需 要 去 找 李 四,李 四 需 要 去 找 王 五,王 五 ⼜ 需 要 去 找 张 三,假 设 他 们 都 住 的 相 距 较 远,这 会 是 ⼀ 个 颇 为 复 杂 的 问
题 。那 么 如 果 有 20个⼈都互相穿错了⾐服呢,这 将 会 是 ⼀ 个 更 加 复 杂 的 问 题 。
可 以 看 出,如 果 个 体 之 间 互 相 直 接 交 流 的 话,随 着 个 体 数 ⽬ 的 增 多,将 会 变 得 ⽆ ⽐ 混 乱 与 复 杂 。⽐ 较 好 的 解 决 ⽅ 法 可
能 ⼤ 家 都 想 到 了 。
那 就 是 约 定 ⼀ 个 合 适 的 地 ⽅,如 公 司,张 三 、李 四 、王 五 都 过 去,互 相 交 换 完 ⾐ 服 后 各 ⾃ 回 家 。这 种 ⽅ 法 随 着 个 体 的 增
多 效 果 会 越 来 越 好 。
其 实 这 种 ⽅ 法 就 是 全 体 班 级 开 会 时 的 第 ⼆ 种 通 知 ⽅ 法,由 ⼀ 个 第 三 ⽅ ⽆ 关 ⼈ 员 介 ⼊ 来 协 调 处 理,此 时 这 个 第 三 ⽅ 就
是 教 务 处 或 学 ⽣ 处 。
那 么 对 于 多 个 进 程 之 间 的 互 相 交 流 的 解 决 ⽅ 法 也 是 这 样 的,由 ⼀ 个 第 三 ⽅ ⽆ 关 进 程 介 ⼊ 来 协 调 处 理,此 时 这 个 第 三
⽅ 就 是 ZooK e e p e r 。
这 种 ⽅ 法 还 有 ⼀ 个 好 处,就 是 在 ⼀ 定 程 度 上 降 低 了 个 体 的 复 杂 性 与 要 求,以 及 由 此 产 ⽣ 的 额 外 问 题 。
⽐ 如 有 的 班 级 的 班 主 任 脾 ⽓ 不 好 或 不 好 说 话,没 有 其 它 班 级 的 班 主 任 愿 意 去 通 知 他,此 时 由 教 务 处 ⼈ 员 去 通 知,就 不
会 有 这 个 问 题 。
对 于 进 程 来 说,降 低 了 对 业 务 开 发 ⼈ 员 的 要 求,不 需 要 具 备 完 整 的 进 程 间 通 信 相 关 知 识,同 时 降 低 了 进 程 本 ⾝ 的 复 杂
度,不 需 要 ⽀ 持 完 整 的 进 程 间 通 信,可 能 只 需 ⽀ 持 客 ⼾ 端 即 可 。
这 种 ⽅ 式 的 另 ⼀ 个 好 处 是 可 以 被 抽 象 出 来 做 成 ⼀ 个 独 ⽴ 的 中 间 件 供 ⼤ 家 使 ⽤,Z o o Keepe r 就 是 这 样 的 。
所 以 从 本 质 来 说,Z o o Keepe r 就 是 ⼀ 个 第 三 ⽅,也称中间⼈,它 搭 建 了 ⼀ 个 平 台,让 所 有 其 它 进 程 通 过 它 来 进 ⾏ 间
接 的 交 流 。
Z ooK e e p e r 的 数 据 模 型Z ooK e e p e r 的 数 据 模 型
计 算 机 其 实 就 是 ⽤ 来 处 理 或 存 储 数 据 的,运 ⾏ 在 它 上 ⾯ 的 软 件 ⼤ 都 也 是 如 此 。z o o keepe r 作 为 多 进 程 的 协 调 者,肯
定 是 跑 不 了 了 。
存 储 数 据 和 摆 放 物 品 是 ⼀ 样 的,不 能 随 意 乱 扔,这 样 既 占 地 ⽅,⼜ 不 好 看,也 难 寻 找 。所以 必 须 得 有 ⼀ 定 的 层 次 结 构 。
这 就 是 计 算 机 的 专 业 课 数 据 结 构 了 。
最 简 单 的 数 据 结 构 就 是 数 组 或 链 表 了 。它 们 被 称 为 线 性 表,是 ⼀ 维 的,具 有 线 性 关 系,即 前 后 顺 序,优 点 是 简 单,缺 点
是 功 能 不 够 强 ⼤ 。
然 后 就 是 树 了,可 以 认 为 它 是 两 维 的,左 右 是 兄 弟 关 系,上 下 是 ⽗ ⼦ 关 系,因 此 具 有 从 属 关 系 。它是 ⼀ 个 功 能 与 复 杂
度 兼 顾 的 结 构 。现 实 ⽣ 活 中 的 各 类 组 织 架 构 ⼤ 都 是 树 形 的 。
再 复 杂 的 就 是 图 了,它 是 ⽹ 状 结 构,可 以 认 为 是 多 维 的,由 于 任 何 节 点 都 可 以 连 通,因 此 它 表 达 ⼀ 种 多 边 关 系 。虽功
能 强 ⼤ 但 也 很 复 杂 。现 实 中 的 铁 路 ⽹ 和 ⼈ 际 关 系 ⽹ ⼤ 都 是 ⽹ 状 的 。
当 然,这 是 三 ⼤ 类 数 据 结 构,每 ⼀ 类 中 ⼜ 可 以 分 为 很 多 种 。⽐如树就有很多种变体,虽 然 都 叫 树,但 有 的 差 别 还 是 很
⼤ 的 。
ZooK e e p e r 选 择 了 树 作 为 ⾃ ⼰ 存 储 数 据 的 结 构,其 实 它 和 ⽂ 件 系 统 也 ⾮ 常 相 似,如下图:
谈 到 数 据 就 离 不 开 增、删、改、查,对 应 树 来 说,增 就 是 添 加 新 的 节 点 到 树 中,删 就 是 从 树 中 删 除 某 个 节 点,改 就 是 修
改 树 中 某 个 节 点 上 存 放 的 数 据,查 就 是 找 到 树 中 某 个 节 点 读 取 它 上 ⾯ 存 放 的 数 据 。
说 ⽩ 了 就 是 树 形 表 ⽰ 的 是 ⼀ 种 结 构,真 正 的 数 据 是 在 节 点 上 放 着 呢,叶 ⼦ 节 点 或 ⾮ 叶 ⼦ 节 点 都 可 以 。
Z ooK e e p e r 应 该 具 备 的 能 ⼒Z ooK e e p e r 应 该 具 备 的 能 ⼒
我 们 从 最 常 ⻅ 的 场 景 ⼊ ⼿,从 宏 观 上 了 解 下 z o o keepe r 是 如 何 使 ⽤ 的,以及它应该具备哪些能⼒ 。
场 景 ⼀ :场 景 ⼀ :
有 两 个 应 ⽤ 程 序 进 程 A和B,A 先 处 理 数 据,处 理 完 后 通 知 B,B再 接 着 处 理 。我们应该如何利⽤zo o k e e p e r来完成这
个 呢 ?⼀ 起 来 分 析 ⼀ 下 。
⾸ 先,进 程 A 连 接 上 z o okeep e r,在 上 ⾯ 创 建 ⼀ 个 节 点 来 表 ⽰ ⾃ ⼰ 的 存 在,假 设 节 点 名 称 就 叫 f oo吧 。
然 后 在 节 点 上 设 置 ⼀ 个 数 据 叫 doin g,表⽰⾃⼰正在处理数据 。过了⼀会处理完后,把 节 点 上 的 数 据 更 新 为 d o n e。
这 样 进 程 A的⼯作就算完了 。可是这怎么去影响到进程B呢?我们知道zo o k e e p e r完成的是进 程 间 的 间 接 交 流,即进
程 之 间 是 不 碰 ⾯ 的 。因 此 只 能 借 助 于 这 个 树 形 ⾥ 的 节 点 。
进 程 B也要连上zoo k e e p e r,然 后 找 到 f o o节点,看 好 它 上 ⾯ 的 数 据 是 否 由 d o ing变 成 了 d o n e,如 果 是 ⾃ ⼰ 就 开 始
处 理 数 据,如 果 否 那 就 继 续 等 着 。
问 题 是 进 程 B不能⾃⼰⽼盯着foo 节 点 啊,这 样 太 累 了,伤 神,况且它还要做其它事情呢 。那这个事情应该由谁来做
呢 ?很 显 然 是 zook e e p e r 嘛 。
于 是 进 程 B就对zoo k e e p e r说,你 给 我 盯 着 f o o节点,什 么 时 候 变 成 d o n e了通知我⼀声,我 就 开 ⼲ 了 。
因 此,z o o keepe r 需 要 具 有 盯 梢 能 ⼒ 和 通 知 其 它 进 程 的 能 ⼒ 。这在zo o k e e p er中对应⼀个专业术语,叫W a t c h 。
Watc h 的 作 ⽤ 和 ⽤ 法 与 上 ⾯ 描 述 的 ⼀ 样 。就是 进 程 B 找 到 f o o 节 点,在 上 ⾯ 放 ⼀ 个 W a t c h 就 可 以 了 。
这 样 zook e e p e r 就 知 道 进 程 B对foo 节 点 ⽐ 较 关 注,于 是 zook e e p e r 就 盯 着 foo节点,⼀ 有 ⻛ 吹 草 动,⻢ 上 通 知 进
程 B 。
备 注 :关于 W a t c h 有 ⾮常 多 的 细 节 问 题,这 ⾥ 就 不谈 了 。
需 要 注 意 的 是,这 个 W a t ch是⼀次性的,即 只 能 使 ⽤ ⼀ 次 。也 就 是 说,z o o k e e per通 知 过 进 程 B 之 后,W atc h 就 被 ⽤
掉 了,以 后 就 不 会 再 通 知 了 。
如 果 进 程 B还需要被通知怎么办?很简单,那 就 在 f o o节点上 再 放 ⼀ 个 新 的 W a t c h 即 可 。如 此 这 般 下 去,就 可 以 保 证
⼀ 直 被 通 知 了 。
我 想 这 个 Watc h 之 所 以 被 设 计 成 ⼀ 次 性 的,就是zoo k e e p e r 不 想 让 ⾃ ⼰ 太 累 。睁 着 ⼀ 双 ⼤ 眼,盯 的 东 西 太 多 太 久 的
话,确 实 很 累 。
另 外,z o o keepe r 在 通 知 进 程 B 的 时 候,是 可 以 把 f o o 节 点 存 放 的 数 据 ⼀ 并 发 送 过 去 的 。
细 ⼼ 的 朋 友 可 能 已 经 发 现,z o o keepe r 可 以 主 动 向 进 程 B 发 通 知 或 推 数 据,说 明 z o o k e e per和 进 程 B 之 间 的 连 接 需
要 被 ⼀ 直 保 持 。
因 为 进 程 B的位置⽐较随意,本 来 就 是 业 务 进 程 嘛 。⼀ 旦 连 接 断 开,就 像 断 了 线 的 ⻛ 筝,z ooke e p e r 再 也 ⽆ 法 找 到 进
程 B了 。
不 过 zook e e p e r 的 位 置 是 固 定 的,⼀ 旦 连 接 断 掉 后,进程B可以再次向zo o k e e p er发起连接请求,如 果 断 开 的 时 间
⾜ 够 短 的 话,进 程 B 应 该 还 可 以 在 z o okeep e r 上 找 回 ⾃ ⼰ 曾 经 拥 有 的 ⼀ 切 。
这 就 涉 及 到 了 会 话,因 此 z o o keepe r 还 要 有 ⼀ 定 的 会 话 延 续 能 ⼒,⽅便在断开时间不⻓的时候找回原来的会话 。
因 此 zook e e p e r 应 该 有,监视节点、通知 进 程 、保 持 ⻓ 连 接,会 话 延 续 等 这 样 的 能 ⼒ 。
剩余58页未读,继续阅读
资源评论
小小哭包
- 粉丝: 1899
- 资源: 3860
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功