1、1Docker 和微服务技术的崛起2作 为 一 名 软 件 开 发 者 或 技 术 爱 好 者 , 像 “微 服 务 ”和 “Docker”这 样 的 术 语 已 经 不 绝 于 耳 , 但你 是 否 仍 然 不 明 白 为 什 么 会 有 这 么 多 相 关 的 炒 作 ?SOA“简 史 ”在 2000 年 初 , 我 们 目 睹 了 面 向 服 务 架 构 ( Service Oriented Architecture, SOA) 的 崛 起 ,这 是 一 种 非 常 流 行 的 软 件 架 构 设 计 范 式 。 简 而 言 之 , SOA 是 一 种 软 件 架 构 模 式 , 用 于
2、 构 建 大 型的 企 业 应 用 程 序 , 这 些 应 用 程 序 通 常 要 求 集 成 多 种 服 务 , 而 每 种 服 务 使 用 不 同 的 平 台 和 编 程 语 言来 构 建 , 并 通 过 通 用 的 通 信 机 制 进 行 交 互 。以 下 是 面 向 服 务 架 构 ( SOA) 的 简 单 图 示 :关 键 点1. SOA 是 大 型 软 件 产 品 ( 如 企 业 应 用 程 序 ) 的 首 选 。2. SOA 侧 重 于 将 多 个 服 务 集 成 到 单 个 应 用 程 序 中 , 而 不 是 强 调 模 块 化 应 用 程 序 。3. 在 SOA 中 , 用
3、于 服 务 间 交 互 的 通 用 通 信 机 制 被 称 为 企 业 服 务 总 线 ( Enterprise Service Bus, ESB) 。4. 基 于 SOA 的 应 用 程 序 本 质 是 单 体 。 也 就 是 说 , 单 个 应 用 程 序 层 包 含 了 用 户 界 面 或 表 示 层 、 业 务逻 辑 或 应 用 程 序 层 , 以 及 数 据 库 层 , 这 些 全 部 都 集 成 到 一 个 平 台 中 。3关 于 “单 体 架 构 ”让 我 们 以 网 店 为 例 。 我 们 知 道 , 很 多 电 商 网 站 都 可 以 通 过 多 种 设 备 访 问 , 所
4、以 这 些 网 站 通 常 都 为笔 记 本 电 脑 和 移 动 设 备 提 供 了 不 同 的 用 户 界 面 。我 们 也 知 道 , 多 个 操 作 或 服 务 彼 此 依 赖 , 以 确 保 应 用 程 序 的 正 常 运 行 。 其 中 一 些 服 务 负 责 创 建 账号 、 显 示 产 品 目 录 、 建 立 和 验 证 购 物 车 、 生 成 账 单 、 确 认 订 单 、 完 成 支 付 等 。在 单 体 应 用 程 序 中 , 所 有 这 些 服 务 都 在 同 一 个 应 用 程 序 层 上 运 行 , 因 此 这 个 电 子 商 务 网 站 的 软 件架 构 如 下 所
5、 示 :缺 点41. 很 显 然 , 随 着 服 务 数 量 的 增 加 , 应 用 程 序 的 规 模 将 不 断 增 长 。 这 可 能 会 让 构 建 和 维 护 应 用 程 序 代码 库 的 开 发 人 员 不 堪 重 负 。2. 难 以 更 新 当 前 的 技 术 栈 , 即 使 是 在 当 前 技 术 栈 中 修 改 一 点 内 容 也 会 是 一 场 噩 梦 。3. 每 一 项 变 更 都 要 求 开 发 人 员 重 建 整 个 应 用 程 序 , 十 分 浪 费 资 源 。4. 随 着 客 户 群 的 增 加 , 我 们 将 有 更 多 的 请 求 需 要 , 这 将 需 要
6、更 多 的 资 源 。 因 此 , 建 立 可 扩 展 的 产 品时 至 关 重 要 的 。 对 于 单 体 应 用 程 序 , 我 们 只 能 在 一 个 方 向 上 进 行 伸 缩 , 即 垂 直 伸 缩 , 而 不 是 水 平伸 缩 。 这 意 味 着 我 们 可 以 通 过 添 加 更 多 硬 件 资 源 ( 如 内 存 和 CPU) 在 单 台 计 算 机 上 扩 展 应 用 程序 , 但 横 向 扩 展 ( 跨 多 台 计 算 机 ) 仍 然 是 一 项 挑 战 。救 星 “微 服 务 ”来 了 !微 服 务 架 构 可 以 被 认 为 是 对 SOA 的 特 殊 化 , 也 是
7、一 种 可 以 克 服 单 体 架 构 缺 陷 的 替 代 模 式 。在 微 服 务 架 构 中 , 我 们 专 注 于 将 应 用 程 序 模 块 化 , 将 其 分 解 成 较 小 的 独 立 服 务 , 这 些 服 务 可 独 立于 其 他 服 务 或 整 个 应 用 程 序 本 身 而 构 建 、 部 署 、 伸 缩 和 维 护 。 这 些 独 立 服 务 被 称 为 微 服 务 , 因 此这 种 架 构 被 称 为 微 服 务 架 构 。关 键 点51. 微 服 务 架 构 和 SOA 虽 然 不 一 样 , 但 它 们 确 实 存 在 一 些 相 似 之 处 。 微 服 务 架 构
8、 被 称 为 SOA 的变 体 , 甚 至 是 SOA 的 一 种 特 殊 化 。 换 句 话 说 , SOA 可 以 被 认 为 是 微 服 务 架 构 的 超 集 。2. 人 们 之 所 以 能 够 在 这 些 架 构 之 间 找 到 相 似 性 , 主 要 是 因 为 它 们 都 专 注 于 构 建 具 有 松 散 耦 合 的 服 务 。这 些 服 务 具 有 明 确 的 界 限 , 并 且 每 个 服 务 都 具 有 独 立 的 功 能 集 。3. 不 同 之 处 在 于 , SOA 可 能 意 味 着 其 他 很 多 东 西 。 例 如 , SOA 适 用 于 单 体 架 构 , 重
9、 点 是 将 系 统集 成 在 一 个 应 用 程 序 中 , 并 确 保 代 码 的 可 复 用 性 。 但 对 微 服 务 架 构 来 说 并 不 是 这 样 的 , 微 服 务 架构 的 重 点 是 通 过 构 建 独 立 服 务 和 确 保 产 品 的 可 伸 缩 性 来 模 块 化 应 用 程 序 。优 点1. 引 入 关 注 点 分 离 的 理 念 , 在 软 件 应 用 程 序 开 发 中 实 现 敏 捷 , 不 管 是 在 简 单 的 还 是 复 杂 的 领 域 。2. 微 服 务 的 独 立 能 力 或 独 立 性 带 来 了 以 下 好 处 : 将 开 发 人 员 分 成
10、小 团 队 来 降 低 复 杂 性 , 每 个 小 团 队 负 责 构 建 和 维 护 一 个 或 多 个 服 务 。 允 许 部 署 分 块 , 而 不 是 每 次 发 生 变 更 都 要 重 新 构 建 整 个 应 用 程 序 , 以 此 来 降 低 风 险 。 增 量 更 新 或 升 级 一 个 或 多 个 服 务 的 技 术 栈 , 而 不 是 在 一 个 时 间 点 更 新 整 个 应 用 程 序 , 以 此 降 低 维护 难 度 。 可 以 使 用 任 意 的 编 程 语 言 来 构 建 服 务 , 除 此 之 外 , 还 可 以 为 每 个 给 定 服 务 维 护 单 独 的 数
11、 据 模 型 。3. 可 以 构 建 全 自 动 的 部 署 机 制 , 确 保 个 体 服 务 的 部 署 、 服 务 管 理 和 自 动 伸 缩 。技 术 的 演 变除 了 软 件 架 构 模 式 的 发 展 之 外 , 我 们 还 看 到 Docker 和 Kubernetes 等 新 技 术 的 出 现 , 用 于支 持 我 们 的 软 件 基 础 设 施 , 实 现 对 可 伸 缩 产 品 和 服 务 的 高 效 管 理 。 我 们 已 经 从 硬 件 虚 拟 化 发 展 到容 器 化 。或 许 你 会 想 , 这 意 味 着 什 么 ?让 我 们 借 助 下 图 来 理 解 IT
12、基 础 设 施 领 域 的 发 展 :6第 一 张 图 显 示 的 是 一 台 物 理 机 器 或 一 台 硬 件 服 务 器 。 通 常 , 我 们 在 构 建 应 用 程 序 时 使 用 的 是 宿 主操 作 系 统 提 供 的 资 源 , 在 部 署 应 用 程 序 时 也 使 用 了 相 同 的 模 式 。 但 如 果 你 想 扩 展 应 用 程 序 该 怎 么办 呢 ? 在 某 些 时 候 , 你 可 能 需 要 另 一 台 硬 件 服 务 器 。 而 随 着 数 量 不 断 增 加 , 成 本 和 其 他 资 源 ( 如硬 件 和 能 源 消 耗 ) 也 会 随 之 增 加 。此
13、外 , 你 可 能 会 想 , 是 否 有 必 要 在 任 何 时 候 都 使 用 所 有 的 硬 件 资 源 和 操 作 系 统 ? 当 然 不 是 。 既 然这 样 , 那 么 为 什 么 还 需 要 这 么 庞 大 的 基 础 设 施 呢 ?这 个 问 题 促 成 了 硬 件 虚 拟 化 的 发 展 , 于 是 虚 拟 机 ( VM) 出 现 了 , 我 们 通 过 虚 拟 机 来 优 化 IT 基 础 设 施 。 如 你 在 第 二 张 图 中 看 到 的 , 虚 拟 机 具 有 自 己 的 客 户 操 作 系 统 , 运 行 在 单 个 物 理 机 或 宿主 操 作 系 统 中 。
14、我 们 因 此 能 够 运 行 多 个 应 用 程 序 , 而 无 需 安 装 大 量 物 理 机 。 宿 主 操 作 系 统 可 以 确保 在 不 同 虚 拟 机 之 间 进 行 系 统 性 的 资 源 分 配 和 负 载 均 衡 。7虚 拟 机 降 低 了 软 件 维 护 的 难 度 和 成 本 , 不 过 仍 然 可 以 进 一 步 优 化 。 例 如 , 并 非 所 有 的 应 用 程 序 在客 户 操 作 系 统 环 境 中 都 会 按 预 期 运 行 。 此 外 , 即 使 是 运 行 简 单 的 进 程 , 客 户 操 作 系 统 也 需 要 大 量资 源 。这 些 问 题 促
15、成 了 下 一 个 创 新 : 容 器 化 。 与 特 定 于 操 作 系 统 的 虚 拟 机 不 同 , 容 器 特 定 于 应 用 程 序 ,因 为 更 加 轻 量 级 。 此 外 , 虚 拟 机 可 以 运 行 多 个 进 程 , 而 容 器 作 为 单 个 进 程 运 行 。 于 是 :1. 我 们 可 以 在 物 理 机 上 运 行 多 个 容 器 , 或 者 甚 至 可 以 考 虑 在 单 个 虚 拟 机 上 运 行 容 器 。 无 论 是 哪 种 情况 , 它 都 可 以 解 决 应 用 程 序 相 关 的 问 题 。2. 容 器 化 与 虚 拟 化 之 间 并 不 是 竞 争
16、关 系 , 而 是 一 种 互 补 , 用 以 进 一 步 优 化 IT 软 件 基 础 设 施 。Docker我 们 已 经 了 解 了 IT 软 件 基 础 设 施 的 演 变 , 接 下 来 可 能 想 知 道 如 何 实 现 之 前 讨 论 过 的 微 服 务 架 构和 容 器 化 ? 答 案 是 : Docker。Docker 是 全 球 领 先 的 软 件 容 器 化 平 台 , 它 将 微 服 务 封 装 进 我 们 所 说 的 Docker 容 器 , 然 后 进行 独 立 的 维 护 和 部 署 。 每 个 容 器 都 将 负 责 一 个 特 定 的 业 务 功 能 。为 了
17、 更 深 入 了 解 Docker, 让 我 们 以 前 面 讨 论 过 的 电 子 商 务 网 站 为 例 。 我 们 知 道 它 拥 有 多 项 业 务和 服 务 , 例 如 创 建 账 号 、 显 示 产 品 目 录 、 建 立 和 验 证 购 物 车 等 。 在 微 服 务 架 构 中 , 所 有 这 些 都 可以 视 为 微 服 务 并 封 装 在 Docker 容 器 中 。 但 是 , 为 什 么 要 这 样 做 ?其 中 一 个 原 因 是 为 了 确 保 开 发 和 生 产 环 境 之 间 的 一 致 性 。 例 如 , 假 设 有 三 位 开 发 人 员 正 在 开 发 此
18、应 用 程 序 , 他 们 每 个 人 都 有 自 己 的 开 发 环 境 。 其 中 一 个 开 发 人 员 可 能 在 他 的 机 器 上 运 行 Windows 操 作 系 统 , 而 第 二 个 开 发 人 员 可 能 运 行 Mac OS, 第 三 个 开 发 人 员 会 更 喜 欢 基 于 Linux 的 操 作 系 统 。 他 们 每 个 人 都 需 要 花 费 数 小 时 的 时 间 将 应 用 程 序 安 装 到 各 自 的 开 发 环 境 中 ,并 且 需 要 做 额 外 的 工 作 将 它 们 部 署 到 云 端 。 这 一 过 程 并 不 那 么 顺 畅 , 在 将 这
19、 些 应 用 程 序 部 署 到 云基 础 设 施 上 时 , 他 们 之 间 总 是 会 发 生 摩 擦 。8借 助 Docker, 可 以 使 应 用 程 序 独 立 于 主 机 环 境 。 因 为 采 用 了 微 服 务 架 构 , 所 以 现 在 可 以 将 每 个服 务 封 装 到 Docker 容 器 中 。 Docker 容 器 是 轻 量 级 的 , 并 且 资 源 是 隔 离 的 , 通 过 它 可 以 构 建 、维 护 、 发 布 和 部 署 应 用 程 序 。优 点1. Docker 是 一 款 非 常 流 行 的 软 件 , 有 强 大 的 社 区 支 持 , 并 专 门 为 微 服 务 而 构 建 。2. 与 虚 拟 机 相 比 , 它 是 轻 量 级 的 , 在 成 本 和 资 源 消 耗 方 面 颇 具 优 势 。3. 它 为 开 发 和 生 产 环 境 提 供 了 一 致 性 , 非 常 适 合 用 于 构 建 云 原 生 应 用 程 序 。4. 它 为 持 续 集 成 和 部 署 提 供 了 便 利 。5. Docker 可 与 AWS、 Microsoft Azure、 Ansible、 Kubernetes、 Istio 这 些 流 行 的 工 具 和 服务 集 成 。