1、1系统架构优化最佳实践看京东系统架构师如何让笨重的架构变得灵巧2目 录一 、 项 目 背 景 .3二、 系 统 拆 分 .31、 水 平 扩 展 .32、 垂 直 拆 分 .43、 业 务 拆 分 .44、 水 平 拆 分 .6三、 结 构 演 变 .6四 、 结 语 .113一 、 项 目 背 景随 着 业 务 的 复 杂 性 增 大 、 系 统 吞 吐 量 增 长 , 所 有 功 能 统 一 部 署 难 度 加 大 , 各 个 功 能 模 块 相 互 影 响 ,使 系 统 变 的 笨 重 且 脆 弱 ; 因 此 需 要 对 业 务 进 行 拆 分 、 对 系 统 进 行 解 耦 、 对 系
2、 统 内 部 架 构 升 级 , 来提 升 系 统 容 量 及 健 壮 性 。接 下 来 主 要 分 两 部 分 介 绍 : 系 统 拆 分 与 结 构 演 变 ;二、 系 统 拆 分系 统 拆 分 从 资 源 角 度 分 为 : 应 用 拆 分 和 数 据 库 拆 分 ;从 采 用 的 先 后 顺 序 可 分 为 : 水 平 扩 展 、 垂 直 拆 分 、 业 务 拆 分 、 水 平 拆 分 ;图 1 系 统 分 解 原 则1、 水 平 扩 展4水 平 扩 展 是 最 初 始 的 解 决 的 手 段 , 也 是 系 统 遇 到 瓶 颈 的 首 选 方 案 , 主 要 从 以 下 两 个 方
3、面 扩 展 :o 应 用 加 实 例 , 搞 集 群 , 把 系 统 吞 吐 量 扩 上 去 。o 数 据 库 利 用 主 从 进 行 读 写 分 离 , 数 据 库 其 实 是 系 统 最 应 该 保 护 的 资 源 。2、 垂 直 拆 分垂 直 拆 分 才 是 真 正 开 始 拆 分 系 统 , 主 要 是 从 业 务 功 能 角 度 拆 分 。 如 拆 出 用 户 系 统 、 商 品 系 统 、 交易 系 统 等 。 为 了 解 决 拆 分 后 各 个 子 系 统 之 间 相 互 依 赖 调 用 的 问 题 , 这 时 会 引 入 服 务 调 用 治 理 。 系统 复 杂 度 有 所 加
4、 大 , 但 系 统 基 本 解 耦 , 稳 定 性 相 对 提 高 , 做 好 降 级 就 能 避 免 因 其 它 系 统 功 能 异 常导 致 系 统 崩 溃 。业 务 对 应 的 库 也 会 按 照 对 应 的 业 务 进 行 拆 分 出 用 户 库 、 商 品 库 、 交 易 库 等 。3、 业 务 拆 分业 务 拆 分 主 要 是 针 对 应 用 层 面 按 功 能 特 点 拆 分 , 如 交 易 拆 分 出 : 购 物 车 、 结 算 页 、 订 单 、 秒 杀 等系 统 。 然 后 根 据 业 务 的 特 点 , 针 对 性 做 处 理 , 如 秒 杀 系 统 , 由 于 同 时
5、 参 加 秒 杀 的 商 品 有 限 , 可 以提 前 把 商 品 信 息 加 载 到 JVM 缓 存 中 , 自 身 减 少 外 部 调 用 提 高 性 能 , 同 时 商 品 系 统 也 减 轻 压 力 。数 据 库 拆 分 也 可 以 分 为 几 步 : 垂 直 分 表 、 垂 直 分 库 、 水 平 分 表 、 水 平 分 库 分 表 ;5垂 直 分 表 是 指 大 表 拆 多 张 小 表 , 可 以 根 据 字 段 更 新 或 查 询 频 次 拆 分 ;图 2 商 品 表 拆 分垂 直 分 库 是 指 按 业 务 拆 库 , 如 拆 出 订 单 库 、 商 品 库 、 用 户 库 等
6、水 平 分 表 是 解 决 数 据 量 大 , 把 一 张 表 拆 成 多 张 表 ;水 平 分 库 分 表 是 更 进 一 步 拆 分 表 ;6图 3 分 库 分 表4、 水 平 拆 分服 务 分 层 , 系 统 服 务 积 木 化 , 拆 分 功 能 与 非 功 能 系 统 , 以 及 业 务 组 合 的 系 统 , 如 最 近 比 较 火 的 大中 台 或 前 台 拆 分 ; 中 台 为 积 木 组 件 , 承 担 服 务 功 能 输 出 。 前 台 更 多 的 是 组 合 积 木 服 务 , 及 时 响 应业 务 发 展 , 如 在 电 商 网 站 单 品 页 能 看 见 主 图 、
7、价 格 、 库 存 、 优 惠 券 或 推 荐 等 信 息 , 都 是 组 合 各 积木 组 件 呈 现 。数 据 库 也 可 以 进 行 冷 热 数 据 分 离 ; 过 期 或 过 季 商 品 可 以 归 档 , 比 如 诺 基 亚 3210 手 机 , 早 已 经停 产 且 没 有 销 售 ; 用 户 查 看 订 单 时 , 更 多 的 只 是 查 看 最 近 1、 2 年 信 息 , 2 年 前 数 据 查 看 量 少 ,在 存 储 设 计 时 可 以 区 别 处 理 。三、 结 构 演 变结 构 演 变 主 要 是 随 着 系 统 复 杂 度 增 加 及 对 性 能 要 求 提 高 而
8、 不 得 不 做 的 系 统 内 部 架 构 升 级 ;7早 期 系 统 基 本 是 应 用 直 联 数 据 库 , 但 在 系 统 进 行 拆 分 后 , 功 能 本 系 统 不 能 单 独 完 成 , 需 要 依 赖 其它 系 统 , 就 出 现 远 程 调 用 ;图 4 早 期 应 用 结 构随 着 自 身 系 统 的 业 务 发 展 , 对 性 能 要 求 高 , 而 数 据 库 一 定 程 度 上 成 为 瓶 颈 , 就 会 引 入 缓 存 及 索 引 ,分 别 解 决 key-value 及 复 杂 检 索 ; 索 引 加 缓 存 现 在 已 经 成 为 解 决 高 并 发 的 基
9、 本 方 案 , 但 在 实 施 过程 会 有 所 区 别 ;14 年 对 3 亿 热 数 据 的 系 统 升 级 时 , 技 术 选 型 为 solr+redis, 考 虑 到 数 据 量 过 大 , 数 据 在 solr中 只 存 index, 而 结 果 只 存 并 返 回 主 键 id, 再 通 过 id 从 redis 中 读 取 数 据 , redis 也 不 存 放 全部 数 据 , 数 据 设 置 过 期 时 间 , 若 未 命 中 redis, 回 源 数 据 库 查 询 并 反 写 redis; 主 要 考 虑 资 源 与性 能 的 平 衡 , solr 的 存 储 减 少
10、 及 IO 性 能 提 高 , 结 果 数 据 只 在 redis 存 放 一 份 , redis 的 数 据 经过 运 行 大 部 分 是 热 数 据 ; 当 然 现 在 也 流 行 ES+Hbase 组 合 。8图 5 增 加 缓 存 及 索 引对 于 频 繁 使 用 的 数 据 , 从 集 中 缓 存 读 取 , 不 一 定 达 到 性 能 要 求 , 可 以 考 虑 把 数 据 入 JVM 缓 存 ,如 类 目 信 息 , 类 目 是 电 商 系 统 基 本 数 据 , 数 据 量 不 多 , 调 用 量 大 ;个 别 情 况 下 , 使 用 ThreadLocal 做 线 程 内 缓
11、 存 也 是 种 有 效 手 段 , 但 需 要 考 虑 数 据 清 除 及 有 效 性 ;在 修 改 商 品 信 息 时 , 业 务 对 商 品 信 息 的 校 验 有 名 称 长 度 、 状 态 、 库 存 及 各 业 务 模 式 等 , 而 为 了 参数 的 统 一 校 验 方 法 参 数 为 商 品 编 号 , 导 致 各 校 验 方 法 都 需 要 读 取 一 次 商 品 , 使 用 线 程 缓 存 可 以 解决 该 问 题 , 性 能 提 高 了 尽 20ms, 读 取 商 品 每 分 钟 减 少 近 万 次 ;9图 6 增 加 本 地 缓 存有 时 所 依 赖 系 统 性 能 不
12、 太 稳 定 , 避 免 出 现 因 第 三 方 系 统 影 响 系 统 , 把 依 赖 的 服 务 进 行 数 据 闭 环 ,与 Dao 一 样 当 成 系 统 的 数 据 源 ; 如 商 品 系 统 强 依 赖 商 家 系 统 的 商 家 信 息 服 务 , 若 商 家 服 务 不 稳定 , 商 品 系 统 一 半 服 务 都 不 稳 定 , 采 取 对 商 家 信 息 缓 存 一 份 , 降 低 外 部 风 险 , 把 风 险 控 制 在 自 己手 上 ;10图 7 远 程 服 务 进 化 成 数 据 源用 户 体 验 最 近 越 来 越 重 视 , 系 统 响 应 时 间 性 能 要
13、求 也 越 来 越 高 , 异 步 化 是 很 好 的 一 种 选 择 : 消 息中 间 件 ; 电 商 下 单 就 是 个 很 好 的 案 例 , 在 用 户 点 击 下 单 时 , 服 务 端 不 直 接 保 存 数 据 , 给 订 单 系 统发 送 消 息 , 就 直 接 返 回 支 付 页 面 , 在 用 户 支 付 过 程 中 , 订 单 系 统 异 步 进 行 数 据 保 存 ;业 务 层 、 数 据 层 的 范 围 越 来 越 宽 泛 , 业 务 层 可 以 分 为 基 础 服 务 与 组 合 服 务 ; 数 据 层 分 为 数 据 源 与索 引 缓 存 ; 依 赖 的 技 术 或 中 间 件 需 要 有 效 的 结 合 , 用 于 解 决 系 统 所 遇 到 各 种 问 题 。