7.1 MapReduce Offline Online 计 算 流 式 计 算 并 行 数 据 库 的 SQL 查 询 数 据 仓 库 复 杂 查 询 应 用 电 子 商
|
|
- 副侧 范
- 7 years ago
- Views:
Transcription
1 分 布 式 系 统 工 程 实 践 杨 传 辉 日 淘 宝 V 分 布 式 系 统 工 程 实 践 引 言 基 础 知 识 硬 件 基 础 性 能 估 算 CAP 一 致 性 模 型 NOSQL 与 SQL Two-Phase commit Paxos 关 键 技 术 实 现 网 络 编 程 框 架 HA 与 Replication 分 裂 迁 移 负 载 均 衡 Chubby 分 布 式 事 务 Copy-on-write 与 Snapshot 操 作 日 志 与 checkpoint 列 式 存 储 与 压 缩 通 用 存 储 系 统 分 类 典 型 存 储 系 统 工 程 实 现 单 机 存 储 引 擎 随 机 访 问 存 储 引 擎 通 用 存 储 引 擎 单 机 存 储 优 化 SQL 数 据 库 线 上 最 终 一 致 性 系 统 线 上 弱 一 致 性 系 统 半 线 上 及 线 下 系 统 两 层 结 构 GFS Bigtable 通 用 计 算 系 统 分 类 典 型 计 算 系 统 工 程 实 现... 33
2 7.1 MapReduce Offline Online 计 算 流 式 计 算 并 行 数 据 库 的 SQL 查 询 数 据 仓 库 复 杂 查 询 应 用 电 子 商 务 类 搜 索 类 社 交 类 邮 箱 类 图 片 及 视 频 类 数 据 仓 库 类 云 服 务 类 工 程 实 现 注 意 事 项 工 程 现 象 规 范 制 订 经 验 法 则 质 量 控 制 测 试 第 一 代 码 Review 服 务 器 程 序 的 资 源 管 理 致 谢 参 考 文 献 书 籍 类 论 文 类 分 布 式 理 论 Google 系 列 Dynamo 及 P2P 系 列 存 储 系 统 计 算 系 统 其 它 网 页 类 个 人 博 客 类 专 题 类 其 它... 45
3 1 引 言 NOSQL 的 资 料 很 多, 不 过 不 成 体 系, 让 分 布 式 系 统 开 发 工 程 师 无 所 适 从 笔 者 根 据 过 去 跟 着 阳 老 师 开 发 类 似 Google GFS/MapReduce/Bigtable 的 系 统 以 及 对 Dynamo, PNUTS 等 典 型 系 统 的 理 解 尝 试 梳 理 流 行 的 分 布 式 存 储 和 计 算 系 统 的 分 类, 设 计 及 实 现 本 文 结 构 安 排 如 下 : 基 础 知 识 : 一 个 大 规 模 数 据 处 理 系 统 工 程 师 必 备 的 基 础 知 识 ; 关 键 技 术 实 现 : 工 程 实 践 中 遇 到 的 典 型 问 题 的 解 决 思 路 ; 通 用 存 储 系 统 分 类 : 讲 述 笔 者 关 于 存 储 系 统 如 何 划 分 的 个 人 观 点 ; 典 型 存 储 系 统 工 程 实 现 : 选 取 典 型 的 存 储 系 统 讲 述 大 致 实 现 ; 通 用 计 算 系 统 分 类 : 讲 述 笔 者 对 于 计 算 系 统 如 何 划 分 的 个 人 观 点 ; 典 型 计 算 系 统 工 程 实 现 : 讲 述 典 型 计 算 系 统 的 大 致 实 现 ; 应 用 : 存 储 & 计 算 系 统 应 用 的 一 些 实 例 ; 工 程 实 现 注 意 事 项 : 总 结 设 计 和 开 发 过 程 中 可 能 犯 的 一 些 错 误 ; 致 谢 及 参 考 资 料 : 列 出 一 些 值 得 看 的 论 文 和 网 页 资 料 ; 每 个 章 节 涉 及 的 话 题 都 很 大, 由 于 笔 者 的 水 平 实 在 是 非 常 非 常 有 限, 只 能 说 是 尽 力 把 自 己 知 道 并 能 够 说 明 白 的 写 下 来, 作 为 自 己 对 过 去 工 作 的 回 忆 把 其 中 任 何 一 个 话 题 讲 明 白 都 远 远 超 出 了 我 的 能 力 范 畴, 写 错 的 地 方 在 所 难 免, 各 位 同 学 发 现 问 题 尽 管 笑 一 笑, 当 然, 欢 迎 任 何 形 式 的 讨 论, 我 会 尽 量 和 更 多 的 同 学 讨 论 来 不 断 完 善 这 个 文 档 本 文 只 是 一 个 初 始 综 述, 后 续 将 细 化 每 一 个 问 题 并 发 表 到 博 客 中 2 基 础 知 识 本 章 描 述 工 程 实 现 需 要 的 一 些 基 础 知 识, 由 于 篇 幅 的 关 系, 只 抽 取 一 些 认 为 对 理 解 和 设 计 大 规 模 系 统 必 要 的 基 础 知 识 进 行 描 述 另 外, 假 设 读 者 了 解 NOSQL 基 本 概 念, 做 过 或 者 看 过 一 两 个 类 似 的 系 统, 阅 读 过 GFS/Bigtable/Paxos 相 关 的 论 文 分 布 式 理 论 有 一 个 特 点 是 : 大 致 的 做 法 是 很 容 易 想 到 的, 但 是 完 全 没 有 问 题 的 做 法 非 常 难 想, 理 解 理 论 的 用 处 就 在 于 区 分 出 想 法 的 问 题 在 哪 儿 以 及 实 现 的 难 度
4 2.1 硬 件 基 础 分 布 式 系 统 开 发 工 程 师 需 要 了 解 硬 件 的 大 致 价 格, 熟 记 硬 件 的 性 能 硬 件 大 致 性 能 如 下 : L1 cache reference Branch mispredict L2 cache reference Mutex lock/unlock Main memory reference Send 1M bytes over 1Gbps network Read 1M sequentially from memory Round trip within data center Disk seek Read 1MB sequentially from disk 0.5ns 5ns 7ns 100ns 100ns 10ms 0.25ms 0.5ms 8~10ms 20~25ms 标 记 为 红 色 性 能 参 数 比 较 常 用, 其 中, 磁 盘 的 性 能 指 标 专 指 分 布 式 平 台 专 用 的 大 容 量 SATA 磁 盘, 寻 道 时 间 为 8~10ms, 顺 序 读 取 速 率 为 40~50MB 某 些 应 用 使 用 SAS 磁 盘 或 者 Flash 盘, 性 能 较 好, 评 估 时 需 查 看 硬 件 的 性 能 参 数 磁 盘 和 网 络 都 有 一 个 特 征, 一 次 读 写 的 数 据 量 越 大 性 能 越 好, 这 是 由 硬 件 特 征 及 底 层 软 件 算 法 决 定 的, 如 tcp 慢 连 接 和 磁 盘 寻 道 时 间 长 2.2 性 能 估 算 给 定 一 个 问 题, 往 往 会 有 多 种 设 计 方 案, 而 方 案 评 估 的 一 个 重 要 指 标 就 是 性 能, 如 何 在 系 统 设 计 时 估 算 而 不 是 程 序 执 行 时 测 试 得 到 性 能 数 据 是 系 统 架 构 设 计 的 重 要 技 能 性 能 估 算 有 如 下 用 途 : 1) 多 种 设 计 方 案 选 择 ; 2) 评 价 程 序 实 现 是 否 足 够 优 化 ; 3) 向 框 架 / 服 务 提 供 方 提 出 性 能 要 求 的 依 据 ;
5 很 多 同 学 喜 欢 通 过 查 看 程 序 运 行 时 CPU 及 网 络 的 使 用 情 况 来 评 价 程 序 是 否 足 够 优 化, 这 也 是 一 种 很 重 要 的 方 法 然 而, 这 种 方 法 掩 盖 了 不 优 化 的 实 现, 如 O(N) 的 算 法 被 错 误 实 现 成 O(N^2), 网 络 收 发 冗 余 数 据 等 性 能 评 估 需 要 假 设 程 序 的 执 行 环 境, 如 集 群 规 模 及 机 器 配 置, 集 群 上 其 它 服 务 占 用 资 源 的 比 例 对 硬 件 性 能 指 标 有 了 初 步 认 识 以 后, 我 们 可 以 做 出 一 些 简 单 的 判 断, 如 : 某 K-V 引 擎 RD: 我 们 的 K-V 引 擎 单 客 户 端 同 步 读 取 每 秒 可 以 达 到 18000/s 问 : 是 否 批 量 读 取? 答 : 是, 每 批 读 取 10 个 记 录 由 于 tcp Round trip 时 间 为 0.5ms, 读 取 请 求 个 数 的 理 论 极 限 为 2000/s, 而 上 例 中 K-V 引 擎 的 RD 却 说 单 客 户 同 步 读 取 可 以 达 到 18000/s, 可 以 断 定 该 RD 指 的 是 批 量 读 取 方 式 且 这 已 经 是 单 机 能 够 做 到 的 极 限 值 了 下 面 我 们 通 过 几 个 实 例 说 明 如 何 进 行 性 能 评 估 1. 1GB 的 4 字 节 整 数, 内 存 排 序 时 间 为 多 少? 拿 到 这 个 问 题, 我 们 往 往 会 计 算 CPU 运 算 次 数, 如 快 排 的 运 算 次 数 为 1.4 * N * log(n), 其 中 1.4 为 快 排 的 系 数, 再 根 据 CPU 的 运 算 频 率 计 算 出 排 序 耗 时 不 过 这 种 方 法 很 土 也 不 是 很 准,Jeff Dean 告 诉 我 们 可 以 这 样 估 算 : 排 序 时 间 = 比 较 时 间 ( 分 支 预 测 错 误 ) + 内 存 访 问 时 间 快 排 过 程 中 会 发 生 大 量 的 分 支 预 测 错 误, 所 以 比 较 次 数 为 2^28 * log (2^28) 2^33, 其 中 约 1/2 的 比 较 会 发 生 分 支 预 测 错 误, 所 以 比 较 时 间 为 1/2 * 2 ^ 32 * 5ns = 21s, 另 外, 快 排 每 次 找 到 分 割 点 都 需 要 一 遍 内 存 移 动 操 作, 而 内 存 顺 序 访 问 性 能 为 4GB/s, 所 以 内 存 访 问 时 间 为 28 * 1GB / 4GB = 7s 因 此, 单 线 程 排 序 1GB 4 字 节 整 数 总 时 间 约 为 28s 2. Bigtable 设 计 的 性 能 指 标 分 析 假 设 Bigtable 总 体 设 计 中 给 出 的 性 能 指 标 为 : 系 统 配 置 :50 台 4 核 8GB 内 存 12 路 SATA 硬 盘, 同 样 数 量 的 客 户 端 ; Table:row name:16-byte,column:16-byte,value:1kb;64kb data block;no compression; Random reads (in disk): 1KB/item*300item/s*50=15MB/s Random reads (in memory):1kb/item*4000item/s*50=200mb/s Random writes:1kb/item*2000item/s*50=100mb/s Sequential reads(in disk):1kb/item*1000item/s*50=50mb/s Sequential writes:1kb/item*2000item/s*50=100mb/s 先 看 磁 盘 中 的 随 机 读 取 性 能, 由 于 在 Bigtable 的 设 计 中 每 个 随 机 读 取 都 要 读 取 一 个 64KB 的 大 块, 而 磁 盘 中 读 取 64KB 数 据 时 间 为 : 磁 盘 寻 道 时 间 + 读 取 时 间 = 10ms + 64KB / 50MB/s = 12ms 所 以 每 秒 读 取 300 个 记 录 指 多 客 户 端 读 取 或 者 单 客 户 端 异 步 / 批 量 读 取 由 于 每 台 机 器 有 12 个 SATA 大 容 量 磁 盘, 随 机 读 的 理 论 值 为 12 * 1s / 12ms = 1000 个 /s 设 计 为 每 秒 读 取 300 个 是 考 虑 到 有 负 载 平 衡 等 因 素 简 单 地 打 了 一 个 折 扣 再 看 内 存 中 的 随 机 读 取 一 般 来 说, 内 存 操 作 都 是 每 秒 1W~10W 由 于 网 络 发 送 小 数 据 有 较 多 overhead 且 Bigtable 内 存 操 作 有 较 多 的 内 存 开 销, 所 以 保 守 设 计 为 单 机 每 秒 读 取 4000 个 记 录 其 它 的 可 类 似 分 析 性 能 分 析 可 能 会 很 复 杂, 因 为 不 同 的 情 况 下 决 定 性 能 的 瓶 颈 不 一 样,
6 有 的 时 候 是 网 络, 有 的 时 候 是 磁 盘, 有 的 时 候 甚 至 是 机 房 的 交 换 机 这 种 性 能 分 析 的 经 验 是 需 要 慢 慢 积 累 的 最 后, 我 们 再 看 看 某 一 个 MapReduce 应 用 的 例 子 MapReduce 可 以 简 单 地 分 为 几 个 过 程 :Map 处 理 时 间 + shuffle 和 排 序 时 间 + reduce 处 理 时 间, 虽 然 shuffle map 处 理 和 排 序 可 以 部 分 并 行, 但 性 能 估 算 的 时 候 不 必 考 虑 假 设 50 台 机 器, 原 始 输 入 为 50G, 例 中 MapReduce 应 用 的 map 函 数 处 理 时 间 为 100s,reduce 函 数 处 理 时 间 为 60s,shuffle 的 中 间 结 果 数 据 量 为 300G,reduce 输 出 的 最 终 结 果 大 小 为 600M Map 处 理 时 间 = 输 入 读 取 时 间 + Map 函 数 处 理 时 间 + 输 出 中 间 结 果 时 间 其 中, 输 入 读 取 时 间 = 50G / 2.5G = 25s (50 台 机 器, 假 设 每 台 机 器 读 取 带 宽 为 50M/s), Map 函 数 处 理 时 间 = 60s, 输 出 中 间 结 果 时 间 = 300G / 15G = 20s (50 台 机 器, 每 台 机 器 12 个 磁 盘, 假 设 用 满 6 个 磁 盘, 带 宽 为 6 * 50M = 300M) 所 以,Map 处 理 时 间 = 25s + 60s + 20s = 105s Shuffle 和 排 序 时 间 = shuffle 时 间 + 排 序 时 间 其 中,shuffle 时 间 = 300G / 2G = 150s (50 台 机 器, 假 设 每 台 机 器 的 读 取 和 写 入 带 宽 均 为 40M, 单 机 总 带 宽 为 80M) 排 序 时 间 = 单 机 排 序 6G 的 时 间, 假 设 每 条 记 录 为 1KB = 排 序 比 较 时 间 + 访 问 时 间, 约 为 25s 所 以,shuffle 和 排 序 的 时 间 = 150s + 25s = 175s Reduce 处 理 时 间 = reduce 函 数 处 理 时 间 + 最 终 结 果 输 出 时 间 其 中,reduce 函 数 处 理 时 间 = 100s, 最 终 结 果 输 出 时 间 = 600M / 500M (50 台 机 器, 单 机 写 DFS 假 设 时 间 为 10M/s) = 1s ( 忽 略 ) 所 以, 例 中 的 MapReduce 应 用 运 行 一 遍 大 致 需 要 的 时 间 = Map 处 理 时 间 + shuffle 和 排 序 时 间 + Reduce 处 理 时 间 = 105s + 175s + 100s = 380s, 当 然,MapReduce 过 程 中 还 有 框 架 的 开 销 和 其 它 应 用 的 影 响, 我 们 可 以 简 单 地 认 为 影 响 为 20%, 所 以 总 时 间 = 380s + 380s * 20% = 456s, 约 为 7~8 min 当 然,MapReduce 应 用 实 际 的 性 能 估 算 不 会 如 此 简 单, 实 际 估 算 时 需 要 考 虑 每 台 机 器 上 启 动 的 Map 和 Reduce 个 数 等 因 素, 且 需 要 根 据 实 验 的 结 果 不 断 地 验 证 和 重 新 调 整 估 算 但 是, 我 们 至 少 可 以 保 证, 估 算 的 结 果 和 实 际 不 会 相 差 一 个 数 量 级, 估 算 结 果 可 以 用 来 指 导 初 期 的 设 计 和 Map/Reduce Worker 的 个 数 Map/Reduce 任 务 数 选 择, 评 估 应 用 的 可 优 化 空 间 并 作 为 向 MapReduce 框 架 提 供 小 组 提 出 需 求 的 依 据 性 能 估 算 是 大 规 模 系 统 设 计 中 较 难 掌 握 的 技 能, 开 始 性 能 估 算 时 可 能 估 计 得 很 不 准, 不 过 不 要 气 馁, 通 过 在 项 目 中 不 断 练 习, 大 规 模 系 统 的 分 析 和 设 计 能 力 才 能 做 到 有 理 可 依 2.3 CAP CAP 是 一 个 很 时 髦 的 概 念, 然 而, 对 于 设 计 和 实 现 大 规 模 分 布 式 系 统 而 言, 只 需 要 在 脑 海 里 面 有 一 个 粗 略 的 概 念 即 可 我 们 先 看 看 CAP 是 怎 么 回 事 CAP 理 论 由 Berkerly 的 Brewer 教 授 提 出, 在 最 初 的 论 文 中, 三 者 含 义 如 下 : 一 致 性 (Consistency): 任 何 一 个 读 操 作 总 是 能 读 取 到 之 前 完 成 的 写 操 作 结 果 ;
7 可 用 性 (Availability): 每 一 个 操 作 总 是 能 够 在 确 定 的 时 间 内 返 回 ; 分 区 可 容 忍 性 (Tolerance of network Partition): 在 出 现 网 络 分 区 的 情 况 下, 仍 然 能 够 满 足 一 致 性 和 可 用 性 ; CAP 理 论 认 为, 三 者 不 能 同 时 满 足, 并 给 出 了 证 明, 简 单 阐 述 如 下 : 假 设 系 统 出 现 网 络 分 区 为 G1 和 G2 两 个 部 分, 在 一 个 写 操 作 W1 后 面 有 一 个 读 操 作 R2,W1 写 G1,R2 读 取 G2, 由 于 G1 和 G2 不 能 通 信, 如 果 读 操 作 R2 可 以 终 结 的 话, 必 定 不 能 读 取 写 操 作 W1 的 操 作 结 果 然 而, 这 种 对 一 致 性 及 可 用 性 的 定 义 方 法 在 工 程 实 践 上 意 义 不 大,CAP 理 论 只 是 粗 略 地 告 诉 我 们 天 下 没 有 免 费 的 午 餐 比 如 Availability 的 定 义,10 秒 钟 停 服 务 和 1 个 小 时 停 服 务 在 工 程 实 践 中 完 全 是 两 个 概 念 因 此, 我 们 往 往 会 修 改 CAP 的 定 义 如 下 : 一 致 性 (Consistency): 读 操 作 总 是 能 读 取 到 之 前 完 成 的 写 操 作 结 果, 满 足 这 个 条 件 的 系 统 称 为 强 一 致 系 统, 这 里 的 之 前 一 般 对 同 一 个 客 户 端 而 言, 但 可 能 是 一 个 客 户 端 的 多 个 Session; 可 用 性 (Availability): 读 写 操 作 在 单 台 机 器 发 生 故 障 的 情 况 下 仍 然 能 够 正 常 执 行, 而 不 需 要 等 到 机 器 重 启 或 者 机 器 上 的 服 务 分 配 给 其 它 机 器 才 能 执 行 ; 分 区 可 容 忍 性 (Tolerance of network Partition): 机 房 停 电 或 者 机 房 间 网 络 故 障 的 时 候 仍 然 能 够 满 足 一 致 性 和 可 用 性 ; 工 程 实 践 对 网 络 分 区 考 虑 较 少, 一 般 可 以 认 为 : 一 致 性 和 写 操 作 的 可 用 性 不 能 同 时 满 足, 即 如 果 要 保 证 强 一 致 性, 那 么 出 现 机 器 故 障 的 时 候, 写 操 作 需 要 等 机 器 重 启 或 者 机 器 上 的 服 务 迁 移 到 别 的 机 器 才 可 以 继 续 2.4 一 致 性 模 型 Amazon 的 CTO 专 门 在 官 网 中 阐 述 了 一 致 性 模 型, 足 见 其 重 要 性, 可 以 认 为, 一 致 性 要 求 直 接 决 定 了 存 储 系 统 设 计 和 实 现 的 复 杂 度 为 了 更 好 的 描 述 客 户 端 一 致 性, 我 们 通 过 以 下 的 场 景 来 进 行, 这 个 场 景 中 包 括 三 个 组 成 部 分 : 存 储 系 统 存 储 系 统 可 以 理 解 为 一 个 黑 盒 子, 它 为 我 们 提 供 了 可 用 性 和 持 久 性 的 保 证 Process A Process A 主 要 实 现 从 存 储 系 统 write 和 read 操 作 Process B 和 Process C Process B 和 C 是 独 立 于 A, 并 且 B 和 C 也 相 互 独 立 的, 它 们 同 时 也 实 现 对 存 储 系 统 的 write 和 read 操 作 下 面 以 上 面 的 场 景 来 描 述 下 不 同 程 度 的 一 致 性 : 强 一 致 性 强 一 致 性 ( 即 时 一 致 性 ) 假 如 A 先 写 入 了 一 个 值 到 存 储 系 统, 存 储 系 统 保 证 后 续 A,B,C 的 读 取 操 作 都 将 返 回 最 新 值 弱 一 致 性
8 假 如 A 先 写 入 了 一 个 值 到 存 储 系 统, 存 储 系 统 不 能 保 证 后 续 A,B,C 的 读 取 操 作 能 读 取 到 最 新 值 此 种 情 况 下 有 一 个 不 一 致 性 窗 口 的 概 念, 它 特 指 从 A 写 入 值, 到 后 续 操 作 A,B,C 读 取 到 最 新 值 这 一 段 时 间 最 终 一 致 性 最 终 一 致 性 是 弱 一 致 性 的 一 种 特 例 假 如 A 首 先 write 了 一 个 值 到 存 储 系 统, 存 储 系 统 保 证 如 果 在 A,B,C 后 续 读 取 之 前 没 有 其 它 写 操 作 更 新 同 样 的 值 的 话, 最 终 所 有 的 读 取 操 作 都 会 读 取 到 最 A 写 入 的 最 新 值 此 种 情 况 下, 如 果 没 有 失 败 发 生 的 话, 不 一 致 性 窗 口 的 大 小 依 赖 于 以 下 的 几 个 因 素 : 交 互 延 迟, 系 统 的 负 载, 以 及 复 制 技 术 中 replica 的 个 数 ( 这 个 可 以 理 解 为 master/salve 模 式 中,salve 的 个 数 ) 一 致 性 模 型 的 变 体 如 下 : Causal consistency( 因 果 一 致 性 ) 如 果 Process A 通 知 Process B 它 已 经 更 新 了 数 据, 那 么 Process B 的 后 续 读 取 操 作 则 读 取 A 写 入 的 最 新 值, 而 与 A 没 有 因 果 关 系 的 C 则 可 以 最 终 一 致 性 Read-your-writes consistency 如 果 Process A 写 入 了 最 新 的 值, 那 么 Process A 的 后 续 操 作 都 会 读 取 到 最 新 值 但 是 其 它 用 户 可 能 要 过 一 会 才 可 以 看 到 Session consistency 此 种 一 致 性 要 求 客 户 端 和 存 储 系 统 交 互 的 整 个 会 话 阶 段 保 证 Read-your-writes, 数 据 库 分 库 以 后 一 般 会 提 供 这 种 一 致 性 保 证, 使 得 同 一 个 Session 的 读 写 操 作 发 送 到 同 一 台 数 据 库 节 点 Monotonic read consistency 此 种 一 致 性 要 求 如 果 Process A 已 经 读 取 了 对 象 的 某 个 值, 那 么 后 续 操 作 将 不 会 读 取 到 更 早 的 值 Monotonic write consistency 此 种 一 致 性 保 证 系 统 会 序 列 化 执 行 一 个 Process 中 的 所 有 写 操 作 为 了 便 于 后 续 的 说 明, 我 们 修 改 Amazon CTO 关 于 最 终 一 致 性 的 定 义 Dynamo 通 过 NWR 策 略 提 供 的 最 终 一 致 性 主 要 是 针 对 Dynamo 的 多 个 副 本 而 言 的, 它 们 之 间 保 持 最 终 一 致 不 过 对 于 用 户, 我 们 假 设 N=3, W=2, R=2 的 一 种 情 况, 用 户 先 调 用 W1 写 A 和 B 两 个 副 本 后 成 功 返 回, 接 着 调 用 W2 写 B 和 A 两 个 副 本 后 成 功 返 回, 可 能 出 现 在 副 本 A 上 W1 先 于 W2 执 行, 而 在 副 本 B 上 W2 先 于 W1 执 行, 虽 然 副 本 A 和 B 都 能 够 通 过 执 行 满 足 交 换 律 的 合 并 操 作, 比 如 基 于 last write wins 的 策 略 进 行 合 并 使 得 最 终 副 本 A 和 B 上 的 数 据 完 全 一 致, 但 是 可 能 出 现 一 些 异 常 情 况, 比 如 副 本 A 和 B 所 在 的 机 器 时 钟 不 一 致, 合 并 的 结 果 是 W1 把 W2 给 覆 盖 了,W2 的 操 作 结 果 消 失 了 这 显 然 与 用 户 的 期 望 是 不 一 致 的 为 了 方 便 后 续 对 系 统 进 行 划 分, 我 们 把 Amazon Dynamo 这 种 需 要 依 赖 操 作 合 并, 可 能 会 丢 失 数 据 的 模 型 从 最 终 一 致 性 模 型 中 排 除 出 去 最 终 一 致 性 模 型 要 求 同 一 份 数 据 同 一 时 刻 只 能 被 一 台 机 器 修 改, 也 就 是 说 机 器 宕 机 时 需 要 停 很 短 时 间 写 服 务 Amazon Dynamo 提 供 的 一 致 性 模 型 我 们 归 类 到 一 般 的 弱 一 致 性 模 型 中
9 2.5 NOSQL 与 SQL NOSQL 可 以 认 为 是 选 取 了 SQL 特 性 的 子 集, 在 扩 展 性 和 用 户 接 口 友 好 两 个 方 面 做 了 一 个 权 衡 越 多 选 择, 越 多 迷 茫, 实 践 经 验 告 诉 我 们, 如 果 将 SQL 的 功 能 完 全 暴 露 给 用 户, 用 户 一 定 会 使 用 一 些 我 们 不 希 望 的 功 能, 比 如 多 表 join, 外 键, 等 等 NOSQL 的 意 义 在 于, 我 们 预 先 定 义 一 些 特 性, 这 些 特 性 满 足 某 一 个 应 用 的 需 求, 并 且 只 满 足 这 些 特 性 使 得 我 们 的 系 统 很 容 易 扩 展 SQL 定 义 了 一 个 功 能 全 集,NOSQL 根 据 应 用 特 点 选 取 几 种 特 定 的 应 用 定 义 不 同 的 特 性 集 合, 以 适 应 互 联 网 数 据 量 高 速 膨 胀 的 需 求 一 般 来 说,NOSQL 的 应 用 会 比 SQL 的 应 用 更 加 注 意 可 用 性, 所 以 NOSQL 应 用 对 外 表 现 为 经 常 可 以 选 择 最 终 一 致 性 模 型 不 过, 从 通 用 系 统 的 角 度 看, 这 里 的 最 终 一 致 性 指 : 大 多 数 操 作 允 许 读 取 老 的 数 据, 少 数 操 作 仍 然 希 望 读 取 最 新 的 数 据, 并 且 应 用 不 希 望 出 现 数 据 丢 失 的 情 况 所 以, 不 能 因 为 NOSQL 就 容 忍 数 据 丢 失 的 情 况, 虽 然 这 会 极 大 地 加 大 系 统 设 计 和 实 现 的 难 度 另 外,NOSQL 不 等 于 必 须 用 MapReduce 做 计 算 模 型, 虽 然 二 者 经 常 结 对 出 现, 不 过 本 质 上 是 不 相 关 的 NOSQL 比 较 常 见 的 模 型 包 括 : KV 模 型 : 只 支 持 最 简 单 的 针 对 <key, value> 对 的 操 作 支 持 简 单 table schema 的 模 型, 如 Bigtable 模 型 由 于 NOSQL 相 对 SQL 而 言 更 加 注 重 扩 展 性 成 本 等,NOSQL 有 一 些 共 同 的 设 计 原 则 : 假 设 失 效 是 必 然 发 生 的 :NOSQL 注 意 扩 展 性 和 成 本, 机 器 数 变 多 时, 原 本 属 于 异 常 现 象 的 机 器 故 障 变 成 一 种 正 常 现 象,NOSQL 也 采 用 一 些 比 较 便 宜 的 普 通 PC 机, 要 求 通 过 软 件 的 方 法 处 理 错 误 限 定 应 用 模 式 从 最 为 简 单 的 KV 应 用 模 型, 到 复 杂 的 支 持 用 户 自 定 义 schema 的 Bigtable 模 型,NOSQL 支 持 的 接 口 永 远 不 可 能 和 SQL 相 比 一 般 来 说,NOSQL 系 统 都 只 支 持 随 机 读 和 顺 序 读, 少 量 系 统 支 持 表 索 引, 类 似 外 键 这 种 影 响 扩 展 性 且 不 实 用 的 功 能 基 本 是 不 需 要 支 持 的 扩 容 : 数 据 库 扩 容 一 般 是 成 倍 增 加 机 器 的, 而 NOSQL 系 统 一 般 是 一 台 或 者 少 量 几 台 构 成 一 个 机 器 组 加 入 系 统 一 般 有 两 种 数 据 分 布 方 法, 一 种 是 一 致 性 Hash, 这 个 算 法 在 Dynamo 论 文 中 有 详 细 的 介 绍, 另 外 一 种 方 法 是 将 整 个 表 格 分 成 连 续 的 小 段, 每 个 小 段 是 一 个 子 表, 由 全 局 管 理 机 器 负 责 将 每 个 小 段 分 配 到 新 加 入 的 数 据 读 写 服 务 机 器 用 一 个 例 子 说 明 取 舍 SQL 的 部 分 特 性 带 来 的 好 处 比 如 单 机 SQL 的 add 操 作, 这 是 非 常 容 易 的, 然 而, 在 多 机 上 的 实 现 变 得 非 常 困 难 因 为 我 们 需 要 操 作 多 个 副 本, 可 能 出 现 某 些 操 作 成 功, 某 些 永 远 不 成 功 的 情 况, 我 们 只 能 通 过 一 些 锁 的 方 法 来 解 决, 比 如 分 布 式 事 务 的 两 阶 段 悲 观 锁 或 者 另 外 一 种 乐 观 锁 Mysql 团 队 也 有 部 分 同 学 开 始 通 过 削 减 SQL 模 型 不 必 要 的 特 性 来 满 足 互 联 网 数 据 高 速 增 长 的 需 求, 它 们 发 起 了 一 个 叫 做 Drizzle 的 项 目 Drizzle 诞 生 于 MySQL(6.0) 关 系 数 据 库 的 拆 分 在 过 去 几 个 月 里, 它 的 开 发 者 已 经 移 走 了 大 量 非 核 心 的 功 能 ( 包 括 视 图 触 发 器 已 编 译 语 句 存 储 过 程 查 询 缓 冲 ACL 以 及 一 些 数 据 类 型 ), 其 目 标 是 要 建 立 一 个 更 精 简 更 快 的 数 据 库 系 统
10 2.6 Two-Phase commit 两 阶 段 提 交 用 于 解 决 分 布 式 事 务, 虽 然 分 布 式 事 务 解 决 的 代 价 比 较 大, 不 过 理 解 两 阶 段 锁 协 议 能 加 深 我 们 对 分 布 式 系 统 哪 些 问 题 是 困 难 的? 的 理 解 Two-phase commit 的 算 法 实 现 (from <<Distributed System: Principles and Paradigms>>): 协 调 者 (Coordinator): write START_2PC to local log; multicast VOTE_REQUEST to all participants; while not all votes have been collected { wait for any incoming vote; if timeout { write GLOBAL_ABORT to local log; multicast GLOBAL_ABORT to all participants; exit; } record vote; } if all participants sent VOTE_COMMIT and coordinator votes COMMIT { write GLOBAL_COMMIT to local log; multicast GLOBAL_COMMIT to all participants; } else { write GLOBAL_ABORT to local log; multicast GLOBAL_ABORT to all participants; } 参 与 者 (Participants) write INIT to local log; wait for VOTE_REQUEST from coordinator; if timeout { write VOTE_ABORT to local log; exit; } if participant votes COMMIT { write VOTE_COMMIT to local log; send VOTE_COMMIT to coordinator; wait for DECISION from coordinator; if timeout { multicast DECISION_REQUEST to other participants; wait until DECISION is received; /* remain blocked*/ write DECISION to local log; } if DECISION == GLOBAL_COMMIT write GLOBAL_COMMIT to local log;
11 else if DECISION == GLOBAL_ABORT write GLOBAL_ABORT to local log; } else { write VOTE_ABORT to local log; send VOTE_ABORT to coordinator; } 另 外, 每 个 参 与 者 维 护 一 个 线 程 专 门 处 理 其 它 参 与 者 的 DECISION_REQUEST 请 求, 处 理 线 程 流 程 如 下 : while true { wait until any incoming DECISION_REQUEST is received; read most recently recorded STATE from the local log; if STATE == GLOBAL_COMMIT send GLOBAL_COMMIT to requesting participant; else if STATE == INIT or STATE == GLOBAL_ABORT; send GLOBAL_ABORT to requesting participant; else skip; /* participant remains blocked */ } 从 上 述 的 协 调 者 与 参 与 者 的 流 程 可 以 看 出, 如 果 所 有 参 与 者 VOTE_COMMIT 后 协 调 者 宕 机, 这 个 时 候 每 个 参 与 者 都 无 法 单 独 决 定 全 局 事 务 的 最 终 结 果 (GLOBAL_COMMIT 还 是 GLOBAL_ABORT), 也 无 法 从 其 它 参 与 者 获 取, 整 个 事 务 一 直 阻 塞 到 协 调 者 恢 复 ; 如 果 协 调 者 出 现 类 似 磁 盘 坏 这 种 永 久 性 错 误, 该 事 务 将 成 为 被 永 久 遗 弃 的 孤 儿 一 种 可 行 的 解 决 方 法 是 当 前 的 协 调 者 宕 机 的 时 候 有 其 它 的 备 用 协 调 者 接 替, 用 于 同 一 时 刻 只 能 允 许 一 个 协 调 者 存 在, 二 者 之 间 有 一 个 选 举 的 过 程, 这 里 需 要 用 到 Paxos 协 议 Jim Gray 和 Lamport 有 一 篇 论 文 专 门 论 述 协 调 者 单 点 的 解 决 方 法 分 布 式 事 务 执 行 过 程 中 是 需 要 锁 住 其 它 更 新 的, 因 此 工 程 实 践 中 需 要 降 低 锁 的 粒 度, 实 现 起 来 极 其 复 杂, 也 影 响 效 率, 所 以 几 乎 所 有 的 NOSQL 系 统 都 回 避 这 个 问 题 2.7 Paxos Paxos 基 本 可 以 认 为 是 实 现 分 布 式 选 举 的 唯 一 方 法, 其 它 的 正 确 协 议 都 是 Paxos 变 种 Paxos 最 为 常 见 的 用 途 就 是 单 点 切 换, 比 如 Master 选 举 Paxos 协 议 的 特 点 就 是 难, 理 解 Paxos 可 以 提 高 学 习 分 布 式 系 统 的 信 心 Paxos 选 举 过 程 如 下 : Phase 1 (a) A proposer selects a proposal number n and sends a prepare request with number n to a majority of acceptors. (b) If an acceptor receives a prepare request with number n greater than that of any prepare request to which it has already responded, then it responds to the request with a promise not to accept any more proposals numbered less than n and with the highest-numbered proposal (if any) that it has accepted. Phase 2 (a) If the proposer receives a response to its prepare requests (numbered n) from a majority of acceptors, then it sends an accept request to each of those acceptors for a proposal numbered n
12 with a value v, where v is the value of the highest-numbered proposal among the responses, or is any value if the responses reported no proposals. (b) If an acceptor receives an accept request for a proposal numbered n, it accepts the proposal unless it has already responded to a prepare request having a number greater than n. Paxos 算 法 的 证 明 有 两 个 方 面 : 一 个 是 正 确 性, 一 个 是 可 终 止 性 正 确 性 很 容 易 理 解, 只 要 Proposer 的 提 议 被 接 受, 至 少 保 证 超 过 一 半 的 Acceptor 接 受 提 议 另 外 一 个 方 面 是 可 终 止 性, 我 们 可 以 想 象 一 下,Paxos 算 法 总 是 往 前 走 的, 在 Phase 1,Proposer 至 少 收 集 超 过 半 数 Acceptor 希 望 接 受 的 提 议 信 息 ; 在 Phase2,Proposer 将 收 集 到 的 编 号 最 大 的 提 议 发 送 给 这 些 Acceptor 如 果 中 间 其 它 的 Proposer 提 出 编 号 更 大 的 建 议, 提 议 被 接 受 不 断 重 试, 总 会 碰 到 一 次 提 议 成 功 的 情 况 不 过 理 论 上 也 可 能 出 现 特 别 差 的 情 况, 例 如 : 1, Proposer A 提 议 编 号 为 N 的 建 议, 进 入 Phase 1; 2, Proposer B 提 议 编 号 为 N+1 的 建 议, 进 入 Phase 1; 3, Proposer A 提 议 编 号 为 N 的 建 议, 进 入 Phase 2; 4, Proposer A 提 议 编 号 为 N+2 的 建 议, 进 入 Phase 1; 5, Proposer B 提 议 编 号 为 N+1 的 建 议, 进 入 Phase 2; 如 此 循 环, 最 后 的 结 果 是 永 远 不 可 能 有 提 议 被 接 受, 算 法 不 终 止 这 个 问 题 在 理 论 上 确 实 是 没 法 解 决 的, 需 要 选 择 一 个 distinguished proposer, 工 程 实 践 时 可 以 通 过 一 些 超 时 机 制 来 实 现, 比 如 Proposer A 在 第 5 到 10s 提 建 议,Proposer B 在 第 10 到 15s 提 建 议 3 关 键 技 术 实 现 大 规 模 分 布 式 系 统 工 程 实 现 时 一 般 会 采 用 朴 实 的 技 术, 每 个 技 术 点 看 起 来 都 非 常 简 单, 但 是 组 合 起 来 威 力 很 大, 引 入 复 杂 的 技 术 之 前 我 们 应 该 先 想 想 工 程 上 的 实 现, 因 为 分 布 式 系 统 本 来 就 不 是 研 究 问 题, 而 是 一 个 系 统 工 程 本 章 我 们 看 一 下 常 用 的 一 些 技 术 是 如 何 实 现 的 3.1 网 络 编 程 框 架 服 务 器 编 程 都 需 要 有 一 个 可 控 的 网 络 编 程 框 架 Taobao 公 司 开 源 了 一 个 tbnet 框 架, 这 个 框 架 设 计 非 常 优 雅, 我 们 结 合 tbnet 说 明 网 络 编 程 框 架 的 设 计 网 络 编 程 包 括 客 户 端 编 程 和 服 务 器 端 编 程 客 户 端 有 同 步 和 异 步 两 种 模 式 : 同 步 模 式 下, 客 户 端 往 socket 连 接 中 发 送 请 求 后 等 待 服 务 器 端 应 答 ; 异 步 模 式 下, 客 户 端 往 socket 连 接 附 带 的 队 列 中 拷 贝 请 求 内 容 ( 给 每 个 请 求 分 配 唯 一 的 请 求 号 ) 后 立 即 返 回, 等 到 服 务 器 端 应 答 时, 客 户 端 的 接 收 线 程 会 调 用 相 应 的 回 调 函 数 Tbnet 客 户 端 实 现 的 是 异 步 模 型, 因 为 同 步 模 型 可 以 通 过 异 步 模 型 来 封 装 服 务 器 端 监 听 客 户 端 的 连 接, 接 收 到 客 户 端 的 请 求 后 放 到 socket 连 接 附 带 的 任 务 队 列 中, 该 任 务 队 列 所 在 的 线 程 会 不 断 地 从 任 务 队 列 取 任 务 并 调 用 用 户 定 义 的 任 务 处 理 函 数 一 个 网 络 编 程 框 架 至 少 包 含 三 个 组 件 : 连 接 管 理, 任 务 队 列, 线 程 池 具 体 实 现 时, 客 户 端 和 服 务 器 端 都 有 网 络 线 程 负 责 发 送 和 接 收 网 络 包, 并 有 超 时 检 查 线 程 负 责 连 接 超 时 管 理 Tbnet 的 Transport 就 是 负 责 网 络 传 输 层 的 一 个 类, 它 负 责 开 两 个 线 程, 一 个 用 来 传 输, 一 个
13 检 查 超 时, 另 外, 它 提 供 两 个 方 法 listen 和 connect, 用 于 服 务 器 端 的 监 听 和 客 户 端 的 连 接 Transport 传 输 数 据 的 线 程 就 是 事 件 循 环, 不 断 监 听 发 生 的 事 件, 并 调 用 事 件 处 理 函 数 事 件 处 理 函 数 一 般 是 将 接 收 到 的 任 务 放 入 到 服 务 器 端 的 任 务 队 列 中 Tbnet 中 还 有 一 个 channel 的 概 念, 这 里 面 封 装 了 异 步 模 型 需 要 的 请 求 号, 回 调 函 数 及 相 应 的 参 数, 网 络 传 输 线 程 收 到 服 务 器 端 的 回 复 包 时 调 用 channel 上 的 处 理 函 数 Tbnet 的 ConnectionManager 用 于 底 层 的 连 接 池 管 理 网 络 编 程 框 架 需 要 将 某 些 逻 辑 暴 露 给 用 户 重 载 Tbnet 暴 露 了 如 下 的 逻 辑 : 1, 服 务 器 端 接 收 到 网 络 包 时 需 要 根 据 网 络 包 编 号 创 建 相 应 的 Packet 对 象, 创 建 Packet 的 操 作 用 户 可 重 载 ; 2, 服 务 器 端 创 建 Packet 后 默 认 的 处 理 方 法 是 加 入 任 务 队 列, 用 户 可 重 载, 比 如 用 户 可 能 需 要 将 读 请 求 和 写 请 求 加 入 不 同 的 任 务 队 列 ; 3, 任 务 队 列 所 在 的 线 程 不 断 取 队 列 中 的 任 务 并 调 用 任 务 处 理 函 数, 用 户 可 重 载 任 务 处 理 函 数 ; 4, 客 户 端 可 以 异 步 发 送 请 求 时 自 定 义 回 调 函 数 ; 一 般 来 说, 服 务 器 处 理 逻 辑 是 类 似 的, 可 以 封 装 一 个 通 用 的 服 务 器 编 程 框 架, 用 户 只 需 定 义 一 些 必 要 的 处 理 函 数 就 可 以 写 出 一 个 服 务 器 程 序 3.2 HA 与 Replication 为 了 保 证 可 靠 性, 需 要 实 现 复 制, 一 般 有 三 种 复 制 模 式 : 异 步, 强 同 步, 半 同 步 异 步 复 制 是 Mysql 的 Replication 采 用 的 模 式, 实 现 最 为 简 单, 不 过 如 果 Master 宕 机 立 即 切 换 到 Slave 或 者 Master 机 器 出 现 磁 盘 故 障 会 丢 失 最 后 的 更 新, 异 步 模 式 如 果 要 保 证 完 全 不 丢 数 据 一 般 采 用 可 靠 的 共 享 存 储 实 现 异 步 模 式 实 现 简 单,Master 有 一 个 线 程 不 断 扫 描 操 作 日 志 文 件, 将 最 新 的 修 改 发 送 给 Slave,Slave 有 线 程 接 受 Master 发 送 的 更 新 操 作 并 回 放, 接 受 日 志 和 回 放 一 般 采 用 两 个 线 程 如 果 Slave 宕 机, 以 后 重 启 时 向 Master 注 册, 将 Slave 最 新 的 日 志 点 告 知 Master,Master 为 这 个 Slave 启 动 一 个 同 步 线 程 从 最 新 的 日 志 点 开 始 不 断 地 传 输 更 新 操 作 强 同 步 模 式 下, 每 一 个 修 改 操 作 需 要 先 写 入 Slave, 然 后 写 入 Master 的 磁 盘 中 才 能 成 功 返 回 客 户 端 普 通 的 强 同 步 模 式 有 一 个 问 题, 那 就 是 Slave 宕 机 也 必 须 停 止 写 服 务, 只 能 保 证 可 靠 性 而 不 能 保 证 可 用 性 有 一 种 比 较 合 适 的 折 衷,Master 保 存 一 个 Slave 机 器 列 表, 每 个 写 操 作 都 需 要 同 步 到 Slave 列 表 的 所 有 的 机 器, 如 果 发 现 某 个 Slave 连 接 不 上, 将 它 从 Slave 列 表 中 删 除 工 程 实 现 时,Master 有 一 个 线 程 负 责 先 将 数 据 都 同 步 到 Slave, 然 后 写 入 本 地 磁 盘 和 内 存, 为 了 提 高 性 能, 需 要 将 操 作 日 志 批 量 发 送 给 Slave, 如 果 Slave 宕 机, 将 它 提 出 Slave 列 表 比 较 麻 烦 的 是 Slave 宕 机 重 启 后 向 Master 注 册,Master 可 以 选 择 立 刻 将 Slave 加 入 Slave 列 表 并 往 新 加 入 的 Slave 同 步 数 据, 与 此 同 时,Slave 从 Master 获 取 落 后 的 日 志, 当 落 后 的 日 志 全 部 获 取 完 成 时,Slave 和 Master 保 持 同 步, 如 果 这 时 Master 宕 机,Slave 是 可 以 切 换 为 Master 继 续 提 供 服 务 的 半 同 步 模 式 指 的 是 有 N 个 Slave, 数 据 写 入 到 其 中 的 K 个 Slave 并 写 入 Master 本 地 就 可 以 成 功 返 回 客 户 端, 只 要 K >= 1, 就 可 以 保 证 当 Master 宕 机 时, 可 以 通 过 分 布 式 选 举, 比 如 Paxos 选 举 算 法 选 取 数 据 最 新 的 Slave 继 续 提 供 服 务 Berkerly DB 实 现 了 这 种 半 同 步 模 式, 有 兴 趣 的 同 学 可 以 参 考 下 一 种 可 能 的 做 法 是 :Master 对 每 个 Slave 创 建 一 个 同 步 线 程 用 于 数 据 同 步, 并 维 护 一 个 协 调 者 线 程, 每 个 Slave 线 程 将 数 据 同 步 完 成 后 通 过 信 号 量 通 知 协 调 者 线 程, 协 调 者 线 程 发 现 K 个 Slave 已 经 同 步 完 毕 时 可 以 返 回 客 户 端 工 程 实 现 是 需 要 考 虑
14 对 多 个 Slave 同 时 上 下 线,Slave 瞬 断 等 各 种 异 常 情 况 模 拟 测 试, 这 是 非 常 复 杂 的 HA 还 有 一 个 Master 宕 机 后 的 切 换 问 题 如 果 是 数 据 库 应 用, 我 们 一 般 会 把 数 据 库 的 数 据 写 入 到 共 享 存 储 中 使 得 数 据 库 本 身 没 有 状 态, 这 时, 可 以 从 机 器 池 中 任 意 选 择 一 台 机 器 作 为 Slave 加 载 数 据 而 考 虑 到 成 本 问 题, 在 NOSQL 系 统 中,Master 和 Slave 是 share-nothing 的 在 强 同 步 模 式 下, 我 们 需 要 让 Slave 有 识 别 自 己 是 否 和 Master 状 态 一 致 的 能 力, 从 而 Master 宕 机 时 可 以 通 过 DNS 或 者 VIP 等 手 段 迁 移 到 Slave, 这 里 可 以 引 入 Lease 机 制 ; 在 半 同 步 模 式 下, 我 们 需 要 保 证 有 Slave 和 Master 状 态 一 致, 从 而 Master 宕 机 时 出 发 一 次 选 举 过 程, 通 过 Paxos 协 议 产 生 新 的 Master 3.3 分 裂 分 裂 一 般 对 提 供 强 一 致 性 和 最 终 一 致 性 的 系 统 而 言 我 们 假 设 按 照 类 似 Bigtable 中 的 数 据 划 分 方 法 对 表 格 进 行 拆 分, 一 个 大 表 被 拆 分 成 大 小 接 近 100MB ~ 200MB 的 子 表 tablet, 每 个 子 表 服 务 一 段 连 续 的 数 据 范 围 但 某 个 子 表 访 问 过 于 频 繁 时, 需 要 分 裂 为 两 个 子 表, 从 而 将 服 务 迁 移 到 其 它 机 器 一 个 子 表 变 成 两 个 大 小 相 近 的 子 表 的 过 程, 就 叫 分 裂 子 表 分 裂 单 机 上 的 做 法 是 不 难 的 通 用 的 做 法 可 以 将 需 要 分 裂 的 子 表 拷 贝 出 来, 按 照 确 定 的 分 裂 点 写 成 两 份, 拷 贝 过 程 中 新 来 的 写 操 作 记 录 操 作 日 志, 等 到 拷 贝 完 成 时 锁 住 写 操 作, 将 记 录 到 操 作 日 志 的 写 操 作 应 用 到 新 生 成 的 两 个 子 表 中, 释 放 写 锁, 分 裂 成 功 如 果 单 机 存 储 引 擎 支 持 快 照 功 能, 做 法 会 更 加 简 单 高 效 分 裂 时 只 需 要 生 成 一 个 快 照 并 将 快 照 中 的 数 据 按 照 确 定 的 分 裂 点 写 成 两 份, 接 着 锁 住 写 操 作 并 将 拷 贝 过 程 中 新 来 的 写 操 作 应 用 到 新 生 成 的 两 个 子 表 中 Merge-dump 存 储 引 擎 分 裂 时 还 有 更 加 简 单 的 做 法 我 们 以 Bigtable 的 Merge-dump 存 储 引 擎 为 例, 写 操 作 以 操 作 日 志 的 形 式 写 入 到 SSTable 中,compaction 合 并 过 程 将 多 个 SSTable 合 并 为 一 个 SSTable, 原 来 的 SSTable 通 过 定 期 的 垃 圾 回 收 过 程 删 除 Merge-dump 存 储 引 擎 上 执 行 分 裂 操 作 不 需 要 进 行 实 际 的 数 据 拷 贝 工 作, 只 需 要 将 内 存 中 的 索 引 信 息 分 成 两 份, 比 如 分 裂 前 子 表 的 范 围 为 (start_key, end_key], 内 存 中 的 索 引 分 成 两 个 范 围 (start_key, split_key] 和 (split_key, end_key],compaction 合 并 的 过 程 中 为 两 个 分 裂 后 的 子 表 生 成 不 同 的 SSTable 文 件 分 裂 的 难 点 在 于 如 何 使 得 多 机 在 同 一 个 分 裂 点 原 子 地 分 裂 这 个 问 题 涉 及 到 多 机 之 间 协 调, 所 以 我 们 一 般 可 以 采 用 两 阶 段 锁 来 解 决,Yahoo 的 PNUTS 系 统 正 是 采 用 了 这 种 做 法 两 阶 段 锁 的 性 能 问 题 倒 是 其 次, 工 程 实 现 中 更 为 重 要 的 是 这 个 协 议 实 现 很 复 杂, 非 常 难 以 构 造 各 种 异 常 case 进 行 测 试, 很 容 易 出 现 代 码 错 误 导 致 死 锁 的 问 题 Bigtable 采 用 了 另 外 一 种 思 路 既 然 多 机 原 子 地 执 行 分 裂 很 难 做, 我 们 就 做 单 机 分 裂 好 了 Bigtable 设 计 中, 同 一 个 子 表 tablet 同 一 个 时 刻 只 能 被 一 台 工 作 机 Tablet Server 服 务 由 于 只 在 一 个 服 务 节 点 进 行 分 裂, 问 题 得 到 了 解 决, 底 层 的 GFS 系 统 会 负 责 文 件 系 统 的 可 靠 性 和 可 用 性 保 证 当 然, 我 们 也 可 以 将 机 器 分 成 一 个 一 个 的 group, 每 一 个 子 表 都 在 某 个 group 的 每 台 机 器 存 放 一 个 备 份, 也 就 是 说, 如 果 数 据 复 制 N 份, 一 个 group 就 有 N 台 机 器 同 一 个 group 同 一 时 刻 只 有 一 台 机 器 提 供 写 服 务, 其 它 机 器 提 供 读 服 务, 当 group 中 提 供 写 服 务 的 机 器 宕 机 时, 由 group 中 的 其 它 机 器 顶 替 加 入 新 机 器 以 group 为 单 位, 每 次 新 增 N 台 分 裂 操 作 由 group 中 提 供 写 服 务 的 Master 节 点 执 行, 分 裂 操 作 写 日 志 并 同 步 到 Slave 节 点,Slave 节 点 接 收 到 分 裂 日 志 也 执 行 分 裂 如 果 Master 分 裂 成 功 但 是 Slave 分 裂 失 败, 也 不 会 出 现 问 题 因 为 只 要 不 出 现 子 表 的 迁 移, 在 单 机 上 分 裂 成 功 与 否 是 不 会 影 响 正 确 性 的 简 单 来 说, 同 一
15 个 group 同 一 时 刻 总 是 有 一 个 Master 节 点 作 为 代 表,Slave 节 点 上 的 状 态 与 Master 不 一 致 时 以 Master 为 准 工 程 实 践 中, 分 裂 仍 然 是 很 复 杂 的, 因 此 国 内 几 乎 所 有 的 分 布 式 存 储 系 统 都 采 用 预 先 切 分 好 tablet 的 方 法 只 要 切 分 得 比 较 细, 系 统 支 撑 一 两 年 是 没 有 问 题 的, 等 到 出 现 问 题 时 可 以 整 个 系 统 停 服 务 对 数 据 重 新 划 分 3.4 迁 移 我 们 仍 然 假 设 整 个 大 表 按 照 类 似 Bigtable 中 的 方 法 被 划 分 为 很 多 的 子 表 tablet 子 表 迁 移 在 集 群 主 控 机 的 指 导 下 进 行, 迁 移 的 做 法 和 分 裂 有 很 多 共 通 之 处 假 设 机 器 A 需 要 将 子 表 迁 移 到 机 器 B, 迁 移 的 做 法 与 单 机 子 表 分 裂 时 拷 贝 数 据 的 方 法 类 似 分 为 两 个 阶 段, 第 一 个 阶 段 将 机 器 A 的 待 迁 移 子 表 的 数 据 拷 贝 到 机 器 B, 这 个 阶 段 新 来 的 修 改 操 作 只 记 录 操 作 日 志 ; 第 二 个 阶 段 停 止 写 服 务, 将 第 一 个 阶 段 拷 贝 数 据 过 程 中 接 收 到 的 修 改 操 作 拷 贝 到 机 器 B; 数 据 迁 移 完 成 时 主 控 机 修 改 被 迁 移 子 表 的 位 置 信 息, 整 个 迁 移 过 程 结 束 同 样, 如 果 单 机 存 储 引 擎 支 持 快 照 功 能, 整 个 流 程 会 更 加 容 易 和 高 效 Bigtable 的 迁 移 依 赖 于 底 层 GFS 提 供 可 靠 的 文 件 存 储,Bigtable 写 操 作 的 操 作 日 志 持 久 化 到 GFS 中, 且 每 个 tablet 由 一 台 Tablet Server 提 供 服 务 当 Tablet Server 出 现 宕 机 或 者 负 载 平 衡 需 要 执 行 子 表 迁 移 操 作 时, 只 需 要 停 止 源 Tablet Server 对 待 迁 移 tablet 的 服 务 并 在 目 的 Tablet Server 上 重 新 加 载 tablet 即 可 由 于 Bigtable 有 GFS 提 供 可 靠 存 储, 我 们 可 以 认 为 Tablet Server 服 务 节 点 是 无 状 态 的 我 们 在 这 里 提 出 一 种 设 计 方 案 : 将 机 器 分 成 一 个 一 个 的 group, 每 一 个 子 表 都 在 某 个 group 的 每 台 机 器 存 放 一 个 备 份, 同 一 个 时 刻 一 个 group 中 只 有 一 台 机 器 提 供 写 服 务, 其 它 机 器 都 提 供 读 服 务 将 子 表 从 group A 迁 移 到 group B 其 实 就 是 将 子 表 从 group A 中 的 Master 机 器 迁 移 到 group B 中 的 Master 机 器, 整 个 过 程 由 集 群 的 主 控 机 来 协 调 下 面 我 们 考 虑 一 下 迁 移 过 程 中 发 生 的 各 种 异 常 情 况 : 1, 迁 移 的 第 一 个 阶 段 group A 中 Master 宕 机 :group A 中 某 台 与 Master 保 持 强 同 步 的 Slave 接 替 Master 对 外 服 务, 整 个 迁 移 过 程 失 败 结 束 ; 2, 迁 移 的 第 二 个 阶 段 group A 中 Master 宕 机 :group A 中 某 台 与 Master 保 持 强 同 步 的 Slave 接 替 Master 对 外 服 务, 整 个 迁 移 过 程 失 败 结 束 ; 3, 迁 移 过 程 中 group B 中 Master 宕 机 : 整 个 迁 移 过 程 失 败 结 束 ; 4, 拷 贝 数 据 完 成 后 集 群 主 控 机 修 改 子 表 位 置 信 息 失 败 : 此 时 被 迁 移 tablet 在 group A 和 group B 中 的 数 据 完 全 一 样, 任 意 一 个 group 提 供 服 务 均 可 ; 5, 迁 移 完 成 后 group A 中 Master 宕 机 :group A 中 某 台 与 Master 保 持 强 同 步 的 Slave 接 替 Master 对 外 服 务, 这 个 Slave 可 能 不 知 道 子 表 已 经 迁 移 的 信 息 子 表 迁 移 后 客 户 端 写 操 作 需 要 重 新 建 立 连 接, 这 个 过 程 会 请 求 集 群 的 主 控 机, 但 是 group A 的 机 器 可 能 使 用 老 数 据 继 续 提 供 读 服 务, 这 就 需 要 Master 将 子 表 迁 移 信 息 告 知 group A 中 的 其 它 机 器 上 述 的 机 器 同 构 的 做 法 有 一 个 问 题 : 增 加 副 本 需 要 全 部 拷 贝 一 台 机 器 存 储 的 数 据, 如 果 数 据 总 量 为 1TB, 拷 贝 限 速 20MB/s, 拷 贝 时 间 为 十 几 个 小 时, 另 外, 子 表 迁 移 的 工 程 实 现 也 比 较 麻 烦 因 此, 工 程 上 多 数 系 统 静 态 分 配 好 每 个 子 表 所 在 的 机 器 并 且 不 迁 移, 如 数 据 库 sharding 预 先 分 配 好 每 一 份 数 据 所 在 的 机 器 另 外 一 种 做 法 是 设 计 的 时 候 分 离 静 态 数 据 和 修 改 数 据, 定 期 合 并, 迁 移 的 时 候 只 迁 移 静 态 数 据, 这 个 思 想 在 淘 宝 最 近 研 发 的 Oceanbase 系 统 里 面 有 所 体 现
16 3.5 负 载 均 衡 负 载 平 衡 是 一 个 研 究 课 题, 难 点 在 于 负 载 平 衡 的 策 略 和 参 数 调 整, 工 程 化 的 难 度 不 大, 和 数 据 挖 掘 相 关 的 项 目 有 些 类 似, 需 要 不 断 地 做 假 设 并 做 实 验 验 证 负 载 平 衡 有 两 种 思 路, 一 种 是 集 群 总 控 机 根 据 负 载 情 况 全 局 调 度, 另 一 种 思 路 是 采 用 DHT 方 法 第 二 种 思 路 可 以 参 考 Amazon Dynamo 的 论 文,DHT 算 法 中 每 个 节 点 分 配 的 token 决 定 了 数 据 及 负 载 的 分 布 假 设 DHT 环 中 有 S 个 节 点, 一 种 比 较 好 的 token 分 配 方 法 是 将 整 个 Hash 空 间 分 成 Q 等 份,Q >> S,token 分 配 维 持 每 个 节 点 分 配 Q/S 个 token 的 特 性 当 节 点 下 线 时, 需 要 将 它 所 服 务 的 token 分 配 给 其 它 节 点, 从 而 保 持 每 个 节 点 包 含 Q/S 个 token 的 特 性 ; 同 样, 当 新 节 点 上 线 时, 也 需 要 从 集 群 中 已 有 的 节 点 获 取 token 使 得 最 终 维 持 每 个 节 点 Q/S 个 token 的 特 性 第 一 种 思 路 需 要 工 作 机 通 过 heartbeat 定 时 将 读 写 个 数, 磁 盘, 内 存 负 载 等 信 息 发 送 给 主 控 机, 主 控 机 根 据 负 载 计 算 公 式 计 算 出 需 要 迁 移 的 数 据 放 入 到 迁 移 队 列 中 等 待 执 行 负 载 平 衡 的 时 候 需 要 注 意 控 制 节 奏, 比 如 一 台 工 作 机 刚 上 线 的 时 候, 由 于 负 载 最 轻, 如 果 主 控 机 将 大 量 的 数 据 迁 移 到 新 上 线 的 机 器, 由 于 迁 移 过 程 不 能 提 供 写 服 务, 整 个 系 统 的 对 外 表 现 性 能 会 因 为 新 增 机 器 而 变 差 一 般 来 说, 从 新 机 器 加 入 到 集 群 负 载 达 到 比 较 均 衡 的 状 态 需 要 较 长 一 段 时 间, 比 如 30 分 钟 到 一 个 小 时 3.6 Chubby Chubby 是 Google 的 Paxos 实 现,Paxos 靠 谱 的 实 现 不 多,Chubby 毫 无 疑 问 是 做 的 最 优 秀 的 Chubby 通 过 类 似 文 件 系 统 接 口 的 方 式 给 用 户 暴 露 分 布 式 锁 服 务 我 们 先 看 看 应 用 是 如 何 使 用 Chubby 服 务 的 在 GFS/Bigtable 论 文 中, 我 们 至 少 能 够 看 到 有 如 下 几 处 使 用 了 Chubby 1, Master 选 举 Master 宕 机 时, 与 Master 保 持 强 同 步 的 Slave 切 换 为 Master 继 续 提 供 服 务 在 这 个 过 程 中,Master 和 Slave 都 定 时 向 Chubby 请 求 成 为 Master 的 锁,Master 锁 有 一 个 Lease 的 期 限, 如 果 Master 正 常, 一 定 会 在 Master 锁 没 有 过 期 的 时 候 申 请 延 长 锁 的 时 间, 继 续 提 供 服 务 当 Master 宕 机 且 锁 的 Lease 过 期 时,Slave 将 抢 到 Master 锁 切 换 为 Master 2, tablet 服 务 为 了 保 证 强 一 致 性, 一 个 tablet 同 一 时 刻 只 允 许 被 一 个 Tablet Server 加 载 提 供 服 务 每 个 tablet server 启 动 时 都 向 Chubby 服 务 获 取 一 个 锁, 每 当 Master 发 现 tablet server 出 现 异 常 时, 它 也 尝 试 获 取 该 Tablet server 的 锁 Master 和 Tablet Server 二 者 只 有 一 个 节 点 能 够 获 取 到 锁, 如 果 锁 被 Master 获 取, 可 以 确 定 Tablet Server 已 经 宕 机, 此 时 可 以 将 它 服 务 的 tablet 分 配 给 其 它 机 器 3, 存 储 Bigtable 表 格 的 schema 信 息 由 于 Chubby 可 以 认 为 是 一 个 一 致 的 共 享 存 储, 并 且 schema 的 访 问 压 力 不 大,Chubby 可 以 存 储 schema 信 息 我 们 再 来 看 看 Chubby 内 部 大 致 是 如 何 实 现 的 Chubby 一 般 有 五 台 机 器 组 成 一 个 集 群, 可 以 部 署 成 两 地 三 机 房, 这 样 任 何 一 个 机 房 停 电 都 不 影 响 Chubby 服 务 Chubby 内 部 的 五 台 机 器 需 要 通 过 实 现 Paxos 协 议 选 取 一 个 Chubby Master 机 器, 其 它 机 器 是 Chubby Slave, 同 一 时 刻 只 有 一 个 Chubby Master Chubby 相 关 的 数 据, 比 如 锁 信 息, 客 户 端 的 Session 信 息 都 需 要 同 步 到 整 个 集 群, 采 用 半 同 步 的 做 法, 超 过 一 半 的 机 器 成 功 就 可 以 回 复 客 户 端 每 个
17 Chubby Master 和 Chubby Slave 都 希 望 成 为 Chubby Master,Chubby Master 有 一 个 Lease 期 限, 如 果 Chubby Master 正 常, 它 将 在 Lease 快 到 期 的 时 候 延 长 Lease 期 限, 如 果 Chubby Master 宕 机,Chubby 集 群 内 部 将 触 发 一 次 Paxos 选 举 过 程 每 个 Chubby Slave 都 希 望 自 己 成 为 Chubby Master, 它 们 类 似 于 Paxos 协 议 中 的 Proposer, 每 个 Chubby 集 群 中 的 节 点 都 是 Acceptor, 最 后 可 以 确 保 只 有 一 个 和 原 有 的 Chubby Master 保 持 完 全 同 步 的 Chubby Slave 被 选 取 为 新 的 Chubby Master 当 然, 无 论 是 Paxos 选 举 还 是 Session, 锁 信 息 同 步,Chubby 集 群 内 部 机 器 故 障 检 测 都 远 没 有 这 么 简 单, 这 里 的 实 现 也 是 笔 者 的 揣 测, 如 果 有 同 学 感 兴 趣, 可 以 参 考 Berkerly DB 中 半 同 步 ( 包 括 选 举 过 程 ) 的 实 现, 这 部 分 代 码 是 由 Google 内 部 开 源 出 来 的 3.7 分 布 式 事 务 对 于 分 布 式 事 务, 大 多 数 情 况 下 我 们 应 该 想 的 是 如 何 回 避 它, 两 阶 段 锁 的 方 法 不 仅 效 率 低, 而 且 实 现 特 别 复 杂 有 的 时 候, 我 们 需 要 和 业 务 方 一 起 探 讨 如 何 规 避 分 布 式 事 务 这 里 我 们 会 用 到 流 行 的 概 念 BASE, 即 基 本 可 用, 柔 性 状 态, 柔 性 一 致 和 最 终 一 致 等 对 一 个 基 本 可 用 系 统 来 说, 我 们 需 要 把 系 统 中 的 所 有 功 能 点 进 行 优 先 级 的 划 分, 比 如 转 账 业 务 和 淘 宝 的 收 藏 夹 业 务 两 者 对 一 致 性 的 要 求 肯 定 是 不 同 的 柔 性 状 态 对 用 户 来 说 是 一 个 完 整 的 系 统, 它 的 一 致 性 是 不 允 许 有 任 何 损 失 的, 就 是 说 用 户 支 付 了 10 块 钱, 那 么 他 的 帐 户 上 必 然 是 只 扣 掉 了 10 块 钱 ; 但 是 对 于 系 统 内 部 的 状 态, 我 们 可 以 采 用 一 种 柔 性 的 策 略, 比 如 说 系 统 内 分 布 了 ABC 三 个 功 能 模 块, 我 们 允 许 它 们 在 某 一 时 刻 三 个 模 块 的 状 态 可 以 不 一 致 我 们 会 通 过 业 务 和 技 术 的 手 段, 比 如 说 异 步 机 制 或 者 批 处 理 方 式 来 保 证 系 统 通 过 柔 性 状 态 一 致 来 获 得 可 用 性 目 前 底 层 NOSQL 存 储 系 统 实 现 分 布 式 事 务 的 只 有 Google 的 系 统, 它 在 Bigtable 之 上 用 Java 语 言 开 发 了 一 个 系 统 Megastore, 实 现 了 两 阶 段 锁, 并 通 过 Chubby 来 避 免 两 阶 段 锁 协 调 者 宕 机 带 来 的 问 题 Megastore 实 现 目 前 只 有 简 单 介 绍, 还 没 有 相 关 论 文 在 这 个 问 题 上, 我 们 只 能 说 是 Google 的 同 学 工 程 能 力 太 强 了, 我 们 开 发 NOSQL 系 统 的 时 候 还 是 走 为 上 策 3.8 Copy-on-write 与 Snapshot Copy-on-write 技 术 在 互 联 网 公 司 使 用 比 较 多, 这 时 因 为 大 多 数 应 用 的 读 写 比 例 接 近 10 : 1,Copy-on-write 读 操 作 不 用 加 锁, 极 大 地 提 高 了 读 的 效 率, 特 别 是 现 在 服 务 器 一 般 都 有 8 个 或 者 16 个 核 Copy-on-write 技 术 还 带 来 了 一 个 好 处, 那 就 是 Snapshot 的 时 候 不 需 要 停 服 务, 而 Snapshot 功 能 对 于 分 布 式 文 件 系 统 非 常 重 要 Copy-on-write 技 术 在 树 形 结 构 中 比 较 容 易 实 现, 假 如 我 们 实 现 一 个 支 持 Copy-on-write 的 B 树, 基 本 可 以 用 来 作 为 大 多 数 管 理 结 构 的 内 部 数 据 结 构, 比 如 GFS 的 chunk 管 理, 文 件 名 管 理,Bigtable 中 的 子 表 管 理 Copy-on-write 的 示 意 图 如 下 :
18 如 上 图,B+ 树 每 次 执 行 更 新 操 作 时, 将 从 叶 子 到 根 节 点 路 径 上 的 所 有 节 点 先 拷 贝 出 来, 并 在 拷 贝 的 节 点 上 执 行 修 改, 更 新 操 作 通 过 原 子 地 切 换 根 节 点 的 指 针 来 提 交 由 于 使 用 了 Copy-on-write 技 术, 如 果 读 取 操 作 发 生 在 写 操 作 生 效 前 将 读 取 老 的 数 据, 否 则 读 取 新 的 数 据, 不 需 要 加 锁 Copy-on-write 技 术 需 要 利 用 到 引 用 计 数, 当 节 点 没 有 被 引 用, 也 就 是 引 用 计 数 减 为 0 时 被 释 放, 引 用 计 数 极 大 地 增 加 了 数 据 结 构 的 复 杂 度 如 果 需 要 对 B+ 树 的 某 一 个 子 树 进 行 Snapshot 操 作, 只 需 要 增 加 这 个 子 树 的 根 节 点 的 引 用 计 数 就 可 以 了, 后 续 的 读 取 操 作 都 将 读 取 执 行 Snapshot 操 作 时 的 数 据 对 于 Hash 这 样 的 常 用 数 据 结 构, 由 于 不 支 持 Copy-on-write, 如 果 需 要 支 持 Snapshot 操 作, 需 要 进 行 一 定 的 处 理 常 用 的 做 法 是 封 装 一 个 临 时 的 缓 冲 区, 执 行 Snapshot 到 删 除 Snapshot 的 过 程 中, 写 操 作 写 入 到 临 时 缓 冲 区, 读 操 作 需 要 合 并 静 态 数 据 和 临 时 缓 冲 区 中 的 动 态 数 据 分 布 式 系 统 中 的 Snapshot 操 作 比 单 机 操 作 要 复 杂 很 多, 我 们 以 GFS 文 件 系 统 的 Snapshot 为 例 进 行 说 明 为 了 对 某 个 文 件 做 Snapshot, 我 们 首 先 需 要 停 止 这 个 文 件 的 写 服 务, 接 着 增 加 这 个 文 件 的 所 有 chunk 的 引 用 计 数, 从 而 以 后 相 应 的 chunk 被 修 改 时 会 先 对 chunk 执 行 一 次 拷 贝 对 某 个 文 件 执 行 Snapshot 的 大 致 步 骤 如 下 : 1, 通 过 Lease 机 制 收 回 对 文 件 每 一 个 chunk 写 权 限, 停 止 对 文 件 的 写 服 务 ; 2, Master 拷 贝 文 件 名 等 元 数 据 生 成 一 个 新 的 Snapshot 文 件 ; 3, 对 执 行 Snapshot 的 文 件 的 所 有 chunk 增 加 引 用 计 数 ; 当 然, 工 程 实 现 时 远 不 止 这 么 简 洁, 请 设 计 时 务 必 考 虑 清 楚 各 种 异 常 和 细 节
19 3.9 操 作 日 志 与 checkpoint 无 论 是 数 据 库 还 是 NOSQL 系 统, 都 会 涉 及 到 操 作 日 志 这 是 因 为 磁 盘 和 内 存 不 一 样, 它 是 一 个 顺 序 访 问 设 备, 每 一 个 磁 盘 读 写 操 作 都 需 要 寻 道, 而 这 个 寻 道 时 间 占 整 个 读 写 操 作 的 百 分 比 很 大 操 作 日 志 的 原 理 很 简 单 : 为 了 利 用 好 磁 盘 的 顺 序 读 写 特 性, 将 客 户 端 的 写 操 作 先 顺 序 写 入 到 磁 盘 中, 然 后 应 用 到 内 存 中, 由 于 内 存 是 随 机 读 写 设 备, 可 以 很 容 易 通 过 各 种 数 据 结 构, 比 如 B+ 树 将 数 据 有 效 地 组 织 起 来 当 机 器 宕 机 重 启 时, 只 需 要 回 放 操 作 日 志 就 可 以 恢 复 内 存 状 态 为 了 提 高 系 统 的 并 发 能 力, 系 统 会 积 攒 一 定 的 操 作 日 志 再 批 量 写 入 到 磁 盘 中 如 果 每 次 宕 机 恢 复 都 需 要 回 放 所 有 的 操 作 日 志, 效 率 是 无 法 忍 受 的,Checkpoint 正 是 为 了 解 决 这 个 问 题 系 统 定 期 将 内 存 状 态 以 checkpoint 文 件 的 形 式 dump 到 磁 盘 中, 并 记 录 checkpoint 时 刻 对 应 的 操 作 日 志 回 放 点, 以 后 宕 机 恢 复 只 需 要 先 加 载 checkpoint 后 回 放 checkpoint 对 应 的 日 志 回 放 点 以 后 的 操 作 日 志 由 于 将 内 存 状 态 dump 到 磁 盘 需 要 很 长 的 时 间, 而 这 段 时 间 还 可 能 有 新 的 写 操 作,checkpoint 必 须 找 一 个 一 致 的 状 态 如 果 系 统 的 数 据 结 构 支 持 Copy-on-write, 事 情 变 得 相 当 简 单 : 只 需 要 增 加 B+ 树 的 根 节 点 的 引 用 计 数 对 整 棵 树 做 一 个 快 照, 记 录 此 时 对 应 的 操 作 日 志 回 放 点 即 可, 然 后 将 这 个 快 照 dump 到 磁 盘 中 由 于 执 行 checkpoint 的 时 候 需 要 记 录 此 时 对 应 的 日 志 回 放 点, 一 个 小 小 的 技 巧 就 是 生 成 checkpoint 的 时 候 切 一 下 操 作 日 志 的 文 件, 使 得 编 号 为 i 的 checkpoint 文 件 对 应 编 号 为 i+1 的 操 作 日 志 文 件 3.10 列 式 存 储 与 压 缩 列 式 存 储 主 要 应 用 在 数 据 仓 库 类 的 应 用, 列 式 存 储 将 同 一 个 列 的 数 据 存 放 在 一 起, 同 一 个 列 里 面 按 照 行 有 序 由 于 同 一 个 列 的 数 据 重 复 读 很 高, 列 式 存 储 压 缩 时 有 很 大 的 优 势, 比 如 Google Bigtable 列 式 存 储 对 网 页 库 压 缩 可 以 达 到 10~15 倍 的 压 缩 率 而 且, 数 据 仓 库 类 应 用 本 身 就 是 按 照 列 来 访 问 的, 比 如 查 询 来 自 湖 南 的 用 户 请 求 个 数 由 于 用 户 的 读 写 操 作 使 用 的 SQL 语 句 是 按 照 行 的 顺 序, 列 式 存 储 在 实 现 更 新 操 作 事 务 性, 读 取 某 一 行 等 普 通 的 数 据 库 操 作 相 对 比 较 麻 烦 压 缩 是 一 个 专 门 的 研 究 课 题, 没 有 通 用 的 做 法, 需 要 根 据 数 据 的 特 点 选 择 或 者 自 己 开 发 新 的 算 法 压 缩 的 本 质 就 是 找 数 据 的 重 复 或 者 规 律, 用 尽 量 少 的 字 节 表 示 压 缩 算 法 一 般 有 一 个 窗 口 的 概 念, 在 窗 口 的 内 部 找 重 复 或 者 规 律 存 储 系 统 在 选 择 压 缩 算 法 的 时 候 有 两 个 考 虑 点 : 压 缩 比 和 效 率 读 操 作 需 要 先 读 取 磁 盘 中 的 内 容 再 解 压 缩, 写 操 作 需 要 先 压 缩 再 将 压 缩 结 果 写 入 到 磁 盘, 整 个 操 作 的 延 时 包 括 压 缩 / 解 压 缩 和 磁 盘 读 写 的 延 迟, 压 缩 比 也 大, 磁 盘 读 写 的 数 据 量 越 大, 相 应 地 压 缩 / 解 压 缩 的 时 间 也 长, 所 以 这 里 需 要 一 个 很 好 的 权 衡 点 压 缩 算 法 的 设 计 和 选 择 远 超 出 我 的 能 力 范 围, 常 用 的 压 缩 算 法 有 gzip,lzo,lzw 在 Google 的 Bigtable 系 统 中, 设 计 了 Zippy 和 BMDiff 两 种 压 缩 算 法 Zippy 是 和 LZW 类 似 的 Zippy 并 不 像 LZW 或 者 gzip 那 样 压 缩 比 高, 但 是 他 处 理 速 度 非 常 快 BMDiff 压 缩 速 率 可 达 到 100MB ~ 200MB, 解 压 缩 速 率 达 到 400MB ~ 1000MB, 压 缩 近 似 度 高 的 数 据 压 缩 比 也 很 不 错 可 见 压 缩 算 法 的 选 择 不 能 仅 仅 看 压 缩 比, 还 要 看 算 法 执 行 效 率
20 4 通 用 存 储 系 统 分 类 从 本 质 上 将, 通 用 存 储 系 统 只 需 要 一 套 就 可 以 满 足 互 联 网 公 司 95% 以 上 的 需 求, 因 为 从 语 义 上 讲, 一 套 系 统 能 够 表 达 的 语 义 和 多 套 系 统 没 有 区 别, 二 者 都 是 完 备 的 根 据 公 开 的 资 料,google 也 正 是 朝 着 这 个 方 向 努 力 的, 不 过 这 不 仅 要 求 工 程 师 有 超 强 的 能 力, 还 要 求 公 司 有 一 个 很 好 的 制 度 保 证 工 程 师 之 间 不 要 为 了 因 为 贪 功 而 竞 争, 比 如 发 现 通 用 系 统 有 某 处 不 符 合 需 求 就 另 起 炉 灶 开 发 一 个 专 用 系 统 从 工 程 的 角 度 上 看, 一 个 工 程 代 码 量 翻 番, 工 程 的 复 杂 度 至 少 是 原 来 的 四 倍 权 衡 互 联 网 公 司 业 务 的 需 求 及 通 用 系 统 的 工 程 复 杂 度, 笔 者 认 为 互 联 网 公 司 大 致 需 要 如 下 几 类 存 储 系 统 : 1, 数 据 库 及 类 数 据 库 2, 线 上 最 终 一 致 性 系 统 3, 线 上 弱 一 致 性 系 统 4, 半 线 上 及 线 下 系 统 数 据 库 及 类 数 据 库 系 统 的 存 在 毋 庸 置 疑,NOSQL 不 可 能 完 全 替 换 数 据 库 系 统 关 系 型 数 据 库 支 持 的 操 作 丰 富 多 样, 厂 商, 工 具 支 持 也 已 经 规 模 化, 开 发 人 员 也 认 可 了 SQL 模 型 这 种 类 型 的 存 储 系 统 提 供 复 杂 的 语 义, 但 是 扩 展 性 稍 差 类 数 据 库 系 统 是 数 据 库 与 NOSQL 之 间 的 一 个 折 衷, 比 如 Drizzle 通 过 减 少 一 些 不 必 要 的 Mysql 通 过 增 强 扩 展 性 类 数 据 库 系 统 是 根 据 互 联 网 应 用 的 特 点 选 择 数 据 库 的 特 性 子 集 加 以 支 持, 如 果 说 数 据 库 的 出 发 点 是 尽 可 能 支 持 所 有 SQL 特 性, 那 么, 类 数 据 库 系 统 的 出 发 点 是 在 满 足 应 用 的 前 提 下 尽 量 不 支 持 不 必 要 的 SQL 特 性 与 普 通 NOSQL 系 统 不 同 的 是, 类 数 据 库 系 统 一 般 不 会 有 过 多 的 动 态 分 裂 和 迁 移, 并 且 支 持 事 务 线 上 最 终 一 致 性 系 统 指 提 供 线 上 服 务 且 保 证 最 终 一 致 性 线 上 系 统 对 用 户 操 作 的 延 时 一 般 在 ms 级 别, 比 如 1 ~ 30ms, 但 是 对 于 写 操 作, 机 器 宕 机 的 时 候 停 止 10~20s 的 写 服 务 很 多 时 候 是 可 以 接 受 的 线 上 最 终 一 致 性 系 统 的 读 操 作 保 证 1~30ms 的 延 迟, 且 读 操 作 只 允 许 有 秒 级 别 的 延 时, 对 同 一 份 数 据 同 一 时 刻 永 远 只 有 一 个 节 点 提 供 写 服 务, 因 此, 写 节 点 宕 机 时, 可 能 需 要 停 止 如 10~20s 的 写 服 务 这 种 类 型 的 系 统, 内 部 实 现 时 需 要 动 态 分 裂 和 迁 移 以 进 行 负 载 均 衡 线 上 弱 一 致 性 系 统 指 的 是 Dynamo 及 其 变 种 Cassandra 这 样 的 系 统 我 们 在 2.4 节 一 致 性 模 型 的 定 义 中 已 经 将 Dynamo 这 种 需 要 解 决 冲 突 的 系 统 归 类 为 弱 一 致 性 系 统 线 上 弱 一 致 性 KV 系 统 对 读 和 写 操 作 都 需 要 保 证 1 ~ 30ms 的 延 迟 线 上 弱 一 致 性 系 统 对 于 能 够 解 决 冲 突 的 应 用 非 常 有 效, 比 如 能 够 容 忍 时 钟 不 一 致 带 来 的 问 题 而 采 用 last write wins 的 策 略, 或 者 淘 宝 购 物 车 这 种 可 以 直 接 合 并 购 物 车 中 的 宝 贝 的 应 用 线 上 弱 一 致 性 的 一 个 特 别 大 的 好 处 是 可 以 采 用 P2P 的 方 法 实 现, 由 于 消 除 了 单 点, 任 何 一 个 节 点 出 点 小 问 题, 比 如 代 码 出 现 bug 都 不 会 给 整 个 系 统 带 来 太 大 的 影 响 对 于 互 联 网 公 司, 线 上 最 终 一 致 性 系 统 和 弱 一 致 性 系 统 二 者 实 现 一 个 就 可 以 了, 这 主 要 取 决 于 不 同 公 司 业 务 的 一 致 性 要 求 Dynamo 这 样 的 系 统 还 有 一 个 优 势 是 提 供 云 服 务, 因 为 消 除 了 单 点, 个 别 代 码 错 误 或 者 机 房 故 障 不 至 于 影 响 很 大, 而 基 于 类 似 last write wins 这 样 的 冲 突 解 决 策 略 很 少 会 出 现 问 题 而 强 一 致 性 系 统 一 般 需 要 有 Master 主 控 机, 这 是 一 个 单 点, 代 码 出 现 bug 影 响 很 大, 整 个 机 房 故 障 这 种 问 题 解 决 起 来 也 相 对 要 复 杂 很 多 半 线 上 及 线 下 系 统 指 的 就 是 以 GFS + Bigtable 为 代 表 的 存 储 系 统, 适 合 数 据 挖 掘, 搜 索 等 各 种 类 型 的 应 用 如 果 Bigtable 做 的 足 够 好, 是 可 以 解 决 线 上 最 终 一 致 性 KV 系 统 的 问 题 的, 也 就 是 说, 一 般 的 互 联 网 公 司 只 需 要 这 一 套 系 统 就 可 以 解 决 95% 的 需 求 假 设 没 有 Google
21 那 么 好 的 工 程 师 和 适 合 平 台 化 的 制 度, 可 以 将 GFS + Bigtable 定 位 为 解 决 半 线 上 及 线 下 问 题, 这 将 使 得 问 题 简 化 很 多 这 套 系 统 的 特 点 就 是 通 用, 不 过 整 体 工 程 量 过 于 复 杂 这 套 方 案 是 贵 族 化 解 决 方 案, 需 要 分 别 开 发 文 件 系 统 和 表 格 系 统, 且 为 了 解 决 单 点 问 题, 需 要 开 发 Chubby 锁 服 务, 且 设 计 时 总 是 追 求 通 用 性 和 性 能 极 限 Chubby 锁 服 务 代 码 非 常 复 杂, 但 是 出 了 一 点 小 问 题 会 使 得 整 个 集 群 没 法 服 务 5 典 型 存 储 系 统 工 程 实 现 本 章 首 先 大 致 描 述 单 机 上 存 储 引 擎 的 实 现, 接 着 根 据 通 用 存 储 系 统 的 分 类 选 取 一 些 典 型 系 统 加 以 介 绍 5.1 单 机 存 储 引 擎 简 单 来 说, 单 机 存 储 引 擎 解 决 如 下 几 个 问 题 : 1, 插 入 一 条 数 据 ; 2, 删 除 一 条 数 据 ; 3, 更 新 一 条 已 有 的 数 据 ; 4, 随 机 读 取 一 条 数 据 ;(Read) 5, 顺 序 扫 描 一 段 范 围 的 数 据 ;(Scan) 磁 盘 时 顺 序 性 设 备, 适 合 批 量 顺 序 写 入, 而 内 存 是 随 机 访 问 设 备, 适 合 通 过 各 种 数 据 结 构 组 织 起 来 从 而 提 供 快 速 的 插 入 删 除 查 找 性 能 单 机 存 储 引 擎 需 要 解 决 的 问 题 就 是 利 用 好 磁 盘 和 内 存 的 特 性 一 般 来 说, 互 联 网 对 单 机 存 储 引 擎 的 需 求 有 两 种 : 一 种 应 用 只 需 要 随 机 读 取 功 能, 没 有 顺 序 读 取 需 求, 另 一 种 应 用 需 要 兼 顾 随 机 读 取 和 顺 序 扫 描 需 求 另 外, 单 机 层 面 经 常 需 要 设 计 通 用 的 缓 存 子 系 统 随 机 访 问 存 储 引 擎 随 机 访 问 存 储 引 擎 不 支 持 顺 序 扫 描, 因 此, 这 种 类 型 的 存 储 引 擎 不 需 要 将 数 据 在 存 储 引 擎 中 连 续 存 放 由 于 磁 盘 是 顺 序 读 取 设 备, 可 以 采 用 Append-only 的 方 式 : 添 加 一 条 数 据 的 时 候 追 加 到 文 件 的 末 尾, 删 除 时 索 引 做 标 记, 修 改 数 据 时 追 加 新 数 据 到 数 据 文 件 末 尾 并 修 改 索 引 指 向 新 位 置 修 改 或 者 删 除 的 data 的 空 间 不 实 时 回 收, 而 是 通 过 在 系 统 比 较 空 闲 的 时 候 执 行 数 据 重 写 合 并 操 作 索 引 存 放 在 内 存, 可 以 通 过 B+ 树 或 者 Hash 的 方 式 组 织 这 里 有 一 个 问 题, 如 果 机 器 宕 机, 需 要 将 所 有 的 数 据 都 读 取 出 来 才 能 恢 复 内 存 中 的 全 部 索 引, 这 个 数 据 量 是 很 大 的 索 引 数 据 也 可 以 先 写 磁 盘 在 修 改 内 存 索 引 数 据 结 构, 由 于 索 引 文 件 远 小 于 数 据 文 件, 当 机 器 出 现 故 障 时, 只 需 要 将 全 部 的 索 引 数 据 读 取 出 来 构 造 内 存 数 据 结 构 就 可 以 了 稍 微 麻 烦 点 的 是 数 据 重 写 过 程, 数 据 重 写 过 程 相 当 于 先 对 数 据 做 一 个 Snapshot, 然 后 重 写 这 份 Snapshot, 回 收 删 除 和 修 改 操 作 造 成 的 文 件 空 洞, 而 且, 重 写 过 程 中 还 需 要 能 够 接 受 新 的 更 新 当 需 要 启 动 重 写 过 程 时, 先 等 待 以 前 的 写 操 作 结 束, 以 后 的 写 操 作 都 写 新 文 件 ( 相
22 当 于 执 行 一 次 Snapshot 操 作 ), 重 写 的 数 据 直 接 append 到 新 文 件 尾 部, 更 新 索 引 时 如 果 发 现 索 引 最 后 更 新 时 间 在 执 行 Snapshot 之 后, 说 明 是 重 写 过 程 中 有 新 的 更 新, 什 么 也 不 做 ; 否 则, 更 新 索 引 由 于 索 引 全 部 装 载 在 内 存 中, 每 次 随 机 读 取 操 作 最 多 访 问 一 次 磁 盘, 而 且, 写 操 作 也 没 有 太 多 的 冗 余 数 据, 因 此, 从 理 论 上 讲, 这 种 做 法 对 于 随 机 访 问 已 经 最 优 了 通 用 存 储 引 擎 通 用 存 储 引 擎 既 支 持 随 机 读 取, 又 能 很 好 地 支 持 顺 序 扫 描, 这 就 要 求 数 据 在 磁 盘 中 连 续 存 放, 一 个 比 较 常 见 的 做 法 就 是 Merge-dump 存 储 引 擎, 下 面 以 Bigtable 为 例 进 行 说 明 数 据 写 入 时 需 要 先 写 操 作 日 志, 成 功 后 应 用 到 内 存 中 的 MemTable 中, 写 操 作 日 志 是 往 磁 盘 中 的 日 志 文 件 追 加 数 据, 很 好 地 利 用 了 磁 盘 设 备 的 特 性 当 内 存 中 的 MemTable 达 到 一 定 的 大 小, 需 要 将 MemTable dump 到 磁 盘 中 生 成 SSTable 文 件 由 于 数 据 同 时 存 在 MemTable 和 可 能 多 个 SSTable 中, 读 取 操 作 需 要 按 老 到 新 合 并 SSTable 和 内 存 中 的 MemTable 数 据 数 据 在 SSTable 中 连 续 存 放, 因 此 可 以 同 时 满 足 随 机 读 取 和 顺 序 读 取 两 种 需 求 为 了 防 止 磁 盘 中 的 SSTable 文 件 过 多, 需 要 定 时 将 多 个 SSTable 通 过 compaction 过 程 合 并 为 一 个 SSTable, 从 而 减 少 后 续 读 操 作 需 要 读 取 的 文 件 个 数 一 般 地, 如 果 写 操 作 比 较 少, 我 们 总 是 能 够 使 得 对 每 一 份 数 据 同 时 只 存 在 一 个 SSTable 和 一 个 MemTable, 也 就 是 说, 随 机 读 取 和 顺 序 读 取 都 只 需 要 访 问 一 次 磁 盘, 这 对 于 线 上 服 务 基 本 上 都 是 成 立 的 插 入 删 除 更 新,Add 等 操 作 在 Merge-dump 引 擎 中 都 看 成 一 回 事, 除 了 最 早 生 成 的 SSTable 外,SSTable 中 记 录 的 只 是 操 作, 而 不 是 最 终 的 结 果, 需 要 等 到 读 取 ( 随 机 或 者 顺 序 ) 时 才 合 并 得 到 最 终 结 果 Bigtable 的 Merge-dump 存 储 引 擎 对 于 NOSQL 存 储 系 统 来 说 基 本 已 经 足 够 通 用 了,Cassandra 也 采 用 了 类 似 的 做 法, 不 过 据 说 实 现 得 不 好, 没 有 控 制 SSTable 的 最 大 个 数 从 而 可 能 出 现 SSTable 个 数 特 别 多 以 至 于 永 远 都 合 并 不 成 功 的 问 题
23 5.1.3 单 机 存 储 优 化 软 件 有 一 个 特 点, 就 是 最 大 限 度 地 利 用 硬 件 资 源, 随 着 SSD,Fusion IO 等 各 种 技 术 的 发 展, 可 以 考 虑 在 单 机 层 面 上 通 过 搭 配 不 同 类 型 的 硬 件 来 整 体 优 化 存 储 系 统, 在 性 能 和 价 格 上 取 得 一 个 很 好 的 折 衷 我 所 在 部 门 的 CDN 团 队 做 了 极 其 出 色 的 工 作 他 们 在 Squid 服 务 器 上 使 用 SSD + SAS + SATA 混 合 存 储, 按 照 访 问 热 点 进 行 迁 移 : 最 热 的 进 SSD, 中 等 热 度 的 放 SAS, 轻 热 度 的 放 SATA, 并 适 当 考 虑 数 据 大 小, 最 后 的 效 果 是 绝 大 部 分 的 读 取 操 作 走 SSD, 在 保 证 性 能 的 前 提 下 节 省 了 成 本 百 度 在 Mysql 的 针 对 SSD 的 优 化 也 做 了 一 个 工 作, 简 单 来 说 就 是 将 对 SSD 的 随 机 写 变 成 顺 序 写 当 mysql 需 要 对 数 据 库 的 数 据 进 行 写 操 作 时, 它 并 不 是 直 接 写 原 来 的 data file, 而 是 把 写 好 的 page 放 在 内 存 中, 当 内 存 中 攒 满 了 几 个 page 后, 它 就 将 这 些 page 组 织 成 一 个 block, 将 这 个 block 以 append write 的 方 式 写 入 到 另 一 个 cache file 中 这 一 步 很 重 要, 因 为 它 将 本 来 是 随 机 写 入 原 始 data file 中 的 操 作 编 程 了 对 cache file 的 追 加 写 再 看 读 数 据, 内 存 中 会 维 护 一 份 page mapping, 这 样 当 database 需 要 读 某 个 page 的 数 据 的 时 候, 它 会 写 在 page mapping 中 查 找 这 个 page 是 在 data file 还 是 在 cache file 中, 然 后 再 从 相 应 的 file 中 将 数 据 取 出 来 虽 然 cache file 中 的 数 据 是 非 常 凌 乱 的 组 织, 但 由 于 SSD 的 随 机 读 性 能 很 好, 所 以 这 一 点 就 不 成 问 题 最 后,cache file 在 某 个 时 刻 要 合 并 到 原 始 的 data file 中 这 一 步 其 实 会 产 生 大 量 的 随 机 写 但 是, 系 统 可 以 通 过 调 度 和 控 制, 找 到 一 个 系 统 负 荷 很 小 的 时 刻 来 执 行 这 个 merge 操 作, 比 如 深 夜 这 样, 就 避 免 了 大 量 的 随 机 写 对 系 统 的 性 能 造 成 影 响 SSD 或 者 其 它 硬 件 会 发 展 成 什 么 样 还 是 一 个 未 知 数, 不 过 单 机 层 面 根 据 性 价 比 选 择 合 适 的 硬 件 并 针 对 硬 件 优 化 也 是 一 个 不 错 的 选 择 5.2 SQL 数 据 库 SQL 数 据 库 已 经 很 成 熟 了, 如 果 是 开 源 的 数 据 库, 比 如 使 用 最 为 广 泛 的 Mysql, 我 们 可 以 在 单 机 层 面 做 一 些 工 作, 比 如 提 到 的 针 对 SSD 的 优 化 由 于 SQL 定 义 的 语 法 集 合 过 于 复 杂, 其 中 很 多 语 法 支 持 都 影 响 扩 展 性, 比 如 存 储 过 程, 外 键, 因 此, 要 完 全 实 现 一 个 既 支 持 SQL 语 法 集 合 的, 又 能 扩 展 到 成 百 上 千 台 机 器 且 性 能 不 错 的 分 布 式 数 据 库 系 统 至 少 在 五 年 之 内 都 是 不 现 实 的 互 联 网 公 司 主 要 对 数 据 库 做 的 主 要 的 工 作 还 是 对 数 据 进 行 垂 直 切 分 和 水 平 切 分 垂 直 切 分 主 要 是 将 不 同 的 表 划 分 到 不 同 的 数 据 库 ( 主 机 ) 之 上 ; 水 平 切 分 是 将 同 一 个 表 的 数 据 按 照 某 种 条 件 拆 分 到 多 台 数 据 库 ( 主 机 ) 上 作 为 存 储 系 统 开 发 人 员, 我 们 需 要 开 发 一 套 数 据 库 中 间 层, 它 用 于 解 析 用 户 的 SQL 语 句, 并 根 据 拆 分 规 则 转 发 到 不 同 的 数 据 库 ( 主 机 ), 实 现 读 写 分 离, 合 并 多 台 数 据 库 分 库 的 返 回 结 果 数 据 库 中 间 层 可 以 通 过 访 问 每 个 分 库 的 主 库 来 提 供 强 一 致 性, 一 种 可 行 的 做 法 是 同 一 个 session 内 保 持 强 一 致 性, 也 就 是 说, 如 果 客 户 端 同 一 个 session 内 对 某 一 个 数 据 库 分 库 有 修 改 操 作, 后 续 的 读 取 操 作 都 转 发 到 这 个 分 库 的 主 库 数 据 库 中 间 层 主 要 有 几 个 部 分 : SQL 语 句 解 析,SQL 转 发, 结 果 合 并 排 序 属 性 过 滤 以 及 数 据 库 协 议 适 配 器 其 中,SQL 语 句 解 析 相 对 比 较 复 杂, 数 据 库 协 议 适 配 器 相 对 比 较 啰 嗦 数 据 拆 分 后, 不 能 很 好 地 支 持 事 务 操 作, 某 些 跨 表 join 和 排 序 分 页 功 能 也 不 能 高 效 地 支 持, 但 是 给 应 用 开 发 人 员 的 接 口 却 是 SQL 接 口, 应 用 开 发 人 员 需 要 仔 细 设 计
24 5.3 线 上 最 终 一 致 性 系 统 线 上 最 终 一 致 性 系 统 保 证 最 终 一 致 性, 读 服 务 1~30ms, 正 常 时 写 服 务 100ms 以 内, 机 器 出 现 故 障 时, 某 个 数 据 分 片 的 写 服 务 可 能 出 现 10~20s 的 服 务 中 断 为 了 便 于 介 绍, 将 系 统 命 名 为 KO KO 系 统 由 一 个 主 控 机 Master 和 大 量 的 机 器 group 组 成, 每 个 group 由 N(N 是 数 据 的 备 份 数 ) 台 工 作 机 Chunk Server, 同 一 个 group 中 同 一 时 刻 有 且 只 有 一 台 Chunk Server 提 供 写 服 务, 称 为 CS Master, 其 它 Chunk Server 与 CS Master 保 持 同 步, 称 为 CS Slave 一 般 来 说,N = 3, 任 何 一 个 写 操 作 只 需 要 写 成 功 其 中 一 台 CS Slave 和 CS Master 就 可 以 返 回 客 户 端 表 示 成 功 当 CS Master 宕 机 时, 同 一 个 group 中 与 它 保 持 同 步 最 快 的 CS Slave 接 替 它 成 为 CS Master, 并 触 发 一 个 运 维 操 作, 运 维 人 员 可 在 合 适 的 时 间 上 线 一 台 机 器 到 group 中 新 机 器 加 入 集 群 以 group 为 单 位 KO 系 统 包 含 如 下 几 个 角 色 : 1, Master(Config Master) 集 群 主 控 机, 通 过 Master/Slave 强 同 步 模 式 保 证 HA 2, CS Master 机 器 组 中 提 供 写 服 务 的 Chunk Server 3, CS Slave 机 器 组 中 提 供 CS Master 的 备 份, 可 以 提 供 读 服 务 4, API 客 户 端 请 求 API 整 个 系 统 大 致 的 架 构 图 如 下 : Lock Service acquire lock acquire lock Application Client Get tablet location Config Master replication Config Slave Read/write request Heartbeat & control msg ChunkServer Group ChunkServer Group Slave Master Slave Slave Master Slave 写 操 作 的 大 致 流 程 为 : 1, 请 求 Master 或 者 从 客 户 端 缓 存 中 获 取 待 操 作 行 所 在 的 Chunk Server Master 位 置 ; 2, 往 Chunk Server Master 发 送 写 操 作 ; 3, Chunk Server Master 将 写 操 作 同 步 到 同 一 个 group 下 的 Chunk Server Slave; 4, Chunk Server Master 收 到 至 少 一 个 Chunk Server Slave 的 成 功 返 回 信 息 时 写 本 地 操 作 日 志 并 应 用 到 内 存 中 ; 5, 返 回 客 户 端 写 操 作 成 功 或 者 失 败 原 因 ; 如 果 Chunk Server Master 返 回 客 户 端 待 操 作 行 不 在 服 务 范 围 内, 说 明 发 生 了 tablet 迁 移, 客 户 端 重 新 请 求 Master 获 取 Chunk Server Master 位 置 信 息 并 重 试, 同 时 更 新 客 户 端 缓 存 读 取 操 作 与 写 操 作 流 程 类 似, 不 同 的 是, 可 以 根 据 读 取 的 一 致 性 要 求 选 择 读 取 同 一 个 group 下 的 Chunk Server Master 或 者 Chunk Server Slave 在 数 据 模 型 方 面, 提 供 类 似 Bigtable 的 schema 支 持, 并 保 证 单 行 操 作 的 事 务 性 所 有
25 schema 的 更 新 都 在 Master 上 执 行,Master 更 新 完 成 后 推 送 到 Chunk Server 客 户 端 向 Master 查 询 每 一 行 所 在 的 Chunk Server 位 置 信 息 时,Master 会 返 回 schema 的 版 本 信 息, 后 续 客 户 端 查 询 Chunk Server 时 如 果 发 现 Chunk Server 的 版 本 低,Chunk Server 需 要 向 Master 请 求 最 新 的 schema 信 息 整 个 系 统 设 计 的 数 据 规 模 控 制 在 200TB 左 右, 集 群 规 模 在 两 百 台 左 右, 磁 盘 大 致 选 择 6 * 600GB 的 SAS 盘, 内 存 大 致 为 16GB, 磁 盘 内 存 比 大 致 为 100 ~ 200 : 1, 数 据 切 分 为 大 小 100MB ~ 200MB 左 右 的 子 表 tablet 当 子 表 太 大 时, 需 要 大 致 平 均 地 分 裂 为 两 个 子 表, 当 出 现 负 载 不 均 衡 时, 也 需 要 Master 指 导 子 表 迁 移 工 作 Master 和 Chunk Server 通 过 定 时 的 heartbeat 通 信,Chunk Server 将 负 载 相 关 的 信 息 汇 报 给 Master 分 裂 和 迁 移 的 做 法 可 以 参 考 3.3 和 3.4 的 描 述 为 了 同 时 支 持 随 机 读 取 和 顺 序 读 取 操 作, 单 机 存 储 引 擎 选 择 实 现 中 提 到 的 Merge-dump 存 储 引 擎 系 统 工 程 实 现 时 的 几 个 比 较 难 的 问 题 为 :Chunk Server Master 与 Chunk Server Slave 同 步, 子 表 分 裂 和 子 表 迁 移,schema 管 理 需 要 考 虑 的 细 节 比 较 多, 有 些 啰 嗦 细 心 的 读 取 可 能 会 发 现, 如 果 group 中 某 一 台 机 器 宕 机 并 且 出 现 磁 盘 故 障, 需 要 在 group 中 新 增 一 台 机 器, 假 设 机 器 中 有 1TB 的 数 据, 线 上 拷 贝 数 据 限 速 20MB/s, 那 么 拷 贝 数 据 时 间 为 1TB/20MB = 1MB/20 = 50000s, 也 就 是 十 几 个 小 时, 因 此 需 要 调 整 架 构 使 得 宕 机 后 数 据 和 服 务 能 够 迁 移 到 整 个 集 群 而 不 是 某 一 台 机 器 可 扩 展 的 分 布 式 系 统 设 计 的 难 点 就 在 于 稳 定 可 靠 的 地 方 存 储 操 作 日 志, 我 们 可 以 采 用 类 似 PNUTS 中 的 方 法 使 用 消 息 中 间 件 存 储 更 新 数 据, 大 致 的 架 构 如 下 : Lock Service acquire lock Config Master replication Get tablet location API API API acquire lock Heartbeat & control msg Config Slave Read/write request 读 写 服 务 集 群 Tablet Server Tablet Server Tablet Server Tablet Server 日 志 消 息 MQ Cluster 如 上 图, 数 据 划 分 为 tablet,tablet Server 提 供 tablet 读 写 服 务, 每 个 时 刻 对 同 一 个 tablet 有 一 台 Tablet Server 提 供 写 服 务, 称 为 Tablet Server Master, 其 它 几 个 副 本 提 供 保 证 最 终 一 致 性 的 读 服 务, 写 操 作 写 入 Tablet Server Master 和 消 息 中 间 件 后 成 功 返 回, 其 它 的 副 本 通 过 订 阅 消 息 中 间 件 的 消 息 回 放 操 作 日 志, 提 供 读 取 服 务 如 果 Tablet Server Master 宕 机, 可 以 选 择 一 个 副 本 回 放 完 操 作 日 志 后 成 为 新 的 Tablet Server Master Tablet 分 裂 也 可 以 通 过 将 分 裂 操 作 日 志 写 入 消 息 中 间 件 的 方 式 保 证 多 个 副 本 之 间 的 一 致 性 任 何 一 台 机 器 宕 机 都 只 会 停 止 十 几 秒 的 部 分 数 据 的 写 服 务, 读 服 务 不 受 影 响, 满 足 线 上 服 务 的 需 求
26 5.4 线 上 弱 一 致 性 系 统 线 上 弱 一 致 性 系 统 以 Dynamo 和 Cassandra 为 代 表 这 类 系 统 有 两 个 好 处 : 一 个 是 机 器 宕 机 不 需 要 停 写 服 务, 另 一 个 是 由 于 只 需 要 保 证 弱 一 致 性 可 以 采 用 P2P 的 方 法 实 现, 大 大 地 减 少 了 对 工 程 师 个 人 能 力 的 依 赖, 减 少 了 系 统 整 体 风 险 Dynamo 内 部 使 用 了 很 多 P2P 中 的 技 术, 这 些 技 术 都 可 以 单 独 应 用 到 其 它 系 统 的 开 发 过 程 中 一 个 分 布 式 系 统 在 设 计 时 必 须 想 好 这 个 系 统 将 来 如 何 测 试,Dynamo 和 Cassandra 这 样 的 弱 一 致 性 系 统 的 主 要 难 点 就 在 于 如 何 做 系 统 测 试 初 步 想 到 的 测 试 工 作 如 下 : 1, 模 块 级 别 的 测 试 需 要 做 得 比 较 细, 比 如 gossip 协 议 测 试,DHT 分 布 测 试, 机 器 上 下 线 模 块 测 试, 存 储 引 擎 测 试, 冲 突 处 理 测 试 ; 2, 专 门 为 测 试 提 供 额 外 的 信 息, 比 如 每 次 写 操 作 返 回 写 入 的 机 器 编 号, 写 入 时 刻 的 timestamp 等 额 外 信 息, 如 果 对 同 一 个 key 多 次 写 入 不 同 的 机 器, 可 以 在 客 户 端 模 拟 合 并 过 程, 将 合 并 结 果 与 读 取 到 的 数 据 进 行 对 比 ; 3, 模 拟 一 次 两 台 机 器 宕 机 的 情 形, 两 台 机 器 中 的 节 点 某 些 在 DHT 环 相 邻, 某 些 不 相 邻 ; 模 拟 网 络 分 区 的 情 况 ; Dynamo 实 现 时 需 要 使 用 到 如 下 技 术 点 : DHT DHT 全 称 Distributed Hash Table, 使 用 一 致 性 Hash (consistent hashing) 思 想 : 给 每 台 机 器 赋 予 固 定 数 量 的 token, 这 些 token 构 成 一 个 分 布 式 Hash 环 执 行 数 据 存 放 操 作 时, 先 计 算 key 的 hash 值, 然 后 存 放 到 第 一 个 包 含 大 于 或 者 等 于 该 Hash 值 的 token 的 节 点 这 种 方 法 的 好 处 就 在 于 机 器 上 下 线 时 只 会 影 响 到 在 DHT 中 相 邻 的 token 外 部 的 数 据 可 能 首 先 传 输 至 集 群 中 的 任 意 一 台 机 器, 为 了 找 到 数 据 所 属 机 器, 要 求 每 台 机 器 维 护 一 定 的 集 群 机 器 信 息 用 于 定 位 最 直 观 的 想 法 当 然 是 每 台 机 器 分 别 维 护 它 的 前 一 台 及 后 一 台 机 器 的 信 息, 机 器 的 编 号 可 以 为 机 器 IP 的 Hash 值, 定 位 机 器 最 坏 情 况 下 复 杂 度 为 O(N) 可 以 采 用 平 衡 化 思 想 来 优 化 ( 如 同 平 衡 二 叉 树 优 化 数 组 / 链 表 ), 使 每 一 台 机 器 存 储 O(logN) 的 集 群 机 器 信 息, 定 位 机 器 最 坏 情 况 下 复 杂 度 为 O(logN) 在 Dynamo 系 统 中, 每 台 机 器 尽 量 维 护 整 个 集 群 的 信 息, 客 户 端 也 缓 存 整 个 集 群 的 信 息, 从 而 大 多 数 请 求 都 能 直 接 发 送 到 目 标 机 器 Dynamo 中 通 过 gossip 协 议 发 现 机 器 上 下 线 信 息 从 而 更 新 每 台 机 器 缓 存 的 DHT 环 集 群 中 某 台 机 器 上 下 线 时, 部 分 机 器 先 发 现, 部 分 机 器 后 发 现, 从 而 集 群 中 每 台 机 器 缓 存 的 DHT 环 处 于 不 一 致 的 状 态 比 如 系 统 中 初 始 有 四 台 机 器 包 含 的 token 分 别 为 A, C, D, E, 现 在 上 线 一 台 机 器 token 为 B, 假 设 A 发 现 了 B 上 线 但 是 C, D, E 没 有 发 现, 这 时 原 本 属 于 B 的 数 据 可 能 写 入 B, C, D( 假 设 存 储 三 份 ), 也 可 能 写 入 C,D,E, 不 过 没 有 关 系, 以 后 E 将 发 现 B, 或 者 说 是 B 发 现 E, 从 而 触 发 操 作 将 错 误 写 入 到 E 的 数 据 同 步 到 B, 由 B 来 进 行 数 据 合 并, 合 并 的 过 程 中 可 能 需 要 处 理 冲 突 Gossip 协 议 Gossip 协 议 用 于 P2P 系 统 中 自 治 的 节 点 协 调 对 整 个 集 群 的 认 识, 比 如 集 群 的 节 点 状 态, 负 载 情 况 我 们 先 看 看 两 个 节 点 A 和 B 是 如 何 交 换 对 世 界 的 认 识 的 A 告 诉 B 其 管 理 的 所 有 节 点 的 版 本 ( 包 括 Down 状 态 和 Up 状 态 的 节 点 ) B 告 诉 A 哪 些 版 本 他 比 较 旧 了, 哪 些 版 本 他 有 最 新 的, 然 后 把 最 新 的 那 些 节 点 发 给 A( 处 于 Down 状 态 的 节 点 由 于 版 本 没 有 发 生 更 新 所 以 不 会 被 关 注 )
27 A 将 B 中 比 较 旧 的 节 点 发 送 给 B, 同 时 将 B 发 送 来 的 最 新 节 点 信 息 做 本 地 更 新 ; B 收 到 A 发 来 的 最 新 节 点 信 息 后, 对 本 地 缓 存 的 比 较 旧 的 节 点 做 更 新 ; 由 于 种 子 节 点 的 存 在, 新 节 点 加 入 可 以 做 得 比 较 简 单 新 节 点 加 入 时 首 先 与 种 子 节 点 交 换 世 界 观, 从 而 对 集 群 有 了 认 识 DHT 环 中 原 有 的 其 它 节 点 也 会 定 期 和 种 子 节 点 交 换 世 界 观, 从 而 发 现 新 节 点 的 加 入 世 界 不 断 变 化, 可 能 随 时 有 机 器 下 线, 因 此, 每 个 节 点 还 需 要 定 期 通 过 gossip 协 议 同 其 它 节 点 交 换 世 界 观 如 果 发 现 某 个 节 点 很 长 时 间 状 态 都 没 有 更 新, 比 如 距 离 上 次 更 新 的 时 间 间 隔 超 过 一 定 的 阀 值, 则 认 为 该 节 点 已 经 宕 机 了 Replication 为 了 处 理 节 点 失 效 的 情 况 (DHT 环 中 删 除 节 点 ), 需 要 对 节 点 的 数 据 进 行 replication 思 路 如 下 : 假 设 数 据 存 储 N 份,DHT 定 位 到 的 数 据 所 属 节 点 为 K, 则 数 据 存 储 在 节 点 K, K+1,..., K+N-1 上 如 果 第 K + i (0 <= i <= N-1) 台 机 器 宕 机, 则 往 后 找 一 台 机 器 K+N 临 时 替 代 如 果 第 K+i 台 机 器 重 启, 临 时 替 代 的 机 器 K+N 能 够 通 过 gossip 协 议 发 现, 它 会 将 这 些 临 时 数 据 归 还 N+i, 这 个 过 程 在 Dynamo 中 叫 做 Hinted handoff 机 器 K+i 宕 机 的 这 段 时 间 内, 所 有 的 读 写 均 落 入 到 机 器 [K, K+i-1] 和 [K+i+1, K+N] 中 如 果 机 器 K+i 永 久 失 效, 机 器 K+N 需 要 进 行 数 据 同 步 操 作 一 般 来 说, 从 机 器 K+i 宕 机 开 始 到 被 认 定 为 永 久 失 效 的 时 间 不 会 太 长, 积 累 的 写 操 作 也 不 会 太 多, 可 以 利 用 Merkle Tree 对 机 器 的 数 据 文 件 进 行 快 速 同 步 由 于 数 据 需 要 存 储 N 份, 机 器 宕 机 会 影 响 到 DHT 环 中 后 面 的 N 个 token 所 在 的 机 器 Quorum NWR NWR 是 Dynamo 中 的 一 个 亮 点, 其 中 N 表 示 复 制 的 备 份 数,R 指 成 功 读 操 作 的 最 少 节 点 数,W 指 成 功 写 操 作 的 最 少 节 点 数 只 要 满 足 W + R > N, 就 可 以 保 证 在 存 在 不 超 过 一 台 机 器 故 障 的 时 候, 至 少 能 够 读 到 一 份 有 效 的 数 据 如 果 应 用 重 视 读 效 率, 可 以 设 置 W = N, R = 1; 如 果 应 用 需 要 在 读 / 写 之 间 权 衡, 一 般 可 设 置 W = 2, R = 2,N = 3, 当 然 也 可 以 选 择 W = 1, R = 1, N = 3, 如 果 丢 失 最 后 的 一 些 更 新 也 不 会 有 影 响 的 话 NWR 看 似 很 完 美, 其 实 不 对 在 Dynamo 这 样 的 P2P 集 群 中, 由 于 每 个 节 点 对 集 群 的 认 识 不 同, 可 能 出 现 同 一 个 key 被 多 台 机 器 同 时 操 作 的 情 况, 在 多 台 机 器 上 执 行 的 顺 序 是 无 法 保 证 的, 需 要 依 赖 基 于 vector clock 的 冲 突 合 并 方 法 解 决 冲 突, 默 认 的 解 决 方 法 是 last write wins, 而 这 时 依 赖 于 两 台 机 器 之 间 的 时 钟 同 步 的 所 以,Dynamo 中 即 使 N + W > R, 这 里 所 谓 的 最 终 一 致 性 还 是 依 赖 冲 突 合 并 算 法, 最 后 读 取 的 结 果 和 客 户 期 望 的 结 果 可 能 不 一 致 关 于 这 一 点, 我 们 在 2.4 中 已 经 将 最 终 一 致 性 模 型 与 Dynamo 中 的 一 致 性 模 型 区 分 开 来 了 这 个 不 一 致 问 题 需 要 注 意, 因 为 影 响 到 了 应 用 程 序 的 设 计 和 对 整 个 系 统 的 测 试 工 作 读 写 流 程 客 户 端 的 读 / 写 请 求 首 先 传 输 到 缓 存 的 一 台 机 器, 根 据 预 先 配 置 的 N W 和 R 值, 对 于 写 请 求, 根 据 DHT 算 法 计 算 出 数 据 所 属 的 节 点 后 直 接 写 入 后 续 的 N 个 节 点, 等 到 W 个 节 点 返 回 成 功 时 返 回 客 户 端, 如 果 写 请 求 失 败 将 加 入 retry_list 不 断 重 试 如 果 某 台 机 器 发 生 了 临 时 性 异 常, 将 数 据 写 入 后 续 的 备 用 机 器 并 在 备 用 机 器 中 记 录 临 时 异 常 的 机 器 信 息 对 于 读 请 求, 根 据 DHT 算 法 计 算 出 数 据 所 属 节 点 后 根 据 负 载 策 略 选 择 R 个 节 点, 从 中 读 取 R 份 数 据, 如 果 数 据 一 致, 直 接 返 回 客 户 端 ; 如 果 数 据 不 一 致, 采 用 vector clock 的 方 法 解 决 冲 突 Dynamo 系 统 默 认 的 策 略 是 选 择 最 新 的 数 据, 当 然 用 户 也 可 以 自 定 义 冲 突 处 理 方 法 读 取 过 程 中 如 果 发 现 副 本 中 有 一 些 数 据 版 本 太 旧,Dynamo 内 部 异 步 发 起 一 次 read-repair 操 作, 更 新 过 期 的 数 据
28 异 常 处 理 Dynamo 中 把 异 常 分 为 两 种 类 型, 临 时 性 的 异 常 和 永 久 性 异 常 有 一 些 异 常 是 临 时 性 的, 比 如 机 器 假 死, 其 它 异 常 如 硬 盘 报 修 或 机 器 报 废 等 由 于 其 持 续 时 间 太 长, 称 之 为 永 久 性 的 Hinted handoff: 在 Dynamo 设 计 中, 一 份 数 据 被 写 到 K, K+1,... K+N-1 这 N 台 机 器 上, 如 果 机 器 K+i (0 <= i <= N-1) 宕 机, 原 本 写 入 该 机 器 的 数 据 转 移 到 机 器 K+N, 如 果 在 指 定 的 时 间 T 内 N+i 重 新 提 供 服 务, 机 器 K+N 将 通 过 gossip 协 议 发 现, 并 将 启 动 传 输 任 务 将 暂 存 的 数 据 发 送 给 机 器 N+i; Merkle Tree 同 步 : 如 果 超 过 了 时 间 T 机 器 N+i 还 是 处 于 宕 机 状 态, 这 种 异 常 被 认 为 是 永 久 性 的, 这 时 需 要 借 助 Merkle Tree 机 制 从 其 它 副 本 进 行 数 据 同 步 Merkle Tree 同 步 的 原 理 很 简 单, 每 个 非 叶 子 节 点 对 应 多 个 文 件, 为 其 所 有 子 节 点 值 组 合 以 后 的 Hash 值, 叶 子 节 点 对 应 单 个 数 据 文 件, 为 文 件 内 容 的 Hash 值 这 样, 任 何 一 个 数 据 文 件 不 匹 配 都 将 导 致 从 该 文 件 对 应 的 叶 子 节 点 到 根 节 点 的 所 有 节 点 值 不 同 每 台 机 器 对 每 一 段 范 围 的 数 据 维 护 一 颗 Merkle Tree, 机 器 同 步 时 首 先 传 输 Merkle Tree 信 息, 并 且 只 需 要 同 步 从 根 到 叶 子 的 所 有 节 点 值 均 不 相 同 的 文 件 Read repair: 假 设 N=3, W=2, R=2, 机 器 K 宕 机, 可 能 有 部 分 写 操 作 已 经 返 回 客 户 端 成 功 了 但 是 没 有 完 全 同 步 到 所 有 的 副 本, 如 果 机 器 K 出 现 永 久 性 异 常, 比 如 磁 盘 故 障, 三 个 副 本 之 间 的 数 据 一 直 都 不 一 致 客 户 端 的 读 取 操 作 如 果 发 现 了 某 些 副 本 版 本 太 老, 则 启 动 异 步 的 Read repair 任 务, 更 新 过 期 的 数 据 从 而 使 得 副 本 之 间 保 持 一 致 负 载 平 衡 Dynamo 的 负 载 平 衡 取 决 于 如 何 给 每 台 机 器 分 配 虚 拟 节 点 号, 即 token 由 于 集 群 环 境 的 异 构 性, 每 台 物 理 机 器 包 含 多 个 虚 拟 节 点 一 般 有 如 下 两 种 分 配 节 点 号 的 方 法 : 1. 随 机 分 配 每 台 物 理 节 点 加 入 时 根 据 其 配 置 情 况 随 机 分 配 S 个 Token( 节 点 号 ) 这 种 方 法 的 负 载 平 衡 效 果 还 是 不 错 的, 因 为 自 然 界 的 数 据 大 致 是 比 较 随 机 的, 虽 然 可 能 出 现 某 段 范 围 的 数 据 特 别 多 的 情 况 ( 如 baidu, sina 等 域 名 下 的 网 页 特 别 多 ), 但 是 只 要 切 分 足 够 细, 即 S 足 够 大, 负 载 还 是 比 较 均 衡 的 这 个 方 法 的 问 题 是 可 控 性 较 差, 新 节 点 加 入 / 离 开 系 统 时, 集 群 中 的 原 有 节 点 都 需 要 扫 描 所 有 的 数 据 从 而 找 出 属 于 新 节 点 的 数 据,Merkle Tree 也 需 要 全 部 更 新 ; 另 外, 增 量 归 档 / 备 份 变 得 几 乎 不 可 能 2. 数 据 范 围 等 分 + 随 机 分 配 为 了 解 决 方 法 1 的 问 题, 首 先 将 数 据 的 Hash 空 间 等 分 为 Q = N * S 份 (N= 机 器 个 数,S= 每 台 机 器 的 虚 拟 节 点 数 ), 然 后 每 台 机 器 随 机 选 择 S 个 分 割 点 作 为 Token 和 方 法 1 一 样, 这 种 方 法 的 负 载 也 比 较 均 衡, 且 每 台 机 器 都 可 以 对 属 于 每 个 范 围 的 数 据 维 护 一 个 逻 辑 上 的 Merkle Tree, 新 节 点 加 入 / 离 开 时 只 需 扫 描 部 分 数 据 进 行 同 步, 并 更 新 这 部 分 数 据 对 应 的 逻 辑 Merkle Tree, 增 量 归 档 也 变 得 简 单 另 外,Dynamo 对 单 机 的 前 后 台 任 务 资 源 分 配 也 做 了 一 些 工 作 Dynamo 中 同 步 操 作 写 操 作 重 试 等 后 台 任 务 较 多, 为 了 不 影 响 正 常 的 读 写 服 务, 需 要 对 后 台 任 务 能 够 使 用 的 资 源 做 出 限 制 Dynamo 中 维 护 一 个 资 源 授 权 系 统 该 系 统 将 整 个 机 器 的 资 源 切 分 成 多 个 片, 监 控 60s 内 的 磁 盘 读 写 响 应 时 间, 事 务 超 时 时 间 及 锁 冲 突 情 况, 根 据 监 控 信 息 算 出 机 器 负 载 从 而 动 态 调 整 分 配 给 后 台 任 务 的 资 源 片 个 数 单 机 存 储 引 擎 Dynamo 设 计 支 持 可 插 拔 的 存 储 引 擎, 比 如 Berkerly db, Mysql Innodb 等 Cassandra 中 实 现 了 一 个 中 提 到 的 Merge-dump 存 储 引 擎, 对 于 需 要 同 时 支 持 随 机 读 取 和 顺 序 读 取,
29 不 仅 仅 通 用 而 且 效 率 高 5.5 半 线 上 及 线 下 系 统 半 线 上 及 线 下 系 统 指 GFS + Bigtable, 开 源 的 实 现 有 HDFS + HBase/Hypertable, 不 过 开 源 的 实 现 远 没 有 达 到 GFS + Bigtable 应 有 的 高 度 这 里 之 所 以 将 GFS + Bigtable 划 分 为 半 线 上 及 线 下 系 统, 不 是 因 为 这 套 解 决 方 案 不 能 支 持 线 上 应 用, 而 是 因 为 这 套 应 用 在 并 发 量, 机 器 异 常 处 理 等 都 做 得 很 极 限, 如 果 支 持 线 上 的 低 延 迟, 永 远 不 停 读 服 务, 整 个 系 统 过 于 复 杂 我 们 姑 且 认 为 GFS + Bigtable 这 套 服 务 能 设 计 成 支 持 半 线 上 及 线 下 应 用, 如 增 量 建 网 页 库, 已 经 是 非 常 大 的 挑 战 了 两 层 结 构 GFS 和 Bigtable 采 用 两 层 结 构,GFS 关 注 文 件 存 储 文 件, 虽 然 对 外 提 供 文 件 接 口, 但 是 保 证 文 件 可 靠 性,Bigtable 关 注 用 户 接 口 问 题, 在 GFS 之 上 提 供 支 持 简 单 schema 的 NOSQL 访 问 接 口 GFS 和 Bigtable 两 层 结 构 非 常 巧 妙 地 解 决 了 一 致 性 的 问 题, 底 层 的 GFS 提 供 弱 一 致 性, 写 操 作 可 能 出 现 重 复 记 录,Bigtable 通 过 一 种 类 似 B+ 树 的 方 式 索 引 写 入 到 GFS 中 的 记 录, 很 好 地 解 决 了 一 致 性 问 题 Bigtable 中 同 一 个 tablet 同 一 时 刻 只 能 被 同 一 个 Tablet Server 工 作 机 服 务, 不 过 由 于 底 层 可 靠 的 GFS 存 储, 机 器 宕 机 时 只 需 要 在 其 它 机 器 中 将 GFS 中 持 久 化 的 内 容 加 载 到 内 存 中 即 可, 大 大 地 减 少 了 宕 机 恢 复 需 要 的 时 间 GFS 相 当 于 是 Bigtable 的 可 靠 的 共 享 存 储, 由 于 GFS 只 需 要 提 供 文 件 接 口, 所 以 内 存 操 作 简 单, 出 现 代 码 错 误 的 可 能 性 很 小, 并 且,GFS 可 以 提 供 类 似 Snapshot 的 功 能 ;Bigtable 内 部 逻 辑 和 内 存 操 作 非 常 复 杂, 有 了 GFS 的 Snapshot 功 能,Bigtable 可 以 用 来 备 份 数 据, 从 而 Bigtable 出 现 bug 时, 可 以 修 改 bug 后 回 滚 回 去 重 新 测 试 前 面 提 到 的 线 上 最 终 一 致 性 系 统 采 用 单 层 结 构 的 设 计, 把 分 裂 和 迁 移 看 成 是 一 种 不 是 特 别 常 见 的 情 况, 所 以 不 是 特 别 注 重 分 裂 和 迁 移 的 效 率, 且 为 了 解 决 一 致 性 引 入 了 Chunk Server group 的 概 念 而 GFS + Bigtable 的 设 计 中, 所 有 的 工 作 机, 即 Chunk Server 和 Tablet Server 都 是 完 全 对 等 的, 一 台 Tablet Server 机 器 宕 机 后, 整 个 集 群 中 的 所 有 的 机 器 都 可 以 加 载 这 个 机 器 上 服 务 的 子 表, 扩 展 性 基 本 做 到 了 极 限 集 群 的 规 模 越 大,GFS + Bigtable 的 解 决 方 案 越 有 优 势, 很 适 合 平 台 化, 唯 一 的 缺 点 就 是 过 于 复 杂 采 用 两 层 设 计, 底 层 的 GFS 可 以 简 化 很 多, 只 需 要 考 虑 批 量 的 读 写, 提 供 简 单 的 Append 模 型 上 层 的 Bigtable 负 责 将 写 请 求 聚 合 成 大 块, 随 机 读 取 操 作 的 缓 存 等 GFS + Bigtable 解 决 方 案 最 适 合 的 场 景 是 半 线 上 及 线 下 应 用, 比 如 搜 索 类 及 数 据 仓 库 类 应 用, 系 统 中 的 磁 盘 和 内 存 比 大 致 为 256 ~ 1000 : 1, 采 用 廉 价 的 SATA 盘 作 为 底 层 存 储, 一 般 单 机 12 * 1T SATA 盘 配 置 由 于 系 统 在 软 件 层 面 具 有 无 可 匹 敌 的 容 错 性, 可 以 极 大 地 降 低 运 维 成 本, 节 省 服 务 器 开 销
30 5.5.2 GFS 整 个 GFS 的 架 构 如 下, 如 上 图,GFS 系 统 包 含 三 个 模 块,API,Master,ChunkServer 为 了 对 GFS 系 统 进 行 运 维 操 作, 还 需 要 一 个 utility 模 块 提 供 实 用 工 具 用 户 通 过 API 模 块 向 Master 发 请 求 或 者 从 API 缓 存 中 获 取 Chunk Server 信 息, 以 后 直 接 与 Chunk Server 打 交 道, 将 数 据 追 加 到 Chunk Server 机 器 中 GFS 提 供 两 种 操 作 模 型,Append 追 加 模 型 与 Overwrite 模 型 由 于 GFS 的 用 户 可 以 认 为 是 MapReduce 计 算 系 统 和 Bigtable 系 统, 而 这 两 个 系 统 都 只 需 要 用 到 Append 模 型, 并 通 过 内 部 建 索 引 来 处 理 GFS 的 重 复 记 录 作 为 分 布 式 文 件 系 统,GFS 最 难 的 问 题 就 是 一 致 性 模 型, 也 就 是 GFS 的 Append 操 作 实 现 对 同 一 个 chunk, 在 GFS 中 通 过 Lease 机 制 来 保 证 同 一 时 刻 只 能 有 一 台 机 器 提 供 追 加 写 服 务, 这 台 Chunk Server 称 为 Primary Chunk Server, 用 户 的 数 据 先 发 送 到 Primary Chunk Server, 由 它 确 定 写 入 顺 序, 然 后 通 过 pipeline 的 方 式 同 步 到 其 它 的 Chunk Server 副 本, 等 到 所 有 副 本 都 写 成 功 时 返 回 成 功, 否 则, 客 户 端 可 能 重 试 写 操 作, 从 而 多 次 写 入 同 一 个 记 录, 即 重 复 记 录 如 果 写 入 的 过 程 中 Primary Chunk Server 出 现 异 常,chunk 上 未 完 成 的 写 操 作 全 部 失 败, 等 到 Lease 过 期 后,Master 将 写 权 限 授 给 其 它 服 务 该 chunk 的 Chunk Server, 客 户 端 也 将 重 试 写 操 作 GFS Master 管 理 的 数 据 包 括 文 件 元 数 据, 文 件 到 chunk 的 映 射,chunk 元 数 据, 如 chunk 版 本 号 chunk 所 在 的 chunk server 编 号,chunk server 数 据 GFS 的 设 计 中, 每 个 chunk 大 小 为 64MB, 因 此 存 储 1PB 数 据 的 chunk 个 数 为 1024 * 1024 * 1024 * 3 / 64 = 48MB, 即 接 近 5000 万 的 chunk 数, 在 Bigtable 的 设 计 中, 每 个 子 表 的 大 小 为 100MB ~ 200MB, 而 每 个 子 表 至 少 占 用 一 个 GFS 的 文 件, 因 此 存 储 1PB 数 据 需 要 的 文 件 个 数 为 1024 * 1024 * 1024 / 100 = 10MB, 也 是 千 万 级 别 所 以,GFS Master 元 数 据 管 理 数 据 结 构 需 要 高 效 地 支 持 千 万 级 别 的 数 据 插 入 查 找 删 除 操 作, 且 必 须 支 持 Snapshot 功 能, 比 较 好 的 数 据 结 构 就 是 支 持 Copy-on-write 的 B+ 树 GFS Master 需 要 实 现 replication 将 操 作 强 同 步 到 Slave 中, 从 而 宕 机 后 可 以 很 快 地 恢 复 另 外,GFS Master 还 需 要 能 够 定 期 将 内 存 状 态 生 成 一 份 checkpoint 文 件 存 储 到 磁 盘 中, 从 而 减 少 宕 机 恢 复 重 放 的 日 志 量 GFS Master 还 有 一 些 全 局 性 功 能 模 块, 比 如 chunk 复 制,chunk rebalance,garbage
31 collection, lease 管 理,heartbeat 等 等, 另 外, 为 了 支 持 大 规 模 集 群 的 运 维, 可 以 支 持 从 机 器 资 源 池 选 取 机 器, 发 送 二 进 制 程 序 并 启 动 chunk server 的 功 能 总 之,GFS Master 的 功 能 不 仅 复 杂, 而 且 啰 嗦 Bigtable 整 个 Bigtable 的 结 构 如 下 : 如 上 图,Bigtable 其 实 就 是 在 GFS 之 上 增 加 一 层 索 引 层, 并 对 外 提 供 带 有 schema 的 NOSQL 用 户 接 口 Bigtable 有 三 种 类 型 的 表 : 用 户 表 格 存 储 用 户 实 际 数 据,METADATA 表 格 存 储 用 户 表 格 的 元 数 据, 如 位 置 信 息,SSTable 及 操 作 日 志 文 件 编 号, 日 志 回 放 点 等,Root table 表 格 存 储 METADATA 表 格 的 元 数 据 Bigtable 系 统 将 每 个 表 切 分 为 大 小 在 100MB ~ 200MB 之 间 的 子 表 tablet 整 个 系 统 中 有 三 种 角 色 :Bigtable Master,Tablet Server 和 API 其 中,Bigtable Master 负 责 管 理 Tablet Server, 并 提 供 一 些 全 局 性 服 务, 比 如 负 载 均 衡, 用 户 和 schema 管 理,Tablet Server 宕 机 恢 复 等 ;Tablet Server 是 工 作 机, 将 每 一 个 子 表 加 载 到 内 存 中 对 外 提 供 服 务, 它 是 内 存 操 作 最 为 复 杂 的 模 块, 出 现 的 bug 也 最 多 ;API 用 于 找 到 子 表 所 在 的 Tablet Server 并 请 求 服 务 在 Bigtable 系 统 中, 用 户 表 在 进 行 某 些 操 作, 比 如 子 表 分 裂 的 时 候 需 要 修 改 METADATA 表,METADATA 表 的 某 些 操 作 需 要 修 改 Root 表, 因 此,Tablet Server 也 需 要 使 用 API 模 块, 它 以 动 态 库 的 方 式 链 接 到 Tablet Server 可 执 行 程 序 中 第 一 个 需 要 解 决 的 问 题 还 是 一 致 性 Bigtable 系 统 保 证 强 一 致 性, 同 一 个 时 刻 同 一 个 tablet 只 能 被 一 台 Tablet Server 服 务, 也 就 是 说,Master 将 tablet 分 配 给 某 个 Tablet Server 服 务 时 需 要 确 认 没 有 其 它 的 tablet 正 在 服 务 这 个 tablet 可 以 通 过 Lease 的 机 制 实 现, 每 个 Tablet Server 有 Lease 才 能 提 供 服 务, 当 Lease 快 要 到 期 时,Tablet Server 会 找 Master 重 新 请 求 延 长 Lease 期 限, 如 果 Master 发 现 Tablet Server 的 Lease 已 经 过 期 了, 可 以 安 全 地 将 它 服 务 的 tablet 分 配 给 其 它 Tablet Server, 同 样,Tablet Server 也 必 须 自 觉, 当 它 发 现 自 己 没 有 Lease 时 主 动 下 线, 不 要 影 响 全 局 一 致 性 第 二 个 需 要 解 决 的 是 宕 机 恢 复 问 题 Tablet Server 执 行 一 个 写 操 作 是, 需 要 先 写 操 作 日 志 然 后 应 用 到 MemTable, 当 MemTable 中 的 数 据 达 到 一 定 大 小 或 者 超 过 一 定 时 间 会 写 成 SSTable 存 储 到 GFS 文 件 系 统 中 这 里 我 们 看 到, 如 果 Tablet Server 宕 机, 需 要 将 原 来 服 务 的 tablet 迁 移 到 其 它 机 器, 而 部 分 内 存 中 的 数 据 没 有 序 列 化 成 SSTable, 加 载 时 需 要 回 放 操
32 作 日 志 的 数 据 为 了 更 好 地 利 用 GFS 文 件 系 统, 同 一 个 Tablet Server 的 操 作 日 志 写 到 了 同 一 个 GFS 文 件 由 于 多 个 tablet 的 日 志 混 在 一 起, 需 要 对 日 志 文 件 排 序 从 而 每 个 tablet 加 载 时 可 以 连 续 读 取 自 己 需 要 的 操 作 日 志 Master 需 要 有 一 个 模 块 专 门 用 于 调 度 Tablet Server 对 操 作 日 志 文 件 进 行 排 序 第 三 个 需 要 解 决 的 问 题 是 子 表 分 裂 和 迁 移 问 题 由 于 同 一 个 tablet 同 一 时 刻 只 被 一 个 Tablet Server 服 务, 子 表 分 裂 简 化 很 多 子 表 分 裂 之 前 先 将 MemTable 中 的 数 据 序 列 化 到 SSTable 中, 然 后 通 过 API 往 表 格 的 Metadata 中 加 入 一 行 表 示 新 生 成 的 tablet: 如 果 是 用 户 表 格, 需 要 修 改 METADATA 表 格 ; 如 果 是 METADATA 表 格, 需 要 修 改 Root 表 格 子 表 迁 移 也 需 要 先 将 MemTable 中 的 数 据 序 列 化 到 SSTable, 然 后 停 止 服 务,Master 会 把 它 分 配 给 其 它 Tablet Server 加 载, 因 为 此 时 MemTable 中 的 数 据 都 持 久 化 到 SSTable 中, 不 需 要 回 放 日 志 第 四 个 要 解 决 的 问 题 是 存 储 引 擎 问 题 采 用 节 中 的 Merge-dump 存 储 引 擎, Merge-dump 存 储 引 擎 每 次 操 作 都 是 大 块 读 写, 非 常 适 合 GFS 第 五 个 需 要 解 决 的 就 是 缓 存 和 内 存 管 理 问 题 由 于 Bigtable 的 内 存 操 作 非 常 复 杂, 要 求 每 个 模 块 都 从 全 局 统 一 的 内 存 池 中 申 请, 从 而 管 理 整 个 系 统 对 内 存 的 使 用 如 果 是 随 机 读 操 作,Tablet Server 还 需 要 进 行 缓 存 和 普 通 的 文 件 系 统 的 page cache 原 理 类 似, 需 要 缓 存 从 GFS 中 读 取 的 SSTable, 由 于 SSTable 是 以 块 ( 大 小 一 般 为 64KB) 为 单 位, 所 以, 有 一 个 块 缓 存 ; 另 外, 还 需 要 对 每 一 个 SSTable 文 件 缓 存 随 机 读 操 作 的 读 取 结 果 第 六 个 需 要 考 虑 的 问 题 是 压 缩 和 解 压 缩 Bigtable 支 持 的 应 用 比 如 网 页 库, 数 据 仓 库 的 数 据 重 复 读 很 高, 且 由 于 Bigtable 存 储 历 史 版 本 数 据,Google 里 面 使 用 了 Zippy 和 BMDiff 压 缩 算 法, 两 个 算 法 的 特 点 都 是 压 缩 和 解 压 缩 速 度 快 6 通 用 计 算 系 统 分 类 互 联 网 公 司 大 致 需 要 如 下 几 类 通 用 计 算 系 统 : 1, MapReduce Offline; 2, Online 计 算 ; 线 下 计 算, 挖 掘 类 应 用 MapReduce 基 本 上 可 以 包 打 天 下 了 MapReduce 的 批 处 理 能 力 可 扩 展 性 以 及 容 错 能 力 极 大 地 迎 合 了 线 下 计 算 应 用 的 需 求,MapReduce 模 型 本 身 简 单 高 效, 使 得 普 通 的 工 程 师 也 能 写 出 运 行 在 成 百 上 千 台 集 群 的 分 布 式 程 序 Online 实 时 计 算 与 线 下 批 处 理 有 本 质 的 区 别, 线 下 批 处 理 计 算 处 理 静 态 数 据, 发 展 出 了 通 用 的 MapReduce 模 型, 但 是 线 上 实 时 计 算 一 直 都 没 有 统 一 的 解 决 方 案 后 续 将 举 一 些 例 子 说 明 常 见 的 线 上 计 算 场 景, 如 下 : 1, 流 式 计 算 ; 2, 并 行 数 据 库 的 SQL 查 询 ; 3, 数 据 仓 库 复 杂 查 询 ;
33 7 典 型 计 算 系 统 工 程 实 现 7.1 MapReduce Offline MapReduce 的 架 构 如 下 : MapReduce 执 行 顺 序 如 下 : 1, 首 先 从 用 户 提 交 的 程 序 fork 出 Master 进 程,Master 进 程 启 动 后 将 切 分 任 务 并 根 据 输 入 文 件 所 在 的 位 置 和 集 群 信 息 选 择 机 器 fork 出 Map 或 者 Reduce Worker; 用 户 提 交 的 程 序 可 以 根 据 不 同 的 命 令 行 参 数 执 行 不 同 的 行 为 ; 2, Master 将 切 分 好 的 任 务 分 配 给 Map Worker 和 Reduce Worker 执 行, 任 务 切 分 和 任 务 分 配 可 以 并 行 执 行 ; 3, Map Worker 执 行 Map 任 务 : 读 取 相 应 的 输 入 文 件, 根 据 指 定 的 输 入 格 式 不 断 地 读 取 <key, value> 对 并 对 每 一 个 <key, value> 对 执 行 用 户 自 定 义 的 Map 函 数 ; 4, Map Worker 执 行 用 户 定 义 的 Map 函 数, 不 断 地 往 本 地 内 存 缓 冲 区 输 出 中 间 <key, value> 对 结 果, 等 到 缓 冲 区 超 过 一 定 大 小 时 写 入 到 本 地 磁 盘 中 由 于 Map 操 作 的 输 出 结 果 将 根 据 partition 函 数 分 配 给 R 个 Reduce Worker, 所 以 Map Worker 的 中 间 结 果 组 织 成 R 份 5, Map 任 务 执 行 完 成 时,Map Worker 通 过 heartbeat 定 期 向 Master 汇 报, 从 而 Master 通 知 Reduce Worker Reduce Worker 向 Map Worker 请 求 传 输 生 成 的 中 间 结 果 数 据 这 个 过 程 称 为 Shuffle 当 Reduce 获 取 完 所 有 的 Map 任 务 生 成 的 中 间 结 果 时, 需 要 进 行 排 序 操 作 如 果 数 据 量 太 大, 需 要 执 行 外 排 ;
34 6, Reduce Worker 执 行 Reduce 任 务 : 对 中 间 结 果 的 每 一 个 相 同 的 key 及 value 集 合, 执 行 用 户 自 定 义 的 Reduce 函 数 Reduce 函 数 的 输 出 结 果 被 写 入 到 最 终 的 输 出 结 果, 通 常 是 GFS 或 者 Bigtable; MapReduce 实 现 时 有 如 下 几 个 关 键 点 : 1, 输 入 任 务 划 分 :MapReduce 的 输 入 和 输 出 一 般 是 GFS 或 者 Bigtable, 如 果 输 入 为 GFS, 可 以 按 照 chunk 来 切 分 任 务 ; 如 果 输 入 为 Bigtable, 可 以 按 照 tablet 来 切 分 任 务 ; 2, Master 状 态 机 :Master 状 态 机 管 理 任 务 的 状 态 转 化,Map 或 者 Reduce Worker 的 状 态 转 化, 且 两 个 状 态 机 有 关 联, 设 计 时 需 要 画 出 状 态 转 化 图 ; 3, 用 户 代 码 和 框 架 代 码 的 结 合 : 例 如 任 务 划 分 操 作, 框 架 应 该 需 要 支 持 用 户 自 定 义 任 务 划 分 方 法, 且 有 默 认 的 任 务 划 分 实 现, 即 GFS 文 件 和 Bigtable 表 格 任 务 划 分 实 现 ; 4, Reduce Worker 往 Map Worker 获 取 中 间 结 果 的 压 力 应 该 分 散, 不 能 出 现 某 些 Map Worker 压 力 太 大 的 情 况 ; 另 外,Map Worker 出 现 宕 机 故 障 时, 可 能 有 部 分 Map 任 务 的 中 间 结 果 已 经 发 送 给 Reduce Worker, 部 分 没 有 发 送, 由 于 以 后 Map Worker 上 的 任 务 将 被 重 做, 所 以 Reduce Worker 需 要 支 持 回 滚 某 些 Map 任 务 生 成 的 中 间 结 果 ; 5, 备 份 任 务 的 支 持 : 大 集 群 环 境 中, 机 器 的 处 理 能 力 相 差 可 能 非 常 大, 备 份 任 务 对 整 个 作 业 的 总 体 执 行 时 间 有 很 大 的 优 化 ; 6, 本 地 化 : 尽 量 将 任 务 分 配 给 离 输 入 文 件 最 近 的 Map Worker, 如 同 一 台 机 器 或 者 同 一 个 机 架 ; 7.2 Online 计 算 MapReduce 解 决 了 大 部 分 线 下 批 处 理 计 算 的 问 题,SQL 语 句 基 本 能 够 表 达 所 有 的 计 算 问 题, 但 是 SQL 语 句 的 某 些 操 作 执 行 效 率 地 下, 线 上 计 算 系 统 一 般 选 择 性 地 支 持 部 分 SQL 操 作, 比 如 limit,order by,etc 流 式 计 算 流 式 计 算, 英 文 名 称 为 Stream Processing, 解 决 在 线 聚 合 (Online Aggregation), 在 线 过 滤 (Online Filter) 等 问 题, 流 式 计 算 同 时 具 有 存 储 系 统 和 计 算 系 统 的 特 点, 经 常 应 用 在 一 些 类 似 反 作 弊, 交 易 异 常 监 控 等 场 景 流 式 计 算 的 操 作 算 子 和 时 间 相 关, 处 理 最 近 一 段 时 间 窗 口 内 的 数 据 如 果 不 考 虑 机 器 故 障, 在 线 聚 合 和 在 线 过 滤 的 实 现 没 有 什 么 特 别 困 难 之 处 如 果 考 虑 机 器 故 障, 问 题 变 得 复 杂 上 游 的 机 器 出 现 故 障 时, 下 游 有 两 种 选 择 : 第 一 种 选 择 是 等 待 上 游 恢 复 服 务, 保 证 数 据 一 致 性 ; 第 二 种 选 择 是 继 续 处 理, 优 先 保 证 可 用 性, 等 到 上 游 恢 复 后 再 修 复 错 误 的 计 算 结 果 流 式 计 算 系 统 架 构 如 下 :
35 Source client Source client Source client 源 数 据 输 入 源 数 据 输 入 MB Group MB Group MB Master 钩 子 函 数 replication MB Slave MB Master 钩 子 函 数 replication MB Slave 流 数 据 转 发 MB Group 流 数 据 转 发 流 数 据 转 发 MB Group MB Master 钩 子 函 数 replication MB Slave MB Master 钩 子 函 数 replication MB Slave 结 果 数 据 输 出 结 果 数 据 输 出 Dest client Dest client Dest client 如 上 图, 源 数 据 写 入 到 Message Broker (MB) 处 理 节 点,MB 处 理 节 点 通 过 Master/Slave 的 方 式 保 证 可 靠 性 MB 处 理 节 点 内 部 运 行 用 户 定 义 的 钩 子 函 数 对 输 入 流 进 行 处 理, 处 理 完 后 根 据 一 定 的 规 则 转 发 给 下 游 的 MB 节 点 继 续 处 理 典 型 钩 子 函 数 包 括 : 1, 聚 合 函 数 : 计 算 最 近 一 段 时 间 窗 口 内 数 据 的 聚 合 指, 如 max, min, avg, sum, count 等 ; 2, 过 滤 函 数 : 过 滤 最 近 一 段 时 间 窗 口 内 满 足 某 些 特 性 的 数 据, 如 过 滤 1 秒 钟 内 重 复 的 点 击 ; 消 息 队 列 是 一 种 保 证 数 据 可 靠 有 序 传 输 的 基 础 设 施, 典 型 的 实 现 有 Active MQ,Mule MQ 等 如 果 在 消 息 传 输 过 程 中 注 入 Stream Processing 算 子, 可 以 实 现 流 式 计 算 并 行 数 据 库 的 SQL 查 询 并 行 数 据 库 与 NOSQL 系 统 区 别 主 要 在 于 关 注 点 不 同, 并 行 数 据 库 需 要 完 全 支 持 SQL,NOSQL 更 加 注 重 扩 展 性 和 异 常 情 况 处 理 并 行 数 据 库 中 limit, order by, group by, join 等 操 作 的 实 现 对 NOSQL 系 统 设 计 具 有 借 鉴 作 用 常 见 的 数 据 分 布 方 式 有 三 种 :
36 1, Range partitioning: 按 照 范 围 划 分 数 据 ; 2, Round-robin: 将 第 i 个 元 组 分 配 给 i % N 节 点 ; 3, Hashing: 根 据 hash 函 数 计 算 结 果 将 每 个 元 组 分 配 给 相 应 的 节 点 ; Merge 操 作 符 :limit, order by, group by, join 都 可 以 通 过 Merge 操 作 符 实 现, 在 系 统 中 增 加 一 个 合 并 节 点, 发 送 命 令 给 各 个 数 据 分 片 请 求 相 应 的 数 据, 每 个 数 据 节 点 扫 描 数 据, 排 序 后 回 复 合 并 节 点, 由 合 并 节 点 汇 总 数 据 并 执 行 limit, order by, group by, join 操 作 这 个 过 程 相 当 于 执 行 一 个 Reduce 任 务 个 数 为 1 的 MapReduce 作 业, 不 考 虑 机 器 出 现 故 障, 也 不 考 虑 数 据 分 布 不 均 而 启 动 备 份 任 务 Split 操 作 符 : 相 当 于 MapReduce 中 的 partition 函 数 由 于 Merge 节 点 处 理 的 数 据 可 能 特 别 大, 所 以 可 以 通 过 Split 操 作 符 将 数 据 分 散 到 多 个 Merge 节 点, 每 个 节 点 合 并 数 据 并 执 行 相 应 的 group by, join 操 作 比 如 执 行 select * from A, B where A.x = B.y, 可 以 根 据 A.x 的 hash 值 将 数 据 节 点 扫 描 到 的 数 据 分 散 到 不 同 的 合 并 节 点, 每 个 合 并 节 点 执 行 Join 操 作 并 行 数 据 库 的 SQL 查 询 和 MapReduce 计 算 有 些 类 似, 可 以 认 为 MapReduce 模 型 是 一 种 更 高 层 次 的 抽 象 由 于 考 虑 问 题 的 角 度 不 同, 并 行 数 据 库 处 理 的 SQL 查 询 执 行 时 间 通 常 很 短, 出 现 异 常 时 整 个 操 作 重 做 即 可, 不 需 要 像 MapReduce 实 现 那 样 引 入 一 个 Master 节 点 管 理 计 算 节 点, 监 控 计 算 节 点 故 障, 启 动 备 份 任 务 等 数 据 仓 库 复 杂 查 询 数 据 仓 库 线 上 查 询 模 型 需 要 支 持 order by, limit, group by, 计 算 模 型 和 并 行 数 据 库 类 似 另 外, 它 还 有 几 个 特 点 : 1, 使 用 列 式 存 储 : 列 式 存 储 符 合 数 据 仓 库 的 按 列 访 问 特 性, 且 增 大 了 数 据 压 缩 比 ; 2, 索 引 : 索 引 有 两 种 形 式 : 一 种 为 单 机 层 面 的 索 引, 另 一 种 为 分 布 式 层 面 的 索 引 单 机 层 面 索 引 指 的 是 在 单 机 存 储 引 擎 之 上 增 加 一 个 索 引 层, 索 引 和 数 据 绑 定, 这 样 做 的 优 点 是 索 引 维 护 成 本 较 低, 缺 点 是 执 行 按 索 引 访 问 操 作 需 要 访 问 所 有 的 数 据 分 片 ; 分 布 式 层 面 的 索 引 指
支付宝2011年 IT资产与费用预算
OceanBase 支 持 ACID 的 可 扩 展 关 系 数 据 库 qushan@alipay.com 2013 年 04 月 关 系 数 据 库 发 展 1970-72:E.F.Codd 数 据 库 关 系 模 式 20 世 纨 80 年 代 第 一 个 商 业 数 据 库 Oracle V2 SQL 成 为 数 据 库 行 业 标 准 可 扩 展 性 Mainframe: 小 型 机 =>
More informationPowerPoint 演示文稿
Hadoop 生 态 技 术 在 阿 里 全 网 商 品 搜 索 实 战 阿 里 巴 巴 - 王 峰 自 我 介 绍 真 名 : 王 峰 淘 宝 花 名 : 莫 问 微 博 : 淘 莫 问 2006 年 硕 士 毕 业 后 加 入 阿 里 巴 巴 集 团 淘 及 搜 索 事 业 部 ( 高 级 技 术 与 家 ) 目 前 负 责 搜 索 离 线 系 统 团 队 技 术 方 向 : 分 布 式 计 算
More informationOracle 4
Oracle 4 01 04 Oracle 07 Oracle Oracle Instance Oracle Instance Oracle Instance Oracle Database Oracle Database Instance Parameter File Pfile Instance Instance Instance Instance Oracle Instance System
More information温州市政府分散采购
温 州 市 政 府 分 散 采 购 招 标 文 件 招 标 编 号 :F - G B 2 0 1 6 0 3 1 4 0 0 4 7 招 标 项 目 : 温 州 市 人 民 政 府 办 公 室 政 务 云 平 台 ( 重 ) 招 标 方 式 : 公 开 招 标 招 标 人 : 温 州 市 人 民 政 府 办 公 室 招 标 代 理 : 二 〇 一 六 年 三 月 目 录 投 标 保 证 金 办 理
More information深入理解otter
深 入 理 解 otter 七 锋 2013-07-04 Agenda 1. 中 美 同 步 需 求 2. otter 架 构 & 设 计 o o o o o o o o 如 何 解 决 " 差 " 网 络 如 何 避 免 双 向 回 环 如 何 处 理 数 据 一 致 性 如 何 高 效 同 步 数 据 如 何 高 效 同 步 文 件 如 何 支 持 系 统 HA 如 何 处 理 特 殊 业 务
More information从上面这个表格中我们可以很明显看到巨大的差异当数据全部缓存到内存中 内存大小会影响所有操作 不管是 SELECT 还是 INSERT/UPDATE/DELETE 操作 INSERT 当往一个随机排序的索引中插入数据的时候会造成随机的读/写 UPDATE/DELETE 当更改数据的时候会导致磁盘的读/
MySQL 服务器的 linux 性能优化和扩展技巧 作者 Yoshinori Matsunbu 作者现在是 DeNA 公司的数据库和基础设施架构师 之前在 SUN 公司工作 他也是 HandlerSocket 的作者 这个是 MySQL 的 NoSQL 插件 本文是根据他的 PPT 整理而成的 如有不正确敬请指教 本文主要的内容有如下 1. 内存和 SWAP 空间管理 2. 同步 I/O 文件系统和
More information2005 3
Text 2009.4 hongqn@douban.com 2005 3 2.8M 1/4 20M / 500~600/sec 23 PC (1U*15/2U*8) 12 38G memcached 1U (frodo) AMD Athlon 64 1.8GHz 1G 160G SATA*2 Gentoo Linux MySQL 5 Quixote (a Python web framework)
More informationebook 132-2
2 SQL Server 7.0 SQL Server SQL Server 7 SQL Server 7 5 2.1 SQL Server 7 SQL Server 7 SQL Server SQL Server SQL Server 2.1.1 SQL Server Windows NT/2000 Windows 95/98 ( r a n d o m access memory R A M )
More informationA API Application Programming Interface 见 应 用 程 序 编 程 接 口 ARP Address Resolution Protocol 地 址 解 析 协 议 为 IP 地 址 到 对 应 的 硬 件 地 址 之 间 提 供 动 态 映 射 阿 里 云 内
A API Application Programming Interface 见 应 用 程 序 编 程 接 口 ARP Address Resolution Protocol 地 址 解 析 协 议 为 IP 地 址 到 对 应 的 硬 件 地 址 之 间 提 供 动 态 映 射 阿 里 云 内 容 分 发 网 络 Alibaba Cloud Content Delivery Network 一
More informationSimulator By SunLingxi 2003
Simulator By SunLingxi sunlingxi@sina.com 2003 windows 2000 Tornado ping ping 1. Tornado Full Simulator...3 2....3 3. ping...6 4. Tornado Simulator BSP...6 5. VxWorks simpc...7 6. simulator...7 7. simulator
More informationebook 132-6
6 SQL Server Windows NT Windows 2000 6.1 Enterprise Manager SQL Server Enterprise Manager( ) (Microsoft Management C o n s o l e M M C ) Enterprise Manager SQL Server Enterprise Manager 6.1.1 Enterprise
More information穨control.PDF
TCP congestion control yhmiu Outline Congestion control algorithms Purpose of RFC2581 Purpose of RFC2582 TCP SS-DR 1998 TCP Extensions RFC1072 1988 SACK RFC2018 1996 FACK 1996 Rate-Halving 1997 OldTahoe
More informationSiteView技术白皮书
SiteView ECC V6.2 技 术 白 皮 书 游 龙 网 络 科 技 ( 中 国 ) 有 限 公 司 DragonFlow Networks(China),Inc. 目 录 第 一 章 产 品 概 述... 3 第 二 章 系 统 结 构... 6 一 系 统 架 构... 7 1 用 户 管 理 模 块... 7 2 Web Server... 8 3 存 储 加 密 模 块... 8
More informationAzure_s
Azure ? Azure Azure Windows Server Database Server Azure Azure Azure Azure Azure Azure Azure Azure OpenSource Azure IaaS Azure VM Windows Server Linux PaaS Azure ASP.NET PHP Node.js Python MS SQL MySQL
More informationuntitled
ArcSDE ESRI ( ) High availability Backup & recovery Clustering Replication Mirroring Standby servers ArcSDE % 95% 99.9% 99.99% 99.999% 99.9999% 18.25 / 8.7 / 52.5 / 5.25 / 31.8 / Spatial Geodatabase
More information项目采购需求编写模板
金 税 三 期 工 程 第 二 阶 段 外 部 信 息 交 换 项 目 竞 争 性 磋 商 文 件 技 术 部 分 项 目 编 号 :0706-15410008N059 采 购 人 : 国 家 税 务 总 局 采 购 代 理 机 构 : 中 国 技 术 进 出 口 总 公 司 二 〇 一 五 年 十 二 月 1 / 91 目 录 第 一 章 金 税 三 期 工 程 项 目 背 景... 5 1.1
More information1 o o o CPU o o o o o SQL Server 2005 o CPU o o o o o SQL Server o Microsoft SQL Server 2005
1 o o o CPU o o o o o SQL Server 2005 o CPU o o o o o SQL Server o Microsoft SQL Server 2005 1 1...3 2...20 3...28 4...41 5 Windows SQL Server...47 Microsoft SQL Server 2005 DBSRV1 Microsoft SQL Server
More information季刊9web.indd
在 全 国 现 场 会 上 成 功 展 示 全 国 烟 叶 收 购 暨 现 代 烟 草 农 业 建 设 现 场 会 7 月 6 日 至 8 日 在 昆 明 召 开 在 国 家 局 的 领 导 下, 由 我 司 技 术 开 发 的 烟 站 ( 单 元 ) 烟 叶 管 理 信 息 系 统 在 现 场 会 上 成 功 展 示, 并 得 到 参 会 领 导 及 代 表 们 的 关 注 与 认 可 该 系 统
More information摘 要 1. GSLB: 全 局 负 载 均 衡 2. SLB: 服 务 器 负 载 均 衡 四 层 交 换 LVS 七 层 交 换 Nginx 3. Heartbeat 实 现 HA 4. MySQL 数 据 库 集 群 5. 集 群 环 境 下 的 存 储 备 份 6. 集 群 的 监 控 及
网 站 集 群 架 构 利 用 开 源 软 件 构 建 高 可 用 高 性 能 可 扩 展 的 集 群 系 统 兰 锋 bluedata@gmail.com 摘 要 1. GSLB: 全 局 负 载 均 衡 2. SLB: 服 务 器 负 载 均 衡 四 层 交 换 LVS 七 层 交 换 Nginx 3. Heartbeat 实 现 HA 4. MySQL 数 据 库 集 群 5. 集 群 环 境
More informationMicrosoft Word - 100118002.htm
100 年 度 11800 電 腦 軟 體 應 用 乙 級 技 術 士 技 能 檢 定 學 科 測 試 試 題 本 試 卷 有 選 擇 題 80 題, 每 題 1.25 分, 皆 為 單 選 選 擇 題, 測 試 時 間 為 100 分 鐘, 請 在 答 案 卡 上 作 答, 答 錯 不 倒 扣 ; 未 作 答 者, 不 予 計 分 准 考 證 號 碼 : 姓 名 : 選 擇 題 : 1. (3)
More informationMicrosoft Word - 134招标文件.doc
威 海 市 政 府 采 购 招 标 文 件 采 购 编 号 :WHGP2016-134 采 购 项 目 : 网 站 建 设 采 购 方 式 : 公 开 招 标 山 东 省 鲁 成 招 标 有 限 公 司 2016 年 5 月 20 日 目 录 第 一 部 分 招 标 公 告 2 第 二 部 分 投 标 人 须 知 4 第 三 部 分 开 标 评 标 定 标 13 第 四 部 分 采 购 项 目 说
More informationPartition Key: 字 符 串 类 型, 表 示 当 前 Entity 的 分 区 信 息 这 个 Property 对 于 Table Service 自 动 纵 向 和 横 向 扩 展 至 关 重 要 Row Key: 字 符 串 类 型, 在 给 定 Partition Key 的
4.2 使 用 Table Service Table Service 相 对 来 说 是 三 个 Storage Service 中 最 好 理 解 和 最 易 于 接 受 的, 它 主 要 用 来 存 储 结 构 化 数 据 但 是 Table Service 却 并 不 是 一 个 关 系 型 数 据 库 Table Service 由 两 个 部 分 组 成 :Table 和 Entity
More information案例分享产品文档
消 息 队 列 案 例 分 享 产 品 文 档 版 权 声 明 2015-2016 腾 讯 云 版 权 所 有 本 文 档 著 作 权 归 腾 讯 云 单 独 所 有, 未 经 腾 讯 云 事 先 书 面 许 可, 任 何 主 体 不 得 以 任 何 形 式 复 制 修 改 抄 袭 传 播 全 部 或 部 分 本 文 档 内 容 商 标 声 明 及 其 它 腾 讯 云 服 务 相 关 的 商 标 均
More informationuntitled
Chapter 01 1.0... 1-2 1.1... 1-2 1.1.1...1-2 1.1.2...1-4 1.1.2.1... 1-6 1.1.2.2... 1-7 1.1.2.3... 1-7 1.1.2.4... 1-7 1.1.2.5... 1-8 1.1.2.6... 1-8 1.1.3??...1-8 1.1.4...1-9 1.2...1-12 1.3...1-14 1.4...1-17
More information學 科 100% ( 為 單 複 選 題, 每 題 2.5 分, 共 100 分 ) 1. 請 參 閱 附 圖 作 答 : (A) 選 項 A (B) 選 項 B (C) 選 項 C (D) 選 項 D Ans:D 2. 下 列 對 於 資 料 庫 正 規 化 (Normalization) 的 敘
ITE 資 訊 專 業 人 員 鑑 定 資 料 庫 系 統 開 發 與 設 計 實 務 試 卷 編 號 :IDS101 注 意 事 項 一 本 測 驗 為 單 面 印 刷 試 題, 共 計 十 三 頁 第 二 至 十 三 頁 為 四 十 道 學 科 試 題, 測 驗 時 間 90 分 鐘 : 每 題 2.5 分, 總 測 驗 時 間 為 90 分 鐘 二 執 行 CSF 測 驗 系 統 -Client
More informationChap6.ppt
Computer Networks v4 cs.sjtu 12/21/12 6 Internet ftp://ftp.cs.sjtu.edu.cn/ybzhang 61 / 110 Computer Networks v4 cs.sjtu 12/21/12 ftp://ftp.cs.sjtu.edu.cn/ybzhang 62 / 110 Computer Networks v4 cs.sjtu 12/21/12
More informationSAP HANA 最 简 单 的 理 解 ERP CRM SRM BI 列 存 储 2
www.hand-china.com 搭 建 基 于 HANA 的 企 业 基 础 架 构 平 台 作 者 : HAND 日 期 : 2016-05 本 : 2.5 上 海 信 息 技 术 股 份 限 HAND Enterprise Solutions Company Ltd. www.hand-china.com SAP HANA 最 简 单 的 理 解 ERP CRM SRM BI 列 存 储
More informationIT Data-intensive application,iscsi Middl
112-861 2-1-1 163 8677 1 24 2 E-mail: shiori@ogl.is.ocha.ac.jp, sane@cc.kogakuin.ac.jp, oguchi@computer.org IT Data-intensive application,iscsi iddleware for Load Distribution among Cloud Computing Resource
More informationDell EMC Data Domain DDOS 5.5 Data Domain Data Domain Data Domain : Data Domain Boost (DDBoost) Dell EMC DDBoost Data Domain DDBoost Source De-Dup Bac
Dell EMC Dell EMC IT Dell EMC IT Dell EMC https://www. dellemc.com/ Dell EMC Data Domain DDOS 5.5 Data Domain Data Domain Data Domain : Data Domain Boost (DDBoost) Dell EMC DDBoost Data Domain DDBoost
More information, 7, Windows,,,, : ,,,, ;,, ( CIP) /,,. : ;, ( 21 ) ISBN : -. TP CIP ( 2005) 1
21 , 7, Windows,,,, : 010-62782989 13501256678 13801310933,,,, ;,, ( CIP) /,,. : ;, 2005. 11 ( 21 ) ISBN 7-81082 - 634-4... - : -. TP316-44 CIP ( 2005) 123583 : : : : 100084 : 010-62776969 : 100044 : 010-51686414
More informationGo构建日请求千亿微服务最佳实践的副本
Go 构建 请求千亿级微服务实践 项超 100+ 700 万 3000 亿 Goroutine & Channel Goroutine Channel Goroutine func gen() chan int { out := make(chan int) go func(){ for i:=0; i
More information第一章 Linux與網路資源
1 28 Proxy Server 28-1 Proxy proxy Server rpm qa grep squid Linux Proxy Proxy Proxy Proxy Proxy Request Proxy Proxy Proxy RedHat Linux Fedora #mount /mnt/cdrom squid squid Proxy #cd /mnt/cdrom/redhat/rpms
More informationebook 96-16
16 13 / ( ) 16-1 SQL*Net/Net8 SQL*Net/Net8 SQL*Net/Net8 16-1 / S Q L SQL*Net V2 N e t 8 S Q L * N e t N e t ( ) 16.1 S Q L O r a c l e S Q L 16 401 ) ( H R _ L I N K create database link p u b l i c (
More information自由軟體教學平台
NCHC Opensource task force Steven Shiau steven@nchc.gov.tw National Center for High-Performance Computing Sep 10, 2002 1 Outline 1. 2. 3. Service DHCP, TFTP, NFS, NIS 4. 5. 2 DRBL (diskless remote boot
More information经华名家讲堂
5.1 5.1.1 5.1.2 5.2 5.2.1 5.2.2 5.2.3 5.2.4 5.2.5 5.3 5.3.1 5.3.2 5.3.3 / 5.3.4 / 5.3.5 / 5.4 Internet 5.4.1 Internet 5.4.2 Intranet 1. 2. 1 31 5 5.1 5.1.1 Internet 1 Host 20 60 IBM 2000 2 20 60 20 60
More informationPIC_SERVER (11) SMTP ( ) ( ) PIC_SERVER (10) SMTP PIC_SERVER (event driven) PIC_SERVER SMTP 1. E-
(2005-02-01) (2005-04-28) PIC_SERVER (10) SMTP E-mail PIC_SERVER (event driven) E-mail PIC_SERVER SMTP E-mail 1. E-mail E-mail 1 (1) (2) (3) (4) 1 1. 2 E-mail A E-mail B E-mail SMTP(Simple Mail Transfer
More informationBYOD Http Redirect convergence Client (1) 2008R2 NLB( ) (2) NLB Unicast mode switch flooding (arp ) NLB DNS Redirect 1. Round-Robin DNS DNS IP/DNS Cli
BYOD 204 2015 GoogleHicloud (Load Balance) Server Load Balance Link Load Balance Server Redirect 1. URL Redirect redirector URL redirect Real Server Client HTTP Real Server Web Client 2 (1) URL Redirect
More information第 1 章 概 述 1.1 计 算 机 网 络 在 信 息 时 代 中 的 作 用 1.2 计 算 机 网 络 的 发 展 过 程 *1.2.1 分 组 交 换 的 产 生 *1.2.2 因 特 网 时 代 *1.2.3 关 于 因 特 网 的 标 准 化 工 作 1.2.4 计 算 机 网 络 在
计 算 机 网 络 ( 第 4 版 ) 课 件 第 1 章 计 算 机 网 络 概 述 郭 庆 北 Ise_guoqb@ujn.edu.cn 2009-02-25 第 1 章 概 述 1.1 计 算 机 网 络 在 信 息 时 代 中 的 作 用 1.2 计 算 机 网 络 的 发 展 过 程 *1.2.1 分 组 交 换 的 产 生 *1.2.2 因 特 网 时 代 *1.2.3 关 于 因 特
More informationSocket Socket TcpClient Socket.Connect TcpClient.Connect Socket.Send / Receive NetworkStream 6-5
6 6-1 6-2 Socket 6-2-1 Socket 6-2-2 TcpClient 6-3 6-3-1 Socket.Connect 6-3-2 TcpClient.Connect 6-4 6-4-1 Socket.Send / Receive 6-4-2 NetworkStream 6-5 6-5-1 Socket.Close 6-5-2 TcpClient.Close 6-6 DateTime
More information业 务 与 运 营 Business & Operation (Transform) 加 载 (Load) 至 目 的 端 的 过 程, 该 部 分 在 数 据 挖 掘 和 分 析 过 程 中 为 最 基 础 的 一 部 分 一 个 良 好 的 ETL 系 统 应 该 有 以 下 几 个 功 能 1
Business & Operation 业 务 与 运 营 大 数 据 技 术 在 精 准 营 销 中 的 应 用 王 小 鹏 北 京 东 方 国 信 科 技 股 份 有 限 公 司 北 京 100102 摘 要 简 要 介 绍 主 流 的 大 数 据 技 术 架 构 和 大 数 据 挖 掘 技 术 ; 阐 述 大 数 据 技 术 在 精 准 营 销 与 维 系 系 统 建 设 中 的 应 用,
More informationC10_ppt.PDF
C11-101 101 ( ) 1 15 2000 20% 20MB 170000 19 7% 3% 14% 32% 44% Disaster Recovery Journal ( ) UPS - (Fault Tolerance Capability) (Avoid Single point of failure) (High Availability) (RAID) (Cluster) (Backup)
More information一 套 真 正 只 用 Server Cluster 集 群 结 构 的 模 式 覆 盖 多 种 硬 件 平 台 操 作 系 统 和 数 据 库 的 数 据 传 输 平 台 和 联 机 事 务 处 理 软 件, 并 且 能 够 自 由 组 合 这 些 平 台 形 成 最 佳 应 用 环 境 具 有
鞍 钢 集 团 CIO 林 瑜 专 访 : 企 业 信 息 系 统 是 这 样 炼 成 的 51CTO 独 家 专 访 建 立 一 个 企 业 级 的 集 成 平 台, 必 须 具 备 三 个 条 件 : 高 可 用 性 高 可 靠 性 和 可 扩 展 性 这 三 个 原 则 是 企 业 应 用 平 台 能 在 它 生 命 周 期 里 很 好 运 行 和 发 展 的 前 提 鞍 钢 集 团 CIO
More information目錄... ivv...vii Chapter DETECT
... ivv...vii Chapter 1 1.1... 5 1.2... 6 1.3 DETECT... 11 1.3.1... 12 1.3.1.1...12 1.3.1.2...13 1.3.1.3...14 1.3.1.4...15 1.3.1.5...15 1.3.1.6...16 1.3.2 DETECT... 17 1.3.3... 19 1.3.4... 20... 22 Chapter
More informationMicrosoft Word - Web Dynpro For ABAP跟踪测试工具简介 _2_.doc
Web Dynpro For ABAP 跟 踪 测 试 工 具 简 介 概 述 从 传 统 ABAP UI 开 发 ( 如 Dynpro,ABAP List 等 等 ) 直 接 转 到 Web Dynpro For ABAP 开 发 来, 我 们 可 能 会 发 现 那 些 传 统 的 跟 踪 测 试 工 具 ( 如 SAT, 也 许 SAAB 还 是 一 个 简 单 易 用 的 合 适 的 工 具
More informationCloudy computing forEducation
规 模 企 业 的 云 之 旅 姜 大 勇 威 睿 信 息 技 术 ( 中 国 ) 有 限 公 司 2009 VMware Inc. All rights reserved 背 景 说 明 云 计 算 是 一 种 新 型 的 信 息 资 源 管 理 和 计 算 服 务 模 式, 是 继 大 型 计 算 机 个 人 电 脑 互 联 网 之 后 信 息 产 业 的 一 次 革 命 云 计 算 可 将 分
More informationBus Hound 5
Bus Hound 5.0 ( 1.0) 21IC 2007 7 BusHound perisoft PC hound Bus Hound 6.0 5.0 5.0 Bus Hound, IDE SCSI USB 1394 DVD Windows9X,WindowsMe,NT4.0,2000,2003,XP XP IRP Html ZIP SCSI sense USB Bus Hound 1 Bus
More information(Methods) Client Server Microsoft Winsock Control VB 1 VB Microsoft Winsock Control 6.0 Microsoft Winsock Control 6.0 1(a). 2
(2005-01-26) (2005-01-26) (2005-02-27) PIC_SERVER (9) VB TCP/UDP Visual Basic Microsoft Winsock Control (MSWINSCK.OCX) UDP TCP Client Server Visual Basic UDP/TCP PIC_SERVER UDP/TCP 1. Microsoft Winsock
More informationuntitled
TS-411U Turbo Server TS-411U Turbo Server ( : 1.0.0) 2005 2005 12 8-2 - 1. 2. TS-411U Turbo Server - 3 - ... 7 1.1... 7 1.2... 8 1.3... 9 TS-411U... 10 2.1... 10 2.2... 14 2.3 TS-411U... 15 LCD... 17...
More information目 录 简 介... 3 MYSQL 企 业 版... 3 MYSQL 数 据 库... 3 MYSQL 企 业 备 份 工 具... 4 MYSQL 企 业 版 监 控 器 和 顾 问 工 具... 4 MYSQL 查 询 分 析 器... 7 MYSQL WORKBENCH... 8 MYSQL
MySQL 企 业 版 - 为 用 户 提 供 数 据 库, 管 理 和 支 持 服 务 MySQL 白 皮 书 200 年 2 月 目 录 简 介... 3 MYSQL 企 业 版... 3 MYSQL 数 据 库... 3 MYSQL 企 业 备 份 工 具... 4 MYSQL 企 业 版 监 控 器 和 顾 问 工 具... 4 MYSQL 查 询 分 析 器... 7 MYSQL WORKBENCH...
More informationuntitled
1....2...2...6 2....10 3. UDP...15 4. TCP...16...16...16 1 1. PC COM1 COM2 COM1 COM2 DTU 2 3 4 COM1 COM1 COM2 COM ID 13900000000 DTU COM1 5 COM2 DTU DTU DTU DTU DTU DTU DTU ID ID 3031 3032 2 ID 13900000001
More informationPowerPoint 演示文稿
Apache Spark 与 多 数 据 源 的 结 合 田 毅 @ 目 录 为 什 么 会 用 到 多 个 数 据 源 Spark 的 多 数 据 源 方 案 有 哪 些 已 有 的 数 据 源 支 持 Spark 在 GrowingIO 的 实 践 分 享 为 什 么 会 用 到 多 个 数 据 源 从 数 据 本 身 来 看 大 数 据 的 特 性 之 一 :Variety 数 据 的 多 样
More information目錄
資 訊 素 養 線 上 教 材 單 元 五 資 料 庫 概 論 及 Access 5.1 資 料 庫 概 論 5.1.1 為 什 麼 需 要 資 料 庫? 日 常 生 活 裡 我 們 常 常 需 要 記 錄 一 些 事 物, 以 便 有 朝 一 日 所 記 錄 的 事 物 能 夠 派 得 上 用 場 我 們 能 藉 由 記 錄 每 天 的 生 活 開 銷, 就 可 以 在 每 個 月 的 月 底 知
More information經濟統計資料庫管理資訊系統
招 標 文 件 (1) 經 濟 部 投 資 審 議 委 員 會 全 球 投 資 審 議 管 理 資 訊 系 統 ( 第 3 期 ) 開 發 建 置 專 案 投 標 須 知 經 濟 部 投 資 審 議 委 員 會 中 華 民 國 95 年 2 月 經 濟 部 投 資 審 議 委 員 會 投 標 須 知 以 下 各 項 招 標 規 定 內 容, 由 機 關 填 寫, 投 標 廠 商 不 得 填 寫 或
More information編 輯 室 手 札 Editor Navigation 刑 事 資 訊 科 技 再 造 整 合 分 析 犯 罪 情 資 文 / 編 輯 室 刑 事 資 訊 科 技 的 發 展, 從 最 初 定 位 於 犯 罪 資 料 電 子 數 位 化, 再 隨 著 犯 罪 手 法 科 技 化 的 趨 勢, 刑 事 資 訊 科 技 在 犯 罪 偵 查 工 作 上 的 角 色 也 愈 顯 重 要, 刑 事 資 訊 業
More informationHitachi Vantara Hitachi Vantara Hitachi, Ltd. Hitachi Vantara IT OT Go Go
Hitachi, Ltd. IT OT https://www.hitachivantara.com/zh-tw/home.html Go Go www.sysage.com.tw 150 Go Go www.sysage.com.tw Go Go www.sysage.com.tw 151 152 Go Go www.sysage.com.tw VSP G130 VSP G (DAS) VSP G130
More information第一章标准答案.doc
Andrew S. Tanenbaum -6 SAP 87.6M -7 [ ] -8 04 04 048 04 048-9 4 3 a b c -0 - - OSI TCP/IP OSI TCP/IP OSI TCP/IP n -4 n( p) p = ( p) -5 OSI mailto:wdg98@63.net -7 n m h [ ] hn/(hn+m)*00% [ OSI TCP/IP ]
More informationMicrosoft Word - 選擇_無解答2_.doc
選 擇 題 : 1 ( ) 下 列 何 者 為 W W W 的 通 訊 協 定? (A)H T T P ( H y p e r T e x t T r a n s f e r P r o t o c o l ) (B)S M T P ( S i m p l e M a i l T r a n s f e r P r o t o c o l ) (C) F T P ( F i l e T r a n
More informationW. Richard Stevens UNIX Sockets API echo Sockets TCP OOB IO C struct C/C++ UNIX fork() select(2)/poll(2)/epoll(4) IO IO CPU 100% libevent UNIX CPU IO
Linux muduo C++ (giantchen@gmail.com) 2012-09-30 C++ TCP C++ x86-64 Linux TCP one loop per thread Linux native muduo C++ IT 5 C++ muduo 2 C++ C++ Primer 4 W. Richard Stevens UNIX Sockets API echo Sockets
More informationVASP应用运行优化
1 VASP wszhang@ustc.edu.cn April 8, 2018 Contents 1 2 2 2 3 2 4 2 4.1........................................................ 2 4.2..................................................... 3 5 4 5.1..........................................................
More information<4D6963726F736F667420576F7264202D20483343CAD3C6B5BCE0BFD8BDE2BEF6B7BDB0B8A3A8B4E6B4A2B2BFCAF0A3A9BCBCCAF5B0D7C6A4CAE92E646F63>
H3C 视 频 监 控 解 决 方 案 ( 存 储 部 署 ) 技 术 白 皮 书 关 键 词 : 单 播 组 播 存 储 视 频 监 控 摘 要 :H3C 视 频 监 控 解 决 方 案 ( 存 储 部 署 ) 整 合 了 自 主 知 识 产 权 的 IP 存 储 和 视 频 监 控 二 者 的 优 势, 根 据 用 户 的 应 用 场 景 提 供 了 多 种 视 频 数 据 存 储 模 式, 通
More information合集
Ver 1.0 版 本 目 录 第 一 章 当 大 数 据 遇 上 SSD 01 第 二 章 广 东 移 动 运 用 Hadoop 创 新 应 用 04 第 三 章 第 四 章 第 五 章 第 六 章 第 七 章 第 八 章 第 九 章 第 十 章 如 何 利 用 大 数 据 分 析 提 升 垃 圾 短 信 过 滤 效 果 广 东 电 信 用 大 数 据 重 构 室 内 网 优 大 数 据 提 升
More information2 2 3 DLight CPU I/O DLight Oracle Solaris (DTrace) C/C++ Solaris DLight DTrace DLight DLight DLight C C++ Fortran CPU I/O DLight AM
Oracle Solaris Studio 12.2 DLight 2010 9 2 2 3 DLight 3 3 6 13 CPU 16 18 21 I/O DLight Oracle Solaris (DTrace) C/C++ Solaris DLight DTrace DLight DLight DLight C C++ Fortran CPU I/O DLight AMP Apache MySQL
More information合, 采 取 有 效 的 跟 进 和 配 套 措 施, 加 强 事 中 事 后 监 管, 防 止 出 现 管 理 脱 节, 不 断 提 高 政 府 管 理 科 学 化 规 范 化 法 治 化 水 平 附 件 :1. 省 政 府 决 定 取 消 的 行 政 审 批 事 项 目 录 2. 省 政 府 决
洪 泽 县 人 民 政 府 文 件 洪 政 发 2015 72 号 洪 泽 县 人 民 政 府 关 于 印 发 省 市 取 消 和 下 放 行 政 审 批 事 项 目 录 的 通 知 各 镇 人 民 政 府, 各 街 道 办 事 处, 县 各 委 办 局, 县 各 直 属 单 位 : 为 了 贯 彻 落 实 国 务 院 和 省 政 府 有 关 取 消 和 下 放 行 政 审 批 评 比 达 标 表
More informationQVM330 多阜寬頻路由器
侠 诺 神 捕 QnoSniff 专 业 版 2.0 简 体 中 文 使 用 手 册 目 录 一 简 介... 4 二 QnoSniff 专 业 版 系 统 安 装 与 配 置... 5 2.1 开 始 之 前 的 准 备... 5 2.2 QnoSniff 专 业 版 安 装 过 程 中 所 需 组 件... 5 2.3 布 署 连 接 范 例 拓 朴... 6 2.4 开 始 安 装... 6
More information热设计网
例 例 Agenda Popular Simulation software in PC industry * CFD software -- Flotherm * Advantage of Flotherm Flotherm apply to Cooler design * How to build up the model * Optimal parameter in cooler design
More information1. 二 進 制 數 值 ( 1 10 10 01 ) 2 轉 換 為 十 六 進 制 時, 其 值 為 何? (A) ( 69 ) 16 (B) ( 39 ) 16 (C) ( 7 A ) 16 (D) ( 8 A ) 16 2. 在 電 腦 術 語 中 常 用 的 UPS, 其 主 要 功 能
注 意 : 考 試 開 始 鈴 ( 鐘 ) 響 前, 不 可 以 翻 閱 試 題 本 民 國 104 年 大 專 程 度 義 務 役 預 備 軍 官 預 備 士 官 考 試 試 題 計 算 機 概 論 注 意 事 項 1. 請 核 對 考 試 科 目 是 否 正 確 2. 請 檢 查 答 案 卡 座 位 及 准 考 證 三 者 之 號 碼 是 否 完 全 相 同, 如 有 不 符, 請 監 試 人
More information电力信息化2013年第1期.indb
中图分类号 TP319 文献标志码 B 文章编号 1672-4844(213)1-87-6 摘要 SAP ERP 信息是很多大型企业的核心信息 是企业在进行容灾建设时主要关切的 信息 文章以双活方式运行的特点对 SAP ERP 信息进行了分析 推导出了 SAP ERP 信息以双活模式运行时操作响时间的计算公式 提出了影响操作响时间的主要因素是网 络时延 测试了 SAP ERP 产品以服务器双活模式运行的实际效果和以数据库双活
More information(UTM???U_935_938_955_958_959 V2.1.9.1)
192.16 www.sharetech.com.tw UTM 多 功 能 防 火 牆 管 理 者 手 冊 V 2.1.9.1 目 錄 第 一 章 安 裝 與 訊 息... 7 1-1 建 議 的 安 裝 設 定 圖... 8 1-2 軟 體 安 裝 設 定... 9 1-3 首 頁 訊 息... 14 1-4 型 號 與 功 能 對 照 表... 17 第 二 章 系 統 設 定... 19 2-1
More information% ~ AAA
1. 230000 503566 47% 2001 3 ~2002 9 31281 5010 950 AAA 2002 1 0532--5951792 2003.7.7 2. 37 58 37% 2001 3 ~2002 9 75 60 950 AAA 2002 306 0532--5951792 2003.7.7 500000 1640000 4350000 6020000 220000 200000
More informationXilinx Alliance Program Certified GJVZsIPb3 IPb3pg(lwE & by2eh;[d)y IP ROM
Xilinx Alliance Program Certified IPb3pg(lwE & by2eh;[d)y IP ROM NVMe SSD FPGA!! NVMe-IP 32G bps Gen3 x 4Lane IP CPUNVMe PCIe SSD 4GB/sec, PCIe Gen3 2ch RAID CPU FAT32 PLDAPCIe Soft IP!! Linux Gen3 PCIe
More information例 如, 一 个 含 有 2000 个 记 录 的 文 件, 每 个 磁 盘 块 可 容 纳 250 个 记 录, 则 该 文 件 包 含 8 个 磁 盘 块 然 后 对 该 文 件 作 二 路 归 并 的 外 排 序, 每 次 往 内 存 读 入 两 个 磁 盘 块, 排 序 后 再 写 回 磁
说 明 改 动 的 内 容 很 少, 且 都 是 不 怎 么 重 要 的, 因 此 无 需 过 多 纠 结, 大 家 看 完 后 一 目 了 然 第 6 章 排 序 1 增 加 了 :( 十 ) 外 部 排 序 第 一 部 分 : 数 据 结 构 2 后 面 的 修 改 :( 十 一 ) 各 种 内 部 排 序 算 法 的 比 较 ;( 十 二 ) 内 部 排 序 算 法 的 应 用 外 部 排 序
More information/ / (FC 3)...
Modbus/TCP 1.0 1999 3 29 Andy Swales Schneider aswales@modicon.com ... 2 1.... 3 2.... 3 2.1.. 3 2.2..4 2.3..4 2.4... 5 3.... 5 3.1 0... 5 3.2 1... 5 3.3 2... 6 3.4 / /... 7 4.... 7 5.... 8 5.1 0... 9
More information目 录 1. 业 务 流 程 系 统 开 发 面 临 的 挑 战 与 机 遇... 3 1.1 业 务 流 程 管 理... 4 2. 新 一 代 开 源 业 务 流 程 开 发 平 台 BPMX3... 5 2.1 BPMX3 是 什 么... 5 2.2 为 什 么 要 优 先 采 用 BPMX
BPMX3 技 术 白 皮 书 业 务 流 程 开 发 平 台 介 绍 目 录 1. 业 务 流 程 系 统 开 发 面 临 的 挑 战 与 机 遇... 3 1.1 业 务 流 程 管 理... 4 2. 新 一 代 开 源 业 务 流 程 开 发 平 台 BPMX3... 5 2.1 BPMX3 是 什 么... 5 2.2 为 什 么 要 优 先 采 用 BPMX3... 5 2.2.1 BPMX3
More information2013_6_3.indd
中 国 科 技 资 源 导 刊 ISSN 1674-1544 2013 年 11 月 第 45 卷 第 6 期 95-99, 107 CHINA SCIENCE & TECHNOLOGY RESOURCES REVIEW ISSN 1674-1544 Vol.45 No.6 95-99, 107 Nov. 2013 构 建 基 于 大 数 据 的 智 能 高 校 信 息 化 管 理 服 务 系 统
More information声 明 本 公 司 及 全 体 董 事 监 事 高 级 管 理 人 员 承 诺 不 存 在 任 何 虚 假 记 载 误 导 性 陈 述 或 重 大 遗 漏, 并 对 其 真 实 性 准 确 性 完 整 性 承 担 个 别 和 连 带 的 法 律 责 任 本 公 司 负 责 人 和 主 管 会 计 工
( 申 报 稿 ) 主 办 券 商 二 〇 一 五 年 十 月 声 明 本 公 司 及 全 体 董 事 监 事 高 级 管 理 人 员 承 诺 不 存 在 任 何 虚 假 记 载 误 导 性 陈 述 或 重 大 遗 漏, 并 对 其 真 实 性 准 确 性 完 整 性 承 担 个 别 和 连 带 的 法 律 责 任 本 公 司 负 责 人 和 主 管 会 计 工 作 的 负 责 人 会 计 机 构
More information<4D6963726F736F667420576F7264202D20C9CFBAA3CAD0BCC6CBE3BBFAB5C8BCB6BFBCCAD4C8FDBCB6BFBCCAD4B4F3B8D95FBDA8D2E9B8E55F5F303632352E646F63>
上 海 市 高 等 学 校 计 算 机 等 级 考 试 ( 三 级 ) 考 试 大 纲 -- 建 议 稿 -- 2007-6-25 25 目 录 上 海 市 高 等 学 校 计 算 机 等 级 考 试 三 级 总 体 说 明 -----------------1 三 级 ( 计 算 机 系 统 与 网 络 技 术 ) 考 试 大 纲 ---------------------2 三 级 ( 管 理
More information6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM
CHAPTER 6 SQL SQL SQL 6-1 Table Column Data Type Row Record 1. DBMS 2. DBMS MySQL Microsoft Access SQL Server Oracle 3. ODBC SQL 1. Structured Query Language 2. IBM 3. 1986 10 ANSI SQL ANSI X3. 135-1986
More informationIBM System x 系列手册
IBM Systems and Technology System x IBM System x IBM System x 2 IBM System x IBM System x IBM System x BladeCenter RAS IT System x BladeCenter - IT IBM - IBM X System x System x IBM System x System x BladeCenter
More informationebook10-5
Oracle 7.x RDBMS 5 Oracle S Y S S Y S T E M O r a c l e 5.1 O r a c l e R D B M S O r a c l e O r a c l e 5.2 SYS SYSTEM S Y S S Y S T E M O r a c l e S Y S V $ D B A C O N N E C T R E S O U R C E S Y
More information<4D6963726F736F667420576F7264202D20312D3120B9ABBFAAD7AAC8C3CBB5C3F7CAE9A3A8C9EAB1A8B8E5A3A92E646F63>
广 西 新 豪 智 云 技 术 股 份 有 限 公 司 ( 申 报 稿 ) 推 荐 主 办 券 商 二 〇 一 六 年 一 月 声 明 本 公 司 及 全 体 董 事 监 事 高 级 管 理 人 员 承 诺 不 存 在 虚 假 记 载 误 导 性 陈 述 或 重 大 遗 漏, 并 对 其 真 实 性 准 确 性 完 整 性 承 担 个 别 和 连 带 的 法 律 责 任 本 公 司 负 责 人 和
More information2 : ; :
4 CH 1 2 : ; : 1 2 2 3 3 4 4 5 5 6 1 6 2 8 3 11 6 13 1 13 2 14 14 1 15 2 16 3 17 4 18 5 22 6 23 7 24 7 CF 32 8 46 9 : 80GB HD 48 3 3 1 : 4 / / 4 9 2 CHANNEL 1 : 1 3 CHANNEL 2 : 2 4 CHANNEL 3 : 3 5 CHANNEL
More information网宿科技股份有限公司2016年半年度报告全文
网 宿 科 技 股 份 有 限 公 司 Wangsu Science & Technology Co., Ltd. 2016 年 半 年 度 报 告 2016 年 07 月 1 第 一 节 重 要 提 示 释 义 本 公 司 董 事 会 监 事 会 及 董 事 监 事 高 级 管 理 人 员 保 证 本 报 告 所 载 资 料 不 存 在 任 何 虚 假 记 载 误 导 性 陈 述 或 者 重 大
More information十萬元以上採購、修繕
學 海 飛 颺 / 學 海 惜 珠 學 生 出 國 研 修 心 得 報 告 內 容 大 綱 請 於 封 面 上 方 列 標 題 ( 標 題 內 容 須 含 : 選 送 生 獲 補 助 年 度 薦 送 學 校 系 所 年 級 中 文 姓 名 前 往 研 修 國 家 及 國 外 研 修 學 校 名 稱 ) 獲 補 助 年 度 薦 送 學 校 系 所 年 級 中 文 姓 名 研 修 國 家 研 修 學 校
More informationQVM330 多阜寬頻路由器
俠 諾 神 捕 QnoSniff 專 業 版 2.0 繁 體 中 文 使 用 手 冊 目 錄 一 簡 介... 4 二 QnoSniff 專 業 版 系 統 安 裝 與 配 置... 6 2.1 開 始 之 前 的 準 備... 6 2.2 QnoSniff 專 業 版 安 裝 過 程 中 所 需 元 件... 6 2.3 佈 署 連 接 範 例 拓 樸... 7 2.4 開 始 安 裝... 7
More informationEMC® VNX® Series VNX8000™ Block 安装指南
EMC VNX Series VNX8000 Block 安 装 指 南 300-999-791 REV 05 版 权 所 有 2014-2015 EMC Corporation 保 留 所 有 权 利 中 国 印 刷 发 布 日 期 : 2015 年 2 月 EMC 确 信 本 出 版 物 在 发 布 之 日 内 容 准 确 无 误 本 出 版 物 中 的 信 息 可 随 时 更 改 而 不 另
More information叮当旺业通
叮 当 旺 业 通 即 时 通 讯 系 统 解 决 方 案 上 海 富 可 信 息 技 术 发 展 有 限 公 司 2011 年 06 月 03 日 日 期 版 本 说 明 变 更 人 批 准 日 期 批 准 人 目 录 第 一 部 分 引 言... 1 1.1 编 写 目 的... 1 1.2 项 目 背 景... 1 1.3 定 义... 1 1.4 参 考 资 料... 1 第 二 部 分 任
More informationC6_ppt.PDF
C01-202 1 2 - (Masquerade) (Replay) (Message Modification) (Denial of Service) - ( ) (Eavesdropping) (Traffic Analysis) 8 1 2 7 3 6 5 4 3 - TCP SYN (SYN flood) Smurf Ping of Death LAND Attack Teardrop
More informationSL2511 SR Plus 操作手冊_單面.doc
IEEE 802.11b SL-2511 SR Plus SENAO INTERNATIONAL CO., LTD www.senao.com - 1 - - 2 - .5 1-1...5 1-2...6 1-3...6 1-4...7.9 2-1...9 2-2 IE...11 SL-2511 SR Plus....13 3-1...13 3-2...14 3-3...15 3-4...16-3
More informationhks298cover&back
2957 6364 2377 3300 2302 1087 www.scout.org.hk scoutcraft@scout.org.hk 2675 0011 5,500 Service and Scouting Recently, I had an opportunity to learn more about current state of service in Hong Kong
More information校友会系统白皮书feb_08
硕 士 研 究 生 招 生 管 理 系 统 1 产 品 白 皮 书 希 尔 数 字 校 园 硕 士 研 究 生 招 生 管 理 系 统 白 皮 书 目 录 1 产 品 概 述... 1 1.1 产 品 简 介... 1 1.2 应 用 范 围... 1 2 产 品 功 能 结 构 图... 2 3 产 品 功 能... 3 3.1 系 统 设 置... 3 3.2 信 息 发 布... 3 3.3
More informationSymantec™ Sygate Enterprise Protection 防护代理安装使用指南
Symantec Sygate Enterprise Protection 防 护 代 理 安 装 使 用 指 南 5.1 版 版 权 信 息 Copyright 2005 Symantec Corporation. 2005 年 Symantec Corporation 版 权 所 有 All rights reserved. 保 留 所 有 权 利 Symantec Symantec 徽 标 Sygate
More informationMicrosoft Word - 13院21号.doc
川 教 考 院 2013 21 号 四 川 省 教 育 考 试 院 关 于 全 国 计 算 机 等 级 考 试 体 系 调 整 的 通 知 各 NCRE 考 点 : 为 进 一 步 适 应 新 时 期 计 算 机 应 用 技 术 的 发 展 和 人 才 市 场 需 求 的 变 化, 确 保 全 国 计 算 机 等 级 考 试 ( 以 下 简 称 NCRE) 健 康 持 续 发 展, 教 育 部 考
More informationebook 145-6
6 6.1 Jim Lockhart Windows 2000 0 C S D Wo r m. E x p l o r e Z i p z i p p e d _ f i l e s. e x e Wo r m. E x p l o r e Z i p H i Recipient Name! I received your email and I shall send you a reply ASAP.
More informationSession Number VVT-291 Cisco ACNS / Microsoft WMT Don't Know None Others Investor relations Business to business collaboration Marketing events raining for customers and suppliers External communications
More information吳 鳳 科 技 大 學 資 訊 管 理 系 四 技 部 專 題 製 作 無 所 不 在 的 雲 端 桌 面 製 作 群 : 張 浚 豪 49805037 四 資 四 C 黃 柏 祥 49805041 四 資 四 C 江 文 雅 49805120 四 資 四 C 指 導 老 師 : 沈 士 豪 老 師 中 華 民 國 一 一 年 十 二 月 吳 鳳 科 技 大 學 資 訊 管 理 系 四 技 部 專
More informationuntitled
V3049A-EXD IP-SAN/NAS Infinova Infinova Infinova Infinova www.infinova.com.cn Infinova Infinova Infinova 1 2 1 2 V3049A-EXD-R16 V3049A-EXD-R24 ... 1 1.1... 1 1.2... 1 1.3... 1... 2 2.1... 2 2.2... 3...
More information目 录 目 录... 2 1 平 台 概 述... 3 2 技 术 架 构... 4 3 技 术 特 点... 7 3.1 基 于 统 一 平 台 的 多 产 品 线 支 撑... 7 3.2 先 进 性... 7 3.3 安 全 性... 7 3.4 开 放 性... 8 3.5 高 性 能 和
致 远 协 同 管 理 软 件 V5 平 台 白 皮 书 北 京 致 远 协 创 软 件 有 限 公 司 2014 年 6 月 1 / 20 目 录 目 录... 2 1 平 台 概 述... 3 2 技 术 架 构... 4 3 技 术 特 点... 7 3.1 基 于 统 一 平 台 的 多 产 品 线 支 撑... 7 3.2 先 进 性... 7 3.3 安 全 性... 7 3.4 开 放
More informationjdbc:hsqldb:hsql: jdbc:hsqldb:hsqls: jdbc:hsqldb:http: jdbc:hsqldb:https: //localhost //192.0.0.10:9500 / /dbserver.somedomain.com /an_alias /enrollme
sh -x path/to/hsqldb start > /tmp/hstart.log 2>&1 第 4 章 高 级 话 题 4.1 本 章 目 的 许 多 在 论 坛 或 邮 件 组 中 重 复 出 现 的 问 题 将 会 在 本 文 档 中 进 行 解 答 如 果 你 打 算 在 应 用 程 序 中 使 用 HSQLDB 的 话, 那 么 你 应 该 好 好 阅 读 一 下 本 文 章 本 章
More informationIP TCP/IP PC OS µclinux MPEG4 Blackfin DSP MPEG4 IP UDP Winsock I/O DirectShow Filter DirectShow MPEG4 µclinux TCP/IP IP COM, DirectShow I
2004 5 IP TCP/IP PC OS µclinux MPEG4 Blackfin DSP MPEG4 IP UDP Winsock I/O DirectShow Filter DirectShow MPEG4 µclinux TCP/IP IP COM, DirectShow I Abstract The techniques of digital video processing, transferring
More information<4D6963726F736F667420576F7264202D20CFB5B7D62DCFC2CEE749CAD4CCE22D3037C9CF>
全 国 计 算 机 技 术 与 软 件 专 业 技 术 资 格 ( 水 平 ) 考 试 2007 年 上 半 年 系 统 分 析 师 下 午 试 卷 I ( 考 试 时 间 3:30~5:00 共 90 分 钟 ) 请 按 下 表 选 答 试 题 试 题 号 一 二 ~ 五 选 择 方 法 必 答 题 选 答 2 题 请 按 下 述 要 求 正 确 填 写 答 题 纸. 本 试 卷 满 分 75 分,
More information