前 台 门 户 网 站 架 构 设 计 方 案
目 录 1 设 计 思 路... 3 2 系 统 结 构... 3 3 网 络 规 划 及 性 能 计 算...3 3.1 网 络 架 构...3 3.2 网 络 架 构 说 明...4 3.2.1 采 用 双 防 火 墙 双 交 换 机 做 网 络 冗 余, 保 障 平 台 服 务... 4 3.2.2 采 用 硬 件 设 备 负 载 均 衡 器, 实 现 网 络 流 量 的 负 载 均 衡... 4 3.3 系 统 测 算...4 3.3.1 系 统 处 理 能 力 要 求...4 3.3.2 业 务 处 理 能 力 要 求...4 3.3.3 系 统 话 务 模 型...4 3.4 配 置 核 算...5 3.4.1 数 据 库 服 务 器 性 能 核 算...5 3.4.2 WEB 服 务 器 集 群 性 能 核 算...5 3.4.3 WEB 服 务 器 集 群 内 存 性 能 核 算... 5 3.4.4 网 络 带 宽...5 4 性 能 模 拟 测 试 及 性 能 推 算...6 4.1 测 试 环 境...6 4.2 测 试 结 果...8 4.2.1 1 个 客 户 端 模 拟 不 同 线 和 并 发 请 求 结 果... 8 4.2.2 10 个 客 户 端 请 求...8 4.3 结 果 分 析...9 4.4 根 据 测 试 结 果 推 算...9 4.5 设 备 清 单...11 4.5.1 硬 件 设 备 配 置 清 单...11 4.5.2 设 备 技 术 规 格...12 4.6 平 台 扩 容 的 建 议...12
1 网 站 的 性 能 瓶 颈 分 析 网 站 的 性 能 影 响 因 素 很 多, 下 面 主 要 从 如 下 4 个 方 面 进 行 分 析 说 明 : 1) 网 络 负 载 a) 公 网 负 载 b) 内 网 负 载 2) WEB 应 用 服 务 器 性 能 a) CPU b) 存 储,I/O 访 问 c) 内 存 d) 并 发 TCP/IP 连 接 数 3) 数 据 库 服 务 器 性 能 a) 数 据 库 参 数 配 置 b) 服 务 器 性 能 (CPU 内 存 存 储 ) c) 数 据 结 构 的 合 理 性 4) 不 同 WEB 应 用 的 处 理 方 式 而 对 不 同 的 性 能 瓶 颈 a) 对 于 静 态 的 网 站 : 静 态 的 HTML 页 面 严 格 地 由 标 准 的 HTML 标 示 语 言 构 成, 并 不 需 要 服 务 器 端 即 时 运 算 生 成 这 意 味 着, 对 一 个 静 态 HTML 文 档 发 出 访 问 请 求 后, 服 务 器 端 只 是 简 单 地 将 该 文 档 传 输 到 客 户 端 从 服 务 器 运 行 的 那 个 时 间 片 来 看, 这 个 传 输 过 程 仅 仅 占 用 了 很 小 的 CPU 资 源 对 于 静 态 HTML 的 访 问 瓶 颈 为 : 网 络 带 宽 磁 盘 I/O 以 及 cache( 高 速 缓 冲 存 储 器 ) b) 对 于 动 态 页 面 因 为 服 务 器 解 析 动 态 页 面 必 须 在 其 传 输 到 客 户 端 前 就 通 过 服 务 器 来 进 行 解 释, 这 样 就 会 给 应 用 服 务 器 添 加 额 外 的 性 能 消 耗, 如 果 进 一 步 要 访 问 数 据 库, 则 会 增 加 数 据 库 服 务 器 的 性 能 消 耗, 则 动 态 页 面 还 有 额 外 的 瓶 颈 : 应 用 服 务 器 的 性 能, 数 据 库 服 务 器 的 性 能 2 系 统 架 构 设 计 2.1 总 体 思 路 为 提 高 网 站 的 高 并 发 性 能, 提 高 开 发 效 率 及 运 营 效 率, 主 要 按 如 下 几 个 思 路 进 行 规 划 设 计 : 2.1.1 负 载 均 衡 1) 四 层 交 换 负 载 均 衡 : 采 用 负 载 均 衡 器 来 实 现 硬 件 级 的 四 层 交 换 负 载 均 衡, 或 采 用 LVS 来 实 现 软 件 的 四 层 交 换 负 载 均 衡
2) 通 过 第 三 方 软 件 来 实 现 负 载 均 衡, 同 时 实 现 页 面 请 求 的 缓 存 通 过 Nginx 实 现 反 向 代 理 服 务 器 集 群, 同 时 搭 建 squid 集 群 以 作 为 静 态 页 面 和 图 片 的 缓 存 3) 通 过 web 服 务 器 的 配 置 来 实 现 负 载 均 衡 即 通 过 apache 或 是 Nginx 将 客 户 请 求 均 衡 的 分 给 tomcat1,tomcat2... 去 处 理 2.1.2 WEB 应 用 开 发 架 构 思 路 1) 应 用 开 发 实 现 MVC 架 构 三 层 架 构 进 行 web 应 用 开 发 2) 页 面 尽 可 能 静 态 化 以 减 少 动 态 数 据 访 问, 如 果 是 资 讯 类 的 网 站 可 以 考 虑 采 用 第 三 方 开 源 的 CMS 系 统 来 生 成 静 态 的 内 容 页 面 3) 采 用 Oscache 实 现 页 面 缓 存, 采 用 Memcached 实 现 数 据 缓 存 4) 采 用 独 立 的 图 片 服 务 器 集 群 来 实 现 图 片 资 源 的 存 储 及 WEB 请 求 2.1.3 数 据 存 储 的 设 计 思 路 1) 数 据 库 拆 分, 把 生 产 数 据 库 和 查 询 数 据 库 分 离, 对 生 产 数 据 库 采 用 RAC 实 现 数 据 库 的 集 群 2) 采 用 高 效 的 网 络 文 件 共 享 策 略, 采 用 图 片 服 务 器 来 实 现 页 面 的 图 片 存 储 2.1.4 不 同 网 络 用 户 访 问 考 虑 1) 通 过 引 入 CDN 来 解 决 不 同 网 络 服 务 商 的 接 入 速 度 问 题, 一 般 只 能 解 决 静 态 页 面 的 访 问 问 题 2) 在 不 同 运 营 商 机 房 部 署 服 务 器, 通 过 镜 像 技 术 来 实 现 不 同 网 络 服 务 商 的 接 入 速 度 问 题
2.2 总 体 架 构 2.2.1 网 站 的 系 统 分 层 架 构 硬 件 四 层 交 换 负 载 均 衡 器 软 件 四 层 交 换 L V S 负 载 均 衡 反 向 代 理 软 件 ( 数 据 缓 存 ) Nginx proxy Squid cache S q u id Nginx cache W E B 服 务 (A A pache+tomcat 负 载 均 衡 ) A pache T omat... T omat W E B 服 务 器 架 构 M V C 应 用 架 构 应 用 级 缓 存 M odel 数 据 持 久 层 (ibatis ibatis) Control 页 面 缓 存 (OSC OSCache) V ie w 数 据 缓 存 (M Memcached) 数 据 存 储 文 共 件 享 N F S H D F S 数 据 库 生 产 数 据 库 查 询 数 据 库
2.2.2 网 站 的 物 理 架 构 Internet 用 户 浏 览 页 面 负 载 均 衡 器 1... 服 务 器 2 代 理 服 务 器 集 群 (N N gin x) 服 务 器 1 服 务 器 2 服 务 器 3 服 务 器 n... 服 务 器 2 服 务 器 1 服 务 器 2 服 务 器 1 服 务 器 2 服 务 器 1 服 务 器 2 服 务 器 1 服 务 器 n 图 片 服 务 器 集 群 W e b 服 务 器 集 群 A W e b 服 务 器 集 群 B S q u id 服 务 器 集 群
2.2.3 网 站 的 开 发 架 构 通 讯 层 消 中 息 心 业 务 层 持 久 层 数 据 层 S M S M M S WAP P U S H 短 信 群 发 器 彩 信 群 发 器 消 息 中 心 W E B 容 器 后 台 支 撑 模 块 A pache W E B 服 务 器 基 于 struts 的 M V C 框 架 V ie w Control T om at Model 页 面 缓 存 (Memcached) H T M L 静 态 化 模 块 请 求 数 据... T om at 统 计 支 撑 模 块 O R M ib a tis D B 连 接 池 C3p0 业 务 支 撑 模 块 I/O J D B C 数 据 存 储 文 件 存 储 H D F S 数 据 库 生 产 数 据 库 (R R A C) 生 产 数 据 库 (R R A C ) 查 询 数 据 库
2.2.4 网 络 拓 扑 结 构 Internet 主 防 火 墙 备 防 火 墙 主 交 换 机 V R R P 备 交 换 机 负 载 均 衡 器 1 负 载 均 衡 器 2... 服 务 器 2 服 务 器 2 服 务 器 2... 服 务 器 2 服 务 器 2 服 务 器 1 服 务 器 n 服 务 器 1 服 务 器 n 服 务 器 1 服 务 器 n 服 务 器 1 服 务 器 n 服 务 器 1 服 务 器 n 服 务 器 1 服 务 器 2 代 理 服 务 器 集 群 (N N ginx x) 网 站 服 务 器 集 群 图 片 服 务 器 集 群 应 用 服 务 器 集 群 生 产 D B 服 务 器 集 群 查 询 D B 服 务 器 组 管 理 终 端 光 纤 交 换 机 光 纤 交 换 机 磁 盘 阵 列 柜 磁 盘 阵 列 柜 备 注 : 1) 采 用 双 防 火 墙 双 交 换 机 做 网 络 冗 余, 保 障 平 台 服 务 采 用 双 防 火 墙 通 知 接 通 2 线 路 互 联 网 接 入, 设 备 之 间 采 用 VRRP 协 议, 在 任 何 一 个 防 火 墙 互 联 网 发 生 故 障 后 均 可 自 动 将 流 量 切 换 到 另 一 端, 保 证 网 站 的 正 运 行, 设 备 或 网 络 恢 复 后, 自 动 恢 复 采 用 双 千 兆 交 换 机 分 别 接 在 2 台 防 火 墙 上, 当 某 台 设 备 或 者 网 络 链 路 发 生 故 障 后, 好 设 备 自 动 接 管 已 坏 设 备 的 工 作, 不 影 响 网 站 的 整 体 运 行, 根 据 业 务 及 真 实 服 务 器 的 数 量, 交 换 机 可 以 随 时 增 加 2) 采 用 硬 件 设 备 负 载 均 衡 器, 实 现 网 络 流 量 的 负 载 均 衡 使 用 硬 件 设 备 负 载 均 衡 器, 将 网 络 流 量 均 衡 的 分 担 到 WEB 服 务 器 集 群 各 节 点 服 务 器, 保 障 平 台 服 务 器 资 源 均 衡 的 使 用 3) 采 用 代 理 服 务 器, 实 现 软 件 级 的 网 络 负 载 均 衡 4) 数 据 库 服 务 器 分 离 成 生 产 数 据 库 集 群 和 查 询 数 据 库 集 群, 实 现 生 产 读 写 与 后 台 查 询 统 计 进 行 分 离, 同 时 生 产 数 据 库 采 用 rac 技 术 进 行
2.3 架 构 涉 及 技 术 的 详 解 2.3.1 负 载 均 衡 1. 基 于 DNS 的 负 载 均 衡 -- 一 个 域 名 绑 定 多 个 IP DNS 负 载 均 衡 技 术 是 最 早 的 负 载 均 衡 解 决 方 案, 它 是 通 过 DNS 服 务 中 的 随 机 名 字 解 析 来 实 现 的, 在 DNS 服 务 器 中, 可 以 为 多 个 不 同 的 地 址 配 置 同 一 个 名 字, 而 最 终 查 询 这 个 名 字 的 客 户 机 将 在 解 析 这 个 名 字 时 得 到 其 中 的 一 个 地 址 因 此, 对 于 同 一 个 名 字, 不 同 的 客 户 机 会 得 到 不 同 的 地 址, 它 们 也 就 访 问 不 同 地 址 上 的 Web 服 务 器, 从 而 达 到 负 载 均 衡 的 目 的 这 种 技 术 的 优 点 是, 实 现 简 单 实 施 容 易 成 本 低 适 用 于 大 多 数 TCP/IP 应 用 ; 但 是, 其 缺 点 也 非 常 明 显, 首 先 这 种 方 案 不 是 真 正 意 义 上 的 负 载 均 衡,DNS 服 务 器 将 Http 请 求 平 均 地 分 配 到 后 台 的 Web 服 务 器 上, 而 不 考 虑 每 个 Web 服 务 器 当 前 的 负 载 情 况 ; 如 果 后 台 的 Web 服 务 器 的 配 置 和 处 理 能 力 不 同, 最 慢 的 Web 服 务 器 将 成 为 系 统 的 瓶 颈, 处 理 能 力 强 的 服 务 器 不 能 充 分 发 挥 作 用 ; 其 次 未 考 虑 容 错, 如 果 后 台 的 某 台 Web 服 务 器 出 现 故 障,DNS 服 务 器 仍 然 会 把 DNS 请 求 分 配 到 这 台 故 障 服 务 器 上, 导 致 不 能 响 应 客 户 端 最 后 一 点 是 致 命 的, 有 可 能 造 成 相 当 一 部 分 客 户 不 能 享 受 Web 服 务, 并 且 由 于 DNS 缓 存 的 原 因, 所 造 成 的 后 果 要 持 续 相 当 长 一 段 时 间 ( 一 般 DNS 的 刷 新 周 期 约 为 24 小 时 ) 所 以 在 国 外 最 新 的 建 设 中 心 Web 站 点 方 案 中, 已 经 很 少 采 用 这 种 方 案 了 2. 通 过 硬 件 四 层 交 换 实 现 负 载 均 衡 在 硬 件 四 层 交 换 产 品 领 域, 有 一 些 知 名 的 产 品 可 以 选 择, 比 如 Alteon F5 等, 这 些 产 品 很 昂 贵, 但 是 物 有 所 值, 能 够 提 供 非 常 优 秀 的 性 能 和 很 灵 活 的 管 理 能 力 Yahoo 中 国 当 初 接 近 2000 台 服 务 器 使 用 了 三 四 台 Alteon 就 搞 定 了 3. 通 过 软 件 四 层 交 换 实 现 负 载 均 衡 软 件 四 层 交 换 我 们 可 以 使 用 Linux 上 常 用 的 LVS 来 解 决,LVS 就 是 Linux Virtual Server, 他 提 供 了 基 于 心 跳 线 heartbeat 的 实 时 灾 难 应 对 解 决 方 案, 提 高 系 统 的 鲁 棒 性, 同 时 可 供 了 灵 活 的 虚 拟 VIP 配 置 和 管 理 功 能, 可 以 同 时 满 足 多 种 应 用 需 求, 这 对 于 分 布 式 的 系 统 来 说 必 不 可 少 一 个 典 型 的 使 用 负 载 均 衡 的 策 略 就 是, 在 软 件 或 者 硬 件 四 层 交 换 的 基 础 上 搭 建 squid 集 群, 这 种 思 路 在 很 多 大 型 网 站 包 括 搜 索 引 擎 上 被 采 用, 这 样 的 架 构 低 成 本 高 性 能 还 有 很 强 的 扩 张 性 4. 通 过 反 向 代 理 服 务 器 实 现 负 载 均 衡 反 向 代 理 服 务 器 又 称 为 WEB 加 速 服 务 器, 它 位 于 WEB 服 务 器 的 前 端, 充 当 WEB 服 务 器 的 内 容 缓 存 器, 反 向 代 理 服 务 器 是 针 对 WEB 服 务 器 设 置 的, 后 台 WEB 服 务 器 对 互 联 网 用 户 是 透 明 的, 用 户 只 能 看 到 反 向 代 理 服 务 器 的 地 址, 不 清 楚 后 台 WEB 服 务 器 是 如 何 组 织 架 构 的 当 互 联 网 用 户 请 求 WEB 服 务 时,DNS 将 请 求 的 域 名 解 析 为 反 向 代 理 服 务 器 的 IP 地 址, 这 样 URL 请 求 将 被 发 送 到 反 向 代 理 服 务 器, 由 反 向 代 理 服 务 器 负 责 处 理 用 户 的 请 求 与 应 答 与 后 台 WEB 服 务 器 交 互 利 用
反 向 代 理 服 务 器 减 轻 了 后 台 WEB 服 务 器 的 负 载, 提 高 了 访 问 速 度, 同 时 避 免 了 因 用 户 直 接 与 WEB 服 务 器 通 信 带 来 的 安 全 隐 患 目 前 有 许 多 反 向 代 理 软 件, 比 较 有 名 的 有 Nginx 和 Squid Nginx 是 由 Igor Sysoev 为 俄 罗 斯 访 问 量 第 二 的 Rambler.ru 站 点 开 发 的, 是 一 个 高 性 能 的 HTTP 和 反 向 代 理 服 务 器, 也 是 一 个 IMAP/POP3/SMTP 代 理 服 务 器 Squid 是 由 美 国 政 府 大 力 资 助 的 一 项 研 究 计 划, 其 目 的 为 解 决 网 络 带 宽 不 足 的 问 题, 支 持 HTTP, HTTPS,FTP 等 多 种 协 议, 是 现 在 Unix 系 统 上 使 用 最 多 功 能 也 最 完 整 的 一 套 软 体 1) Squid Squid 是 一 个 开 源 的 软 件, 利 用 它 的 反 向 代 理 技 术 可 以 提 高 网 站 系 统 的 访 问 速 度, 下 面 将 重 点 介 绍 Squid 反 向 代 理 的 实 现 原 理 和 在 提 高 网 站 性 能 方 面 的 应 用 Squid 反 向 代 理 服 务 器 位 于 本 地 WEB 服 务 器 和 Internet 之 间, 组 织 架 构 如 下 图 : 客 户 端 请 求 访 问 WEB 服 务 时,DNS 将 访 问 的 域 名 解 析 为 Squid 反 向 代 理 服 务 器 的 IP 地 址, 这 样 客 户 端 的 URL 请 求 将 被 发 送 到 反 向 代 理 服 务 器 如 果 Squid 反 向 代 理 服 务 器 中 缓 存 了 该 请 求
的 资 源, 则 将 该 请 求 的 资 源 直 接 返 回 给 客 户 端, 否 则 反 向 代 理 服 务 器 将 向 后 台 的 WEB 服 务 器 请 求 资 源, 然 后 将 请 求 的 应 答 返 回 给 客 户 端, 同 时 也 将 该 应 答 缓 存 在 本 地, 供 下 一 个 请 求 者 使 用 Squid 反 向 代 理 一 般 只 缓 存 可 缓 冲 的 数 据 ( 比 如 html 网 页 和 图 片 等 ), 而 一 些 CGI 脚 本 程 序 或 者 ASP JSP 之 类 的 动 态 程 序 默 认 不 缓 存 它 根 据 从 WEB 服 务 器 返 回 的 HTTP 头 标 记 来 缓 冲 静 态 页 面, 有 四 个 最 重 要 HTTP 头 标 记 : Last-Modified: 告 诉 反 向 代 理 页 面 什 么 时 间 被 修 改 Expires: 告 诉 反 向 代 理 页 面 什 么 时 间 应 该 从 缓 冲 区 中 删 除 Cache-Control: 告 诉 反 向 代 理 页 面 是 否 应 该 被 缓 冲 Pragma: 用 来 包 含 实 现 特 定 的 指 令, 最 常 用 的 是 Pragma:no-cache 注 :DNS 的 轮 询 机 制 将 某 一 个 域 名 解 析 为 多 个 IP 地 址 2) Nginx Nginx ( engine x ) 是 俄 罗 斯 人 Igor Sysoev( 塞 索 耶 夫 ) 编 写 的 一 款 高 性 能 的 HTTP 和 反 向 代 理 服 务 器 Nginx 已 经 在 俄 罗 斯 最 大 的 门 户 网 站 Rambler Media(www.rambler.ru) 上 运 行 了 4 年 时 间, 同 时 俄 罗 斯 超 过 20% 的 虚 拟 主 机 平 台 采 用 Nginx 作 为 反 向 代 理 服 务 器 在 国 内, 已 经 有 新 浪 博 客 新 浪 播 客 搜 狐 通 行 证 网 易 新 闻 网 易 博 客 金 山 逍 遥 网 金 山 爱 词 霸 校 内 网 YUPOO 相 册 豆 瓣 迅 雷 看 看 等 多 家 网 站 频 道 使 用 Nginx 服 务 器 Nginx 特 点 如 下 : 1) 工 作 在 OSI 模 型 的 第 7 层 ( 应 用 层 ) 2) 高 并 发 连 接 官 方 测 试 能 够 支 撑 5 并 发 连 接, 在 实 际 生 产 环 境 中 跑 到 2~3 并 发 连 接 数 3) 内 存 消 耗 少 在 3 并 发 连 接 下, 开 启 的 10 个 Nginx 进 程 才 消 耗 150M 内 存 (15M*10=150M) 4) 配 置 文 件 非 常 简 单 风 格 跟 程 序 一 样 通 俗 易 懂 5) 成 本 低 廉 Nginx 为 开 源 软 件, 可 以 免 费 使 用 而 购 买 F5 BIG-IP NetScaler 等 硬 件 负 载 均 衡 交 换 机 则 需 要 十 多 至 几 十 人 民 币 6) 支 持 Rewrite 重 写 规 则 能 够 根 据 域 名 URL 的 不 同, 将 HTTP 请 求 分 到 不 同 的 后 端 服 务 器 群 组 7) 内 置 的 健 康 检 查 功 能 如 果 Nginx Proxy 后 端 的 某 台 Web 服 务 器 宕 机 了, 不 会 影 响 前 端 访 问 8) 节 省 带 宽 支 持 GZIP 压 缩, 可 以 添 加 浏 览 器 本 地 缓 存 的 Header 头 9) 稳 定 性 高 用 于 反 向 代 理, 宕 机 的 概 率 微 乎 其 微 3) Nginx+squid 页 面 缓 存 来 实 现 反 向 代 理 负 载 均 衡 通 过 Nginx 反 向 代 理 和 squid 缓 存 实 现 动 静 分 离 的 架 构 图 如 下 所 示 :
5. Apache +tomcat 集 群 实 现 负 载 均 衡 使 用 apache 和 多 个 tomcat 配 置 一 个 可 以 应 用 的 web 网 站, 用 Apache 进 行 分 流, 把 请 求 按 照 权 重 以 及 当 时 负 荷 分 tomcat1,tomcat2... 去 处 理, 要 达 到 以 下 要 求 : 1) Apache 做 为 HttpServer, 通 过 mod_jk 连 接 器 连 接 多 个 tomcat 应 用 实 例, 并 进 行 负 载 均 衡
2) 同 时 还 要 配 置 session 复 制, 也 就 是 说 其 中 任 何 一 个 tomcat 的 添 加 的 session, 是 要 同 步 复 制 到 其 它 tomcat, 集 群 内 的 tomcat 都 有 相 同 的 session, 并 为 系 统 ( 包 括 Apache 和 tomcat) 设 定 Session 超 时 时 间 2.3.2 缓 存 1. 系 统 架 构 方 面 的 缓 存 1) Squid 缓 存 架 构 方 面 使 用 Squid 进 行 缓 存 注 :SQUID 使 用 了 LM 算 法,LM 就 是 页 面 Header 里 时 间 (Date) 和 Last-Modified 时 间 的 差 Date 一 般 是 Squid 从 后 面 取 页 面 的 时 间,Last-Modified 一 般 是 页 面 生 成 时 间 2) Nginx 的 缓 存 功 能 Nginx 从 0.7.48 版 本 开 始, 支 持 了 类 似 Squid 的 缓 存 功 能 ; 缓 存 把 URL 及 相 关 组 合 当 作 Key, 用 md5 编 码 哈 希 后 保 存 ; Nginx 的 Web 缓 存 服 务 只 能 为 指 定 URL 或 状 态 码 设 置 过 期 时 间, 不 支 持 类 似 Squid 的 PURGE 指 令, 手 动 清 除 指 定 缓 存 页 面 ; 采 用 MMAP 实 现, 设 置 的 缓 存 区 大 小 不 能 超 过 物 理 内 存 +SWEB 的 值 3) 基 于 memcached 的 缓 存 nginx 对 memcached 有 所 支 持, 但 是 功 能 并 不 是 特 别 之 强, 性 能 上 还 是 非 常 之 优 秀 location /mem/ { if ( $uri ~ "^/mem/([0-9a-za-z_]*)$" ) { set $memcached_key "$1"; memcached_pass 192.168.1.2:11211; } expires 70; } 这 个 配 置 会 将 http://sudone.com/mem/abc 指 明 到 memcached 的 abc 这 个 key 去 取 数 据 Nginx 目 前 没 有 写 入 memcached 的 任 何 机 制, 所 以 要 往 memcached 里 写 入 数 据 得 用 后 台 的 动 态 语 言 完 成, 可 以 利 用 404 定 向 到 后 端 去 写 入 数 据 Nginx 传 统 缓 存 的 缺 点 也 是 它 和 squid 等 缓 存 软 件 的 不 同 之 特 色, 所 以 也 可 看 作 其 优 点 在 生 产 应 用 中 它 常 常 用 作 和 squid 的 搭 档,squid 对 于 带? 的 链 接 往 往 无 法 阻 挡, 而 nginx 能 将 其 访 问 拦 住, 例 如 :http://sudone.com/? 和 http://sudone.com/ 在 squid 上 会 被 当 做 两 个 链 接, 所 以 会 造 成 两 次 穿 透 ; 而 nginx 只 会 保 存 一 次, 无 论 链 接 变 成 http://sudone.com/?1 还 是 http://sudone.com/?123, 均 不 能 透 过 nginx 缓 存, 从 而 有 效 地 保 护 了 后 端 主 机
nginx 会 非 常 老 实 地 将 链 接 形 式 保 存 到 文 件 系 统 中, 这 样 对 于 一 个 链 接, 可 以 很 方 便 地 查 阅 它 在 缓 存 机 器 上 的 缓 存 状 态 和 内 容, 也 可 以 很 方 便 地 和 别 的 文 件 管 理 器 如 rsync 等 配 合 使 用, 它 完 完 全 全 就 是 一 个 文 件 系 统 结 构 2. 应 用 程 序 方 面 的 缓 存 1) OSCache OSCache 由 OpenSymphony 设 计, 它 是 一 种 开 创 性 的 JSP 定 制 标 记 应 用, 提 供 了 在 现 有 JSP 页 面 之 内 实 现 快 速 内 存 缓 冲 的 功 能,OSCache 是 个 一 个 广 泛 采 用 的 高 性 能 的 J2EE 缓 存 框 架, OSCache 能 用 于 任 何 Java 应 用 程 序 的 普 通 的 缓 存 解 决 方 案 OSCache 有 以 下 特 点 : 缓 存 任 何 对 象, 你 可 以 不 受 限 制 的 缓 存 部 分 jsp 页 面 或 HTTP 请 求, 任 何 java 对 象 都 可 以 缓 存 拥 有 全 面 的 API--OSCache API 给 你 全 面 的 程 序 来 控 制 所 有 的 OSCache 特 性 永 久 缓 存 -- 缓 存 能 随 意 的 写 入 硬 盘, 因 此 允 许 昂 贵 的 创 建 (expensive-to-create) 数 据 来 保 持 缓 存, 甚 至 能 让 应 用 重 启 支 持 集 群 -- 集 群 缓 存 数 据 能 被 单 个 的 进 行 参 数 配 置, 不 需 要 修 改 代 码 缓 存 记 录 的 过 期 -- 你 可 以 有 最 大 限 度 的 控 制 缓 存 对 象 的 过 期, 包 括 可 插 入 式 的 刷 新 策 略 ( 如 果 默 认 性 能 不 需 要 时 ) OSCache 是 当 前 运 用 最 广 的 缓 存 方 案,JBoss,Hibernate,Spring 等 都 对 其 有 支 持 OSCache 的 特 点 : 1) 缓 存 任 何 对 象 : 你 可 以 不 受 限 制 的 缓 存 部 分 jsp 页 面 或 HTTP 请 求, 任 何 java 对 象 都 可 以 缓 存 2) 拥 有 全 面 的 API:OSCache API 允 许 你 通 过 编 程 的 方 式 来 控 制 所 有 的 OSCache 特 性 3) 永 久 缓 存 : 缓 存 能 被 配 置 写 入 硬 盘, 因 此 允 许 在 应 用 服 务 器 的 多 次 生 命 周 期 间 缓 存 创 建 开 销 昂 贵 的 数 据 4) 支 持 集 群 : 集 群 缓 存 数 据 能 被 单 个 的 进 行 参 数 配 置, 不 需 要 修 改 代 码 5) 缓 存 过 期 : 你 可 以 有 最 大 限 度 的 控 制 缓 存 对 象 的 过 期, 包 括 可 插 入 式 的 刷 新 策 略 ( 如 果 默 认 性 能 不 能 满 足 需 要 时 ) 2) Memcached memcached 是 高 性 能 的 分 布 式 内 存 缓 存 服 务 器 一 般 的 使 用 目 的 是, 通 过 缓 存 数 据 库 查 询 结 果, 减 少 数 据 库 访 问 次 数, 以 提 高 动 态 Web 应 用 的 速 度 提 高 可 扩 展 性 Memcached 是 以 Key/Value 的 形 式 单 个 对 象 缓 存
3) 自 主 开 发 的 内 存 数 据 缓 存 服 务 a) 独 立 进 程 方 式 的 缓 存 服 务 对 于 一 些 常 用 的 动 态 数 据 通 过 开 发 程 序 服 务 缓 存 在 内 存 中, 提 供 给 其 他 子 系 统 调 用, 如 下 面 的 数 据 就 可 以 通 过 这 样 方 式 进 行 缓 存 1) 用 户 基 本 信 息 及 状 态 的 信 息 缓 冲 2) 列 表 缓 存, 就 像 论 坛 里 帖 子 的 列 表 3) 记 录 条 数 的 缓 存, 比 如 一 个 论 坛 板 块 里 有 多 少 个 帖 子, 这 样 才 方 便 实 现 分 页 4) 复 杂 一 点 的 group,sum,count 查 询, 比 如 积 分 的 分 类 排 名 b) 集 成 在 WEB 应 用 中 的 内 存 缓 存 在 web 应 用 中 对 于 热 点 的 功 能, 考 虑 使 用 完 全 装 载 到 内 存, 保 证 绝 对 的 响 应 速 度, 对 于 需 要 频 繁 访 问 的 热 点 数 据, 采 用 集 中 缓 存 ( 多 个 可 以 采 用 负 载 均 衡 ), 减 轻 数 据 库 的 压 力, 比 如 : 很 多 配 置 信 息, 操 作 员 信 息 等 等 2.3.3 页 面 静 态 化 静 态 的 HTML 页 面 严 格 地 由 标 准 的 HTML 标 示 语 言 构 成, 并 不 需 要 服 务 器 端 即 时 运 算 生 成 这 意 味 着, 对 一 个 静 态 HTML 文 档 发 出 访 问 请 求 后, 服 务 器 端 只 是 简 单 地 将 该 文 档 传 输 到 客 户 端 从 服 务 器 运 行 的 那 个 时 间 片 来 看, 这 个 传 输 过 程 仅 仅 占 用 了 很 小 的 CPU 资 源 页 面 静 态 化 就 是 采 用 效 率 最 高 消 耗 最 小 的 纯 静 态 化 的 html 页 面 来 替 换 动 态 页 面 我 们 尽 可 能 使 我 们 的 网 站 上 的 页 面 采 用 静 态 页 面 来 实 现, 这 个 最 简 单 的 方 法 其 实 也 是 最 有 效 的 方 法
同 时 采 用 第 三 方 开 源 的 CMS 系 统 来 实 现 网 站 内 容 的 管 理 对 于 大 量 内 容 并 且 频 繁 更 新 的 网 站, 我 们 无 法 全 部 手 动 去 挨 个 实 现 页 面 静 态 化, 所 以 我 们 需 要 引 入 常 见 的 信 息 发 布 系 统 (CMS), 信 息 发 布 系 统 (CMS) 可 以 实 现 最 简 单 的 信 息 录 入 自 动 生 成 静 态 页 面, 对 于 一 个 大 型 网 站 来 说, 拥 有 一 套 高 效 可 管 理 的 CMS 是 必 不 可 少 的 同 时,HTML 静 态 化 也 是 某 些 缓 存 策 略 使 用 的 手 段, 对 于 系 统 中 频 繁 使 用 数 据 库 查 询 但 是 内 容 更 新 很 小 的 应 用, 可 以 考 虑 使 用 HTML 静 态 化 来 实 现, 比 如 论 坛 中 论 坛 的 公 用 设 置 信 息, 这 些 信 息 目 前 的 主 流 论 坛 都 可 以 进 行 后 台 管 理 并 且 存 储 再 数 据 库 中, 这 些 信 息 其 实 大 量 被 前 台 程 序 调 用, 但 是 更 新 频 率 很 小, 可 以 考 虑 将 这 部 分 内 容 进 行 后 台 更 新 的 时 候 进 行 静 态 化, 这 样 避 免 了 大 量 的 数 据 库 访 问 请 求 在 进 行 html 静 态 化 的 时 候 还 可 以 使 用 一 种 折 中 的 方 法, 就 是 前 端 继 续 使 用 动 态 实 现, 在 一 定 的 策 略 下 通 过 后 台 模 块 进 行 定 时 把 动 态 网 页 生 成 静 态 页 面, 并 定 时 判 断 调 用, 这 个 能 实 现 很 多 灵 活 性 的 操 作 为 了 提 高 静 态 HTML 的 访 问 效 率, 主 要 可 以 对 以 下 几 个 方 面 进 行 优 化 : 网 络 带 宽 磁 盘 I/O 以 及 cache( 高 速 缓 冲 存 储 器 ) 2.3.4 数 据 库 配 置 及 优 化 1. 数 据 库 集 群 对 生 产 数 据 库 采 用 RAC 实 现 数 据 库 的 集 群 2. 数 据 库 及 表 的 散 列 把 生 产 数 据 库 和 查 询 数 据 库 进 行 分 离, 针 对 系 统 业 务 数 据 的 特 点, 把 大 的 表 进 行 拆 分, 对 于 访 问 较 多 的 表 采 用 分 区 表 使 用 读 / 写 数 据 库 分 离, 随 着 系 统 变 得 越 来 越 庞 大, 特 别 是 当 它 们 拥 有 很 差 的 SQL 时, 一 台 数 据 库 服 务 器 通 常 不 足 以 处 理 负 载 但 是 多 个 数 据 库 意 味 着 重 复, 除 非 你 对 数 据 进 行 了 分 离 更 一 般 地, 这 意 味 着 建 立 主 / 从 副 本 系 统, 其 中 程 序 会 对 主 库 编 写 所 有 的 Update Insert 和 Delete 变 更 语 句, 而 所 有 Select 的 数 据 都 读 取 自 从 数 据 库 ( 或 者 多 个 从 数 据 库 ) 尽 管 概 念 上 很 简 单, 但 是 想 要 合 理 精 确 地 实 现 并 不 容 易, 这 可 能 需 要 大 量 的 代 码 工 作 因 此, 即 便 在 开 始 时 使 用 同 一 台 数 据 库 服 务 器, 也 要 尽 早 计 划 在 PHP 中 使 用 分 离 的 DB 连 接 来 进 行 读 写 操 作 如 果 正 确 地 完 成 该 项 工 作, 那 么 系 统 就 可 以 扩 展 到 2 台 3 台 甚 至 12 台 服 务 器, 并 具 备 高 可 用 性 和 稳 定 性 3. 拥 有 良 好 的 DB 配 置 和 备 份 很 多 公 司 都 没 有 良 好 的 备 份 机 制, 也 不 知 道 如 何 恰 当 地 完 成 这 项 工 作 只 有 imp 是 不 够 的, 还 需 要 进 行 热 备 份, 从 而 得 到 超 快 的 速 度 和 超 高 的 可 靠 性
另 外, 在 将 所 有 备 份 文 件 从 服 务 器 上 转 移 出 来 之 前 要 进 行 压 缩 和 加 密 另 外 还 要 确 保 拥 有 设 计 合 理 的 有 用 的 关 于 安 全 性 能 和 稳 定 性 问 题 的 设 定, 包 括 防 止 数 据 败 坏, 其 中 很 多 设 定 都 是 非 常 重 要 的 2.3.5 文 件 存 储 1. 文 件 共 享 1) HDFS(GFS) HDFS 是 Apache Hadoop 项 目 中 的 一 个 分 布 式 文 件 系 统 实 现, 基 于 Google 于 2003 年 10 月 发 表 的 Google File System(GFS) 论 文 特 性 1) 硬 件 要 求 低 2) 高 容 错 性 3) 易 可 扩 展 4) 配 置 简 单 5) 超 大 文 件 HDFS 采 用 master/slave 架 构 一 个 HDFS 集 群 是 由 一 个 Namenode 和 一 定 数 目 的 Datanodes 组 成
2) NFS 与 GFS 比 较 首 先 从 它 们 的 功 能 上 进 行 分 析 NFS 即 网 络 文 件 系 统, 是 由 SUN 公 司 开 发 的 它 是 FreeBSD 支 持 的 文 件 系 统 中 的 一 种, 允 许 一 个 系 统 在 网 络 上 与 它 人 共 享 目 录 和 文 件 通 过 使 用 NFS, 用 户 和 程 序 访 问 远 端 系 统 上 的 文 件 就 像 访 问 本 地 文 件 一 样 而 GFS 是 Google 为 了 满 足 本 公 司 迅 速 增 长 的 数 据 处 理 要 求 而 开 发 的 文 件 系 统 GFS 是 一 个 可 扩 展 的 分 布 式 文 件 系 统, 用 于 大 型 的 分 布 式 的 对 大 量 数 据 进 行 访 问 的 应 用 它 是 针 对 Google 的 计 算 机 集 群 进 行 设 计 的, 专 门 是 为 Google 页 面 搜 索 的 存 储 进 行 了 优 化 所 以 从 功 能 上 看, 它 们 两 者 是 完 全 不 同 的 概 念 其 次 从 结 构 上 比 较,NFS 至 少 包 括 两 个 主 要 部 分 : 一 台 服 务 器, 以 及 至 少 一 台 客 户 机 被 共 享 的 目 录 和 文 件 存 放 在 服 务 器 上, 客 户 机 远 程 地 访 问 保 存 在 服 务 器 上 的 数 据 GFS 则 由 一 台 Master( 通 常 有 几 台 备 份 ) 和 若 干 台 TrunkServer 构 成 GFS 中 文 件 备 份 成 固 定 大 小 的 Trunk 分 别 存 储 在 不 同 的 TrunkServer 上, 每 个 Trunk 有 多 份 ( 比 如 3) 拷 贝, 也 存 储 在 不 同 的 TrunkServer 上 Master 负 责 维 护 GFS 中 的 Metadata, 即 文 件 名 及 其 Trunk 信 息 客 户 端 先 从 Master 上 得 到 文 件 的 Metadata, 根 据 要 读 取 的 数 据 在 文 件 中 的 位 置 与 相 应 的 TrunkServer 通 信, 获 取 文 件 数 据 再 从 跨 平 台 性 上,NFS 的 基 本 原 则 是 容 许 不 同 的 客 户 端 及 服 务 端 通 过 一 组 RPCs 分 享 相 同 的 文 件 系 统, 它 是 独 立 于 操 作 系 统 的, 容 许 不 同 的 操 作 系 统 共 同 地 进 行 文 件 的 共 享 而 GFS 则 没 有 这 一 特 点, 文 件 只 能 被 集 群 系 统 中 的 PC 所 访 问, 而 且 这 些 PC 的 操 作 系 统 一 般 是 Linux 最 后 从 规 模 上 比 较,HDFS 只 应 用 在 大 批 量 的 数 据 共 享 上 目 前 Google 拥 有 超 过 200 个 的 GFS 集 群, 其 中 有 些 集 群 的 PC 数 量 超 过 5000 台 集 群 的 数 据 存 储 规 模 可 以 达 到 5 个 PB, 并 且 集 群 中 的 数 据 读 写 吞 吐 量 可 达 到 每 40G 而 NFS 一 般 没 有 这 么 巨 大 的 规 模 2. 文 件 的 多 服 务 器 自 动 同 步 使 用 Linux 2.6 内 核 的 inotify 监 控 Linux 文 件 系 统 事 件 利 用 开 源 的 lsync 监 听 某 一 目 录, 如 果 目 录 内 文 件 发 生 增 删 改, 利 用 Rsync 协 议 自 动 同 步 到 多 台 服 务 器 3. 图 片 服 务 器 分 离 特 别 是 如 果 程 序 与 图 片 都 放 在 同 一 个 APAHCE 的 服 务 器 下, 每 一 个 图 片 的 请 求 都 有 可 能 导 致 一 个 HTTPD 进 程 的 调 用 使 用 独 立 的 图 片 服 务 器 不 但 可 以 避 免 以 上 这 个 情 况, 更 可 以 对 不 同 的 使 用 性 质 的 图 片 设 置 不 同 的 过 期 时 间, 以 便 同 一 个 用 户 在 不 同 页 面 访 问 相 同 图 片 时 不 会 再 次 从 服 务 器 ( 基 于 是 缓 存 服 务 器 ) 取 数 据, 不 但 快 速, 而 且 还 省 了 带 宽 还 有 就 是, 对 于 缓 存 的 时 间 上, 亦 可 以 做 独 立 的 调 节
2.3.6 网 络 问 题 解 决 方 案 你 不 可 能 要 求 所 有 的 使 用 人 员, 都 和 你 的 服 务 器 在 一 个 运 营 商 的 网 络 内, 而 不 同 网 络 之 间 访 问 速 度 会 很 慢, 我 们 可 以 采 用 镜 像 网 站 和 引 入 CDN 来 解 决 这 一 问 题 用 户 动 态 内 容 ( 社 区 投 票 调 查 搜 索 点 评 视 频 ) 静 态 内 容 ( 静 态 网 页 图 片 ) 智 能 D N S 解 析 C D N 电 用 信 户 其 用 他 户 网 用 通 户 服 务 器 1 服 务 器 n 服 务 器 1 服 务 器 n 服 务 器 1 服 务 器 n 电 信 机 房 多 线 机 房 网 通 机 房 1. 智 能 DNS 解 析 我 们 可 以 在 不 同 的 网 络 运 营 商 部 署 web 服 务 器, 通 过 linux 上 的 rsync 工 具 自 动 同 步 到 不 同 网 络 接 入 商 的 web 服 务 器 上, 以 作 为 主 站 的 镜 像 然 后 通 过 配 置 智 能 DNS 解 析 来 引 导 不 同 网 络 的 访 问 用 户 到 对 应 的 网 络 运 营 商 的 web 服 务 器 2. CDN 如 果 有 足 够 的 投 资, 也 可 以 采 用 CDN( 内 容 分 发 网 ), 把 静 态 内 容 ( 静 态 页 面 和 图 片 ) 进 行 CDN 缓 存, 以 减 轻 服 务 器 压 力 CDN 的 全 称 是 Content Delivery Network, 即 内 容 分 发 网 络 它 采 取 了 分 布 式 网 络 缓 存 结 构 ( 即 国 际 上 流 行 的 web cache 技 术 ), 其 目 的 是 通 过 在 现 有 的 Internet 中 增 加 一 层 新 的 网 络 架 构, 将 网 站 的 内 容 发 布 到 最 接 近 用 户 的 网 络 " 边 缘 ", 使 用 户 可 以 就 近 取 得 所 需 的 内 容, 解 决 Internet 网 络 拥 挤 的 状 况, 提 高 用 户 访 问 网 站 的 响 应 速 度 从 技 术 上 全 面 解 决 由 于 网 络 带 宽 小 用 户 访 问 量 大 网 点 分 布 不 均 等 原 因 所 造 成 的 用 户 访 问 网 站 响 应 速 度 慢 的 问 题 ( 也 就 是 一 个 服 务 器 的 内 容, 平 均 分 部 到 多 个 服 务 器 上, 服 务 器 智 能 识 别, 让 用 户 获 取 离 用 户 最 近 的 服 务 器, 提 高 速 度
目 前, 国 内 访 问 量 较 高 的 大 型 网 站 如 新 浪 网 易 等, 均 使 用 CDN 网 络 加 速 技 术, 虽 然 网 站 的 访 问 巨 大, 但 无 论 在 什 么 地 方 访 问 都 会 感 觉 速 度 很 快 而 一 般 的 网 站 如 果 服 务 器 在 网 通, 电 信 用 户 访 问 很 慢, 如 果 服 务 器 在 电 信, 网 通 用 户 访 问 又 很 慢 2.3.7 WEB 应 用 开 发 架 构 设 计 思 路 1. 基 于 MVC 的 三 层 应 用 开 发 架 构 应 用 开 发 实 现 MVC 三 层 架 构 进 行 web 应 用 开 发, 采 用 ibatis 作 为 持 久 层 框 架,c3p0 作 为 数 据 库 连 接 池 ibatis 是 一 个 可 以 设 计 和 实 现 更 好 的 Java 应 用 程 序 持 久 化 层 的 框 架 ibatis 把 对 象 和 存 储 过 程 或 者 使 用 XML 描 述 符 的 SQL 语 句 进 行 了 关 联 简 单 是 ibatis 最 大 的 优 势 ibatis- 使 用 ibatis 的 十 个 理 由 1. 至 少 能 操 作 10 种 以 上 的 数 据 库 2. 可 配 置 的 caching( 包 括 从 属 ) 3. 支 持 DataSource local transaction managemen 和 global transaction 4. 简 单 的 XML 配 置 文 档 5. 支 持 Map, Collection, List 和 简 单 类 型 包 装 ( 如 Integer, String) 6. 支 持 JavaBeans 类 (get/set 方 法 ) 7. 支 持 复 杂 的 对 象 映 射 ( 如 populating lists, complex object models) 8. 对 象 模 型 从 不 完 美 ( 不 需 要 修 改 ) 9. 数 据 模 型 从 不 完 美 ( 不 需 要 修 改 ) 10. 你 已 经 知 道 SQL, 为 什 么 还 要 学 习 其 他 东 西
1) MVC 架 构 示 意
2) Struts 架 构 客 户 端 发 送 一 个 HTTP 请 求, 通 过 Struts 框 架 最 后 获 得 一 个 HTTP 响 应, 这 一 过 程 非 常 重 要, 它 是 理 解 Struts 框 架 的 重 点 上 图 描 述 了 Struts 框 架 的 结 构, 而 下 图 通 过 一 个 活 动 图 更 具 体 描 述 接 受 请 求 直 至 返 回 响 应 的 整 个 过 程 :
2. 面 向 服 务 的 应 用 架 构 面 向 服 务 的 应 用 架 构 是 指 构 建 可 分 布 式 的 去 中 心 化 的 服 务 器 平 台, 以 提 供 许 多 不 同 的 应 用, 数 据 库 被 分 成 很 多 个 小 部 分, 围 绕 每 个 部 分 都 会 创 建 一 个 服 务 接 口 (API), 并 且 该 接 口 是 访 问 数 据 库 的 唯 一 途 径 最 终 数 据 库 演 变 成 一 个 非 常 庞 大 的 共 享 资 源 这 种 架 构 是 松 散 耦 合 的, 并 且 围 绕 着 服 务 进 行 构 建 面 向 服 务 的 架 构 提 供 给 他 们 隔 离 特 性, 一 个 服 务 可 能 有 很 多 台 数 据 库 服 务 器, 他 们 之 间 的 数 据 是 相 通 的, 而 对 外 他 们 的 接 口 只 有 一 个, 外 面 是 无 法 知 道 这 个 服 务 后 面 的 数 据 组 织 是 如 何 搭 建 的 这 样 就 有 了 越 来 越 多 的 应 用 服 务 器 这 些 应 用 服 务 器 从 数 据 众 多 的 服 务 ( 每 个 服 务 背 后 都 有 数
据 库 或 集 群 数 据 库 ) 中 聚 合 信 息, 然 后 生 成 我 们 所 看 到 的 Amazon.com 的 各 个 网 站 页 面 这 样 各 种 服 务 如 插 件 一 样 组 成 了 一 个 开 放 的 平 台, 这 样 团 队 的 规 模 就 会 比 较 小, 比 较 灵 活 注 Amazon 就 是 采 用 了 这 种 架 构 来 构 建 的, 它 拥 有 上 千 台 服 务 器 2.4 系 统 软 件 参 数 优 化 在 一 定 的 架 构 基 础 上, 要 提 高 并 发 处 理 能 力 则 需 要 调 整 服 务 器 的 操 作 系 统 内 核 参 数 web 服 务 器 (tomcat 的 参 数 apache 的 参 数 Nginx 的 参 数 ), 以 使 其 性 能 达 到 最 优 化 2.4.1 操 作 系 统 优 化 调 整 系 统 的 内 核 参 数, 增 大 连 接 数 及 TCP/IP 的 超 时 设 置 Linux 系 统 中 : 在 /etc/sysctl.conf 配 置 文 件 中 增 加 如 下 内 核 参 数 : net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_fin_timeout = 5 2.4.2 tomcat 服 务 器 优 化 增 大 并 发 连 接 数, 调 整 内 存 参 数 的 设 置 1 JDK 内 存 优 化 : 当 应 用 程 序 需 要 的 内 存 超 出 堆 的 最 大 值 时 虚 拟 机 就 会 提 示 内 存 溢 出, 并 且 导 致 应 用 服 务 崩 溃 因 此 一 般 建 议 堆 的 最 大 值 设 置 为 可 用 内 存 的 最 大 值 的 80% Tomcat 默 认 可 以 使 用 的 内 存 为 128MB, 在 较 大 型 的 应 用 项 目 中, 这 点 内 存 是 不 够 的, 需 要 调 大. Tomcat 默 认 可 以 使 用 的 内 存 为 128MB,Windows 下, 在 文 件 /bin/catalina.bat,unix 下, 在 文 件 /bin/catalina.sh 的 前 面, 增 加 如 下 设 置 : JAVA_OPTS='-Xms 初 始 化 内 存 大 小 -Xmx 可 以 使 用 的 最 大 内 存 ' 需 要 把 这 个 两 个 参 数 值 调 大 例 如 : JAVA_OPTS='-Xms256m -Xmx512m' 表 示 初 始 化 内 存 为 256MB, 可 以 使 用 的 最 大 内 存 为 512MB 2 连 接 器 优 化 : 在 tomcat 配 置 文 件 server.xml 中 的 配 置 中, 和 连 接 数 相 关 的 参 数 有 : maxthreads: Tomcat 使 用 线 程 来 处 理 接 收 的 每 个 请 求 这 个 值 表 示 Tomcat 可 创 建 的 最 大 的 线 程 数 默 认 值 150 acceptcount: 指 定 当 所 有 可 以 使 用 的 处 理 请 求 的 线 程 数 都 被 使 用 时, 可 以 放 到 处 理 队 列 中 的 请 求 数, 超 过 这 个 数 的 请 求 将 不 予 处 理 默 认 值 10 minsparethreads: Tomcat 初 始 化 时 创 建 的 线 程 数 默 认 值 25 maxsparethreads: 一 旦 创 建 的 线 程 超 过 这 个 值,Tomcat 就 会 关 闭 不 再 需 要 的 socket 线 程 默 认 值 75 enablelookups: 是 否 反 查 域 名, 默 认 值 为 true 为 了 提 高 处 理 能 力, 应 设 置 为 false connnectiontimeout: 网 络 连 接 超 时, 默 认 值 60000, 单 位 : 毫 设 置 为 0 表 示 永 不 超 时,
这 样 设 置 有 隐 患 的 通 常 可 设 置 为 30000 毫 maxkeepaliverequests: 保 持 请 求 数 量, 默 认 值 100 buffersize: 输 入 流 缓 冲 大 小, 默 认 值 2048 bytes compression: 压 缩 传 输, 取 值 on/off/force, 默 认 值 off 其 中 和 最 大 连 接 数 相 关 的 参 数 为 maxthreads 和 acceptcount 如 果 要 加 大 并 发 连 接 数, 应 同 时 加 大 这 两 个 参 数 web server 允 许 的 最 大 连 接 数 还 受 制 于 * 作 系 统 的 内 核 参 数 设 置, 通 常 Windows 是 2000 个 左 右,Linux 是 1000 个 左 右 2.4.3 apache 服 务 器 优 化 加 大 并 发 数 量 和 关 闭 不 需 要 的 模 块 因 为 apache 非 常 消 耗 内 存, 尽 量 轻 量 化 Apache 在 配 置 ContentType 的 时 候 可 以 尽 量 少 支 持, 尽 可 能 少 的 LoadModule, 保 证 更 高 的 系 统 消 耗 和 执 行 效 率 同 时 配 置 apache 和 tomcat 的 组 合 使 之 能 作 到 动 静 分 离,apache 处 理 静 态 页 面,tomcat 处 理 动 态 页 面 在 处 理 静 态 页 面 或 者 图 片 js 等 访 问 方 面, 可 以 考 虑 使 用 lighttpd 代 替 Apache, 它 提 供 了 更 轻 量 级 和 更 高 效 的 处 理 能 力 2.4.4 Nginx 服 务 器 的 优 化 worker_processes: 该 参 数 的 值 最 好 跟 cpu 核 数 相 等, 能 够 发 挥 最 大 性 能, 如 果 nginx 所 在 服 务 器 为 2 颗 双 核 cpu, 则 建 议 设 定 为 4 3 Web 服 务 架 构 评 测 主 要 对 基 于 tomcat 和 nginx+tomcat 的 web 服 务 器 的 处 理 性 能 进 行 测 试, 以 作 为 不 同 性 能 要 求 下 架 构 选 型 的 依 据 3.1 测 试 环 境 3.1.1 网 络 环 境 1. 内 网 带 宽 千 M 内 网 内 网 ping 包 延 迟 :< 0.1ms
2. 网 络 拓 扑 示 意 W E B 服 务 高 可 用 测 试 网 络 示 意 图 千 兆 交 换 机 测 试 服 务 器 W E B 服 务 1 9 2.1 6 8.1 3 1.1 9 te st1 1 9 2.1 6 8.1 3 1.6 1 te st2 1 9 2.1 1 6 8.1 1 3 1.6 6 0 :8 8 1 N g in x 服 务 端 1 9 2.1 6 8.1 3 1.5 7 T o mcat1 1 9 2.1 6 8.1 3 1.5 6 T o mcat2 3.1.2 服 务 器 配 置 设 备 硬 件 配 置 操 作 系 统 Nginx IBM X3650 CPU: Intel(R) Xeon(R) E5150 2.66GHz 2 核 *2 内 存 :4G Redhat linux as4 千 兆 网 卡 Tomcat1 Hp DL580 G4 CPU: Intel(R) Xeon(TM) 3.40GHz 4 核 *2 内 存 :8G Redhat linux as5 千 兆 网 卡 Tomcat2 Hp DL580 G4 CPU: Intel(R) Xeon(TM) 3.40GHz 4 核 *2 内 存 :8G Redhat linux as5 千 兆 网 卡 Test1 Hp DL580 G5 CPU:Intel(R) Xeon(R) E7310 1.60GHz 4 核 *2 内 存 :4G Redhat linux as5 千 兆 网 卡 Test2 IBM X3650 CPU: Intel(R) Xeon(R) E5150 2.66GHz 2 核 *2 内 存 :4G 千 兆 网 卡 Redhat linux as4
3.1.3 软 件 环 境 1. 操 作 系 统 网 络 参 数 优 化 用 做 测 试 的 各 台 服 务 器, 均 在 /etc/sysctl.conf 配 置 文 件 中 增 加 如 下 内 核 参 数 : net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_fin_timeout = 5 2. Nginx 设 置 主 要 配 置 如 下 : user www www; worker_processes 4; error_log /usr/local/nginx/logs/nginx_error.log debug; pid /usr/local/nginx/logs/nginx.pid; worker_rlimit_nofile 51200; events { use epoll; worker_connections 51200; } http { include mime.types; default_type application/octet-stream; #charset gb2312; server_names_hash_bucket_size 128; client_header_buffer_size 32k; large_client_header_buffers 4 32k; sendfile on; tcp_nopush on; keepalive_timeout 1; tcp_nodelay on; #gzip on; #gzip_min_length 1k; #gzip_buffers 4 16k; #gzip_http_version 1.0;
#gzip_comp_level 2; #gzip_types text/plain application/x-javascript text/css application/xml; #gzip_vary on; upstream tomcats { server 192.168.131.57:8081; server 192.168.131.56:8081; # server 192.168.131.61:8080; } server { listen 81; server_name localhost; proxy_redirect off; location / { } proxy_pass http://tomcats; # 后 端 的 Web 服 务 器 可 以 通 过 X-Forwarded-For 获 取 用 户 真 实 IP # proxy_set_header X-Forwarded-For $remote_addr; # location / { # if ($request_uri ~* ".*\.(js css gif jpg jpeg png bmp swf)$") # { # proxy_pass http://squid.abc.com; # } # if ($request_uri ~* "^/view/(.*)$") # { # proxy_pass http://squid.abc.com; # } # proxy_pass http://web.abc.com; #} # 定 义 日 志 格 式 log_format access '$remote_addr - $remote_user [$time_local] $request ' '"$status" $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; # 打 日 志 access_log /usr/local/nginx/logs/access.log access;
# 允 许 客 户 端 请 求 的 最 大 的 单 个 文 件 字 节 数 client_max_body_size 10m; # 缓 冲 区 代 理 缓 冲 用 户 端 请 求 的 最 大 字 节 数 可 以 理 解 为 先 保 存 到 本 地 再 传 给 用 户 client_body_buffer_size 128k; # 跟 后 端 服 务 器 连 接 的 超 时 时 间 _ 发 起 握 手 等 候 响 应 超 时 时 间 proxy_connect_timeout 600; # 连 接 成 功 后 _ 等 候 后 端 服 务 器 响 应 时 间 _ 其 实 已 经 进 入 后 端 的 排 队 之 中 等 候 处 理 proxy_read_timeout 600; # 后 端 服 务 器 数 据 回 传 时 间 _ 就 是 在 规 定 时 间 之 内 后 端 服 务 器 必 须 传 完 所 有 的 数 据 proxy_send_timeout 600; 只 要 能 保 存 下 头 信 息 即 可 # 代 理 请 求 缓 存 区 _ 这 个 缓 存 区 间 会 保 存 用 户 的 头 信 息 以 供 Nginx 进 行 规 则 处 理 _ 一 般 proxy_buffer_size 8k; # 同 上 告 诉 Nginx 保 存 单 个 用 的 几 个 Buffer 最 大 用 多 大 空 间 proxy_buffers 4 32k; # 如 果 系 统 很 忙 的 时 候 可 以 申 请 更 大 的 proxy_buffers 官 方 推 荐 *2 proxy_busy_buffers_size 64k; #proxy 缓 存 临 时 文 件 的 大 小 } } proxy_temp_file_write_size 64k; 3. Tomcat 设 置 主 要 配 置 如 下 : Tomcat5.5 MaxThread 500 MinSpareThread 25 MaxSpareThread75 Xmx 1740M
4. Java 环 境 使 用 jdk1.6_03 启 动 两 个 Tomcat 使 用 jdk1.6 启 动 两 个 客 户 端 的 httptes 测 试 t 进 程
3.2 测 试 结 果 3.2.1 单 个 TOMCAT 的 WEB 服 务 器 N O 客 户 数 线 程 数 1 1 500 2 2 500 3 2 500 4 2 500 5 2 500 6 2 500 请 求 次 数 200 200 200 200 200 300 间 隔 时 间 0 毫 25 毫 50 毫 200 毫 500 毫 1000 毫 测 试 服 务 器 占 用 内 存 服 务 器 负 载 持 续 时 间 Test1 1.1G >150 82 Test1 288 1.7G < 6 Test2 293 Test1 422 1.7G < 3 Test2 413 Test1 742 1.7G < 2 Test2 744 Test1 1595 1.7G < 1 Test2 1575 6362 Test1 1.7G < 1 6351 Test2 平 均 速 度 12986 条 / 4765 条 / 4123 条 / 2863 条 / 2922 条 / 1727 条 / 1608 条 / 742 条 / 737 条 / 471 条 / 472 条 / 完 成 请 求 106 137 120 120 120 128 119 118 116 300 300 结 果 说 明 从 第 82 开 始,tomcat 占 用 内 存 1.1g, 但 CPU 资 源 被 tomcat 耗 尽, 服 务 器 负 载 急 剧 升 高,top 显 示 已 达 150, 服 务 器 停 止 响 应 客 户 端 请 求, 客 户 端 请 求 速 度 急 剧 下 降, 错 包 率 100%, 测 试 被 迫 中 断 从 第 280 左 右 开 始,tomcat 占 用 内 存 到 达 Xmx 指 定 上 限 1.7g,Test1 Test2 请 求 速 度 急 剧 下 降, 出 现 错 包, 错 包 率 超 过 >6%, 且 仍 在 增 加, 测 试 终 止 tomcat 抛 出 java.lang.outofmemoryerror: GC overhead limit exceeded 异 常 服 务 端 从 第 400 左 右 开 始,tomcat 占 用 内 存 到 达 Xmx 指 定 上 限 1.7g,Test1 Test2 请 求 速 度 急 剧 下 降, 开 始 出 现 大 量 错 包,422 以 后 的 错 包 率 超 过 4.3%, 且 仍 在 在 增 加 中, 之 前 的 错 包 率 约 为 0.8%, 测 试 终 止 服 务 端 从 第 740 左 右 开 始,tomcat 占 用 内 存 到 达 Xmx 指 定 上 限 1.7g,Test1 Test2 请 求 速 度 急 剧 下 降, 开 始 出 现 大 量 错 包, 测 试 终 止, 达 到 1.7G 前, 错 包 率 只 有 0.008%, 达 到 1.7g 后, 截 止 停 止 测 试 时, 错 包 率 增 长 到 1.2%, 且 仍 在 在 增 加 中 web 服 务 器 负 载 小 于 2 服 务 端 从 第 1595 左 右 开 始,tomcat 占 用 内 存 到 达 Xmx 指 定 上 限 1.7g,Test1 Test2 请 求 速 度 急 剧 下 降, 开 始 出 现 大 量 错 包, 达 到 1.7G 前, 错 包 率 只 有 0.08%, 达 到 1.7g 后, 截 止 停 止 测 试 时, 错 包 率 增 长 到 2.3%, 测 试 终 止 在 测 试 进 度 到 80% 左 右 时,tomcat1 占 用 内 存 达 到 了 Xmx 指 定 上 限 1.7g, 但 Test1 Test2 请 求 速 度 并 未 下 降, 直 到 600 次 请 求 全 部 完 成, 两 个 客 户 端 分 别 有 9 个 丢 包, 丢 包 率 只 有 0.003%, 最 长 的 响 应 时 长 为 12.728
3.2.2 Nginx+2 个 TOMCAT 的 WEB 服 务 器 NO 客 户 端 数 线 程 数 1 2 250 2 2 500 3 2 500 4 2 500 5 2 500 请 求 次 数 150 200 300 300 500 间 隔 时 间 0 毫 25 毫 50 毫 200 毫 500 毫 测 试 服 务 器 Tomcat 占 用 内 存 服 务 器 负 载 持 续 时 间 Test1 1G 347 < 2 Test1 1G 322 Test1 1.4G 542 < 2 Test2 1.4G 544 Test1 1.7G < 2 Test2 1.7G 1141 Test1 1.7G 1140 1860 < 1 Test2 1.7G 1863 平 均 速 度 4322 条 / 4658 条 / 3690 条 / 3676 条 / 2445 条 / 2424 条 / 1490 条 / 1482 条 / 完 成 请 求 数 150 150 200 200 278 276 277 276 Test1 1.7G 5475 913 条 / 500 < 1 Test2 1.7G 5565 898 条 / 500 最 大 响 应 时 长 93005 毫 21244 毫 45016 毫 45014 毫 93000 毫 92987 毫 平 均 响 应 时 长 0.21 毫 0.23 毫 0.27 毫 0.27 毫 1.09 毫 1.11 毫 测 试 结 果 300 次 请 求 全 部 完 成, 无 一 错 包 400 次 请 求 全 部 完 成, 无 一 错 包 服 务 端 从 第 1100 左 右 开 始,Tomcat1 Tomcat2 占 用 内 存 到 达 Xmx 指 定 上 限 1.7g, Test1 Test2 请 求 速 度 缓 慢 下 降, 但 并 无 错 包, 人 为 终 止 测 试 服 务 端 从 第 1800 左 右 开 始,Tomcat1 Tomcat2 占 用 内 存 到 达 Xmx 指 定 上 限 1.7g, Test1 Test2 请 求 速 度 缓 慢 下 降, 但 并 无 错 包, 人 为 终 止 测 试 完 成 测 试, 但 Tomcat1 Tomcat2 占 用 内 存 到 达 Xmx 指 定 上 限 1.7g, 无 错 包 6 2 500 500 1000 毫 Test1 968M < 1 10149 492 条 / 500 Test2 1G 10149 492 条 / 500 9077 毫 9044 毫 2.02 毫 2.02 毫 完 成 测 试, 无 一 错 包
3.2.3 Nginx+2 个 TOMCAT 的 WEB 服 务 器 + 缓 冲 NO 客 户 端 数 线 程 数 1 2 250 2 2 500 3 2 500 4 2 500 5 2 500 6 2 500 请 求 次 数 150 200 300 300 500 500 间 隔 时 间 0 毫 25 毫 50 毫 200 毫 500 毫 1000 毫 测 试 服 务 器 Tomcat 占 用 内 存 服 务 器 负 载 持 续 时 间 平 均 速 度 ( 条 / ) 完 成 请 求 数 最 大 响 应 时 长 平 均 响 应 时 长 测 试 结 果 Test1 0.2G 64 23437 150 9993 毫 0.04 毫 < 1 Test2 0.2G 59 25423 150 3472 毫 0.04 毫 196 Test1 0.4G 10202 200 9616 毫 0.10 毫 开 启 Nginx 缓 存 后,400 < 1 次 请 求 全 部 完 成, 分 别 194 Test2 0.4G 10361 200 9608 毫 0.10 毫 有 241 和 216 个 错 包 379 Test1 0.4G 7915 300 9015 毫 0.13 毫 开 启 Nginx 缓 存 后,600 < 1 次 请 求 全 部 完 成, 无 一 384 10234 毫 Test2 0.2G 7812 300 0.13 毫 错 包 1220 Test1 0.4G 2459 300 3018 毫 0.40 毫 开 启 Nginx 缓 存 后,600 < 1 次 请 求 全 部 完 成, 无 一 1241 Test2 0.2G 2417 300 3384 毫 0.41 毫 错 包 5031 Test1 0.4G 993 500 3020 毫 1.00 毫 开 启 Nginx 缓 存 后,1000 < 1 次 请 求 全 部 完 成, 无 一 5055 Test2 0.2G 989 500 3394 毫 1.01 毫 错 包 1004 Test1 0.4G 498 500 3020 毫 2.00 毫 开 启 Nginx 缓 存 后,1000 0 < 1 次 请 求 全 部 完 成, 无 一 1003 Test2 0.2G 498 500 78 毫 2.00 毫 错 包 8 注 : 本 次 测 试 所 用 jsp 页 面 仅 100 个 字 节 大 小, 测 试 过 程 中 带 宽 压 力 可 以 忽 略 不 计 测 试 过 程 中 曾 尝 试 过 使 用 100k 大 小 静 态 页 面, 结 果 显 示 在 千 兆 内 网 下, 无 论 是 单 Tomcat 亦 或 是 Nginx+2Tomcat, 请 求 速 度 最 大 均 不 超 过 1000 条 /, 网 络 带 宽 使 用 已 经 达 到 800M, 接 近 千 M 内 网 上 限 因 此, 实 际 应 用 中, 网 络 带 宽 对 整 个 web 服 务 的 影 响 会 非 常 大
公 开 机 密 内 部 公 开 3.3 测 试 结 果 分 析 1. 系 统 参 数 的 影 响 分 析 1) worker_processes 参 数 对 Nginx 性 能 的 影 响 测 试 过 程 中 分 别 设 定 worker_processes 为 8 4 2 1 时 发 现, 该 参 数 对 nginx 性 能 影 响 不 大, 对 服 务 器 资 源 消 耗 也 没 有 太 大 影 响, 相 关 资 料 显 示, 该 参 数 的 值 最 好 跟 cpu 核 数 相 等, 能 够 发 挥 最 大 性 能, 本 次 测 试 nginx 所 在 服 务 器 为 2 颗 双 核 cpu, 因 此 最 终 测 试 设 定 为 4 2) MaxThread 参 数 对 tomcat 并 发 性 的 影 响 本 次 测 试 tomcat 的 MaxThread 参 数 设 定 为 500, 进 行 13000 条 / 并 发 测 试 时,tomcat 启 动 并 发 线 程 过 多, 将 服 务 器 cpu 耗 尽 分 析 MaxThread 虽 能 够 提 高 tomcat 并 发 能 力, 但 前 提 是 在 一 个 合 理 的 范 围 内, 要 确 保 服 务 器 负 载 不 会 因 为 并 发 线 程 过 多 而 急 剧 升 高, 从 而 停 止 响 应 3) -Xmx 最 大 内 存 值 对 Tomcat 能 够 持 续 响 应 高 并 发 的 影 响 持 续 高 并 发 请 求 状 态 下, 有 6 次 测 试 是 因 为 tomcat 内 存 达 到 指 定 最 大 值 导 致 响 应 变 慢, 直 至 内 存 溢 出 停 止 响 应, 因 此,Tomcat 最 大 内 存 对 tomcat 能 够 持 续 响 应 高 并 发 请 求 有 很 大 的 影 响, 调 整 该 值, 应 该 可 以 增 加 Tomcat 响 应 高 并 发 请 求 的 总 数, 进 而 延 长 WEB 服 务 能 够 支 撑 峰 值 的 时 间 2. 各 架 构 下 的 性 能 分 析 1) Nginx+2Tomcat 的 最 大 并 发 性 低 于 单 Tomcat,Nginx+2Tomcat 最 快 为 8980 条 /, 单 Tomcat 为 12986 条 /, 分 析 可 能 是 受 nginx 所 在 服 务 器 性 能 影 响 所 致 2) 单 tomcat 在 配 置 1.7g 最 大 内 存 时, 在 持 续 超 过 1479 条 / 的 并 发 请 求 下, 在 稳 定 支 撑 约 240 次 响 应 后,Tomcat 内 存 达 到 1.7 上 限, 之 后 Tomcat 响 应 会 急 剧 变 慢, 错 包 急 剧 上 升 3) Nginx+2tomcat 架 构 下,2 个 tomcat 分 别 配 置 1.7g 最 大 内 存 时, 在 持 续 超 过 2900 条 / 的 并 发 请 求 下, 能 够 稳 定 支 撑 约 540 次 左 右 响 应, 之 后 两 个 Tomcat 内 存 都 会 达 到 1.7 上 限, 响 应 会 急 剧 变 慢, 但 错 包 情 况 并 未 出 现 4) 在 Nginx+2tomcat, 同 时 配 置 了 缓 存 的 情 况 下, 可 以 达 到 1.5 以 上 的 并 发 处 理 能 力 3.4 评 测 结 果 1) 单 个 tomcat 的 处 理 能 力 在 500 条 / 左 右 单 个 tomcat 能 稳 定 支 持 每 500 左 右 的 并 发 请 求 2) Nginx+Tomcat 比 单 个 Tomcat 更 稳 定, 不 易 出 现 错 包, 可 以 通 过 扩 充 tomcat 集 群 ( 新 增 tomcat 服 务 器 ) 来 提 升 系 统 的 并 发 能 力 单 个 tomcat 在 超 出 并 发 能 力 的 提 求 下, 处 理 能 力 大 大 下 降, 并 出 现 大 量 错 包, 而 采 用 Nginx+2Tomcat 架 构 在 各 种 测 试 下, 均 未 出 现 错 包, 但 处 理 能 力 也 会 下 降 单 个 tomcat 能 稳 定 支 持 每 500 左 右 的 并 发 请 求, 而 Nginx+2Tomcat 能 支 持 每 1000 左 右 11/4/2011 版 权 所 有, 侵 权 必 究 All rights reserved 第 34 页, 共 39 页 Page 34, Total 39
公 开 机 密 内 部 公 开 的 并 发 请 求 所 以 可 以 通 过 新 加 tomcat 服 务 器 来 提 升 系 统 的 并 发 能 力, 但 在 tomcat 的 总 体 处 理 能 力 超 过 nginx 的 处 理 能 力 时 无 效 3) Nginx+2Tomcat 配 置 了 缓 存 后, 静 态 页 面 的 并 发 能 力 不 再 受 tomcat 的 限 制, 单 个 nginx 的 并 发 处 理 能 力 能 达 到 1.5 以 上 配 置 了 缓 存 后,nginx+2tomcat 的 处 理 能 力 实 测 数 据 超 过 了 1.5 次 /, 而 单 个 tomcat 可 以 支 撑 500 次 /, 则 从 理 论 上 计 算 一 组 Nginx+30 个 Tomcat 集 群 可 以 支 撑 1.5 次 / 的 并 发 处 理 注 : 为 tomcat 均 分 配 1.7G 内 存 4 配 置 选 型 4.1 网 络 带 宽 只 考 虑 门 户 访 问 的 带 宽 占 用, 后 台 管 理 页 面 等 其 他 业 务 访 问 与 门 户 访 问 相 差 2-3 个 数 量 级, 这 一 部 分 网 络 流 量 占 用 忽 略 同 时 考 虑 网 络 带 宽 利 用 率 (70%) 根 据 业 务 设 计 能 力, 每 网 络 流 量 =WEB 网 站 每 钟 访 问 流 量 =( 每 次 访 问 占 用 的 带 宽 每 访 问 次 数 )/ 带 宽 利 用 率 =(200K*8*n)/0.7 注 : 一 般 门 户 的 首 页 大 小 >1M 平 均 200K/ 页 面, 我 们 以 平 均 值 来 计 算 并 发 能 力 占 用 的 网 络 带 宽 100 次 / 228 M 200 次 / 457 M 500 次 / 1442 M 1000 次 / 2286 M 4.2 架 构 和 硬 件 配 置 选 型 4.2.1 硬 件 配 置 参 考 序 号 产 品 功 能 参 考 型 号 配 置 TPMC 1 主 机 设 备 1.1 数 据 库 服 务 器 IBM System x3850 M2, 4 个 处 理 器, 每 处 理 器 为 6 核, 共 计 24 核 内 存 大 小 16G SAS 硬 盘, 硬 盘 大 小 587 GB 4U 机 架, 集 成 双 千 兆 以 太 网 接 口, 两 块 千 兆 的 光 纤 网 卡 684508 11/4/2011 版 权 所 有, 侵 权 必 究 All rights reserved 第 35 页, 共 39 页 Page 35, Total 39
公 开 机 密 内 部 公 开 1.2 WEB 服 务 器 IBM System x3850 M2, 4 个 处 理 器, 每 处 理 器 为 6 核, 共 计 24 核 内 存 大 于 8G SAS 硬 盘, 硬 盘 大 小 587 GB 4U 机 架, 集 成 双 千 兆 以 太 网 接 口, 两 块 千 兆 的 光 纤 网 卡 1.3 管 理 终 端 IBM System x3560,1 个 Intel Xeon E5450 处 理 器, 内 存 大 小 2G,2U 机 架 2 网 络 设 备 RADWARE 应 用 负 载 均 衡 设 备, 型 号 : 为 ODS-504, 有,4 个 可 选 的 2.1 负 载 均 衡 器 千 兆 位 电 端 口,1G 主 内 存,500M 处 理 能 力 ( 最 大 可 通 过 License 升 级 为 4G) CISCO ASA5520 防 火 墙 并 发 连 接 :280000 网 络 吞 吐 :450 2.2 防 火 墙 安 全 过 滤 :225MB 网 络 端 口 :4 个 千 兆 以 太 网 接 口 +1 个 快 速 用 户 数 限 : 无 用 户 数 限 制 用 户 VPN 支 持 : 支 持 Quidway S3952P-EI 传 输 速 率 :10Mbps/100Mbps/1000Mbps 网 络 标 准 :IEEE 802.1Q IEEE 802.1D 2.2 交 换 机 端 口 数 量 :48 接 口 介 质 :10/100Base-T 1000Base-X 传 输 模 式 : 全 双 工 / 半 双 工 自 适 应 背 板 带 宽 :32Gbps 3 存 储 设 备 3.1 光 纤 存 储 柜 光 纤 存 储 柜 (EVA4100) 3.2 光 纤 交 换 机 光 纤 交 换 机 ( 4/32B SAN Switch) 684508 32600 注 : 上 表 为 硬 件 的 参 考 配 置, 根 据 网 站 规 模 的 不 同, 在 初 期 可 以 不 用 硬 件 负 载 均 衡 器 服 务 器 性 能 也 可 以 作 适 当 缩 减, 达 到 一 定 规 模 后 硬 件 的 扩 容 请 参 考 4.3 硬 件 扩 容 策 略 4.2.2 Web 架 构 和 硬 件 选 型 并 发 能 力 <200 次 / 200~500 次 / >500 次 / Web 服 务 器 架 构 服 务 器 配 置 备 注 1) Apache+n 个 Tomcat(n>=2); 2) Nginx+n 个 Tomcat(n=2); 1) Apache+n 个 Tomcat(n>=2); 2) Nginx+n 个 Tomcat(n=2); 注 : 同 时 配 置 缓 冲 Nginx+n 个 Tomcat (n>=2); 注 : 同 时 配 置 缓 冲 2 台 web 服 务 2 台 数 据 库 服 务 器 3 台 web 服 务 2 台 数 据 库 服 务 器 2 台 缓 存 服 务 器 n 台 web 服 务 (n>5) m 台 数 据 库 服 务 器 2 台 缓 存 服 务 器 2 台 负 载 均 衡 器 1 台 web 服 务 器 同 时 部 署 apache(nginx) 和 tomcat; 另 1 台 部 署 tomcat 一 起 实 现 web 负 载 均 衡 1 台 生 产 数 据 库,1 台 查 询 数 据 库 1 台 web 服 务 器 装 apache(nginx); 另 2 台 web 服 务 器 tomcat; 1 台 生 产 数 据 库,1 台 查 询 数 据 库 1 台 web 服 务 器 装 nginx; 其 他 web 服 务 器 tomcat; 在 web 服 务 器 >4 台 的 时 侯 可 以 考 虑 划 成 多 个 nginx+tomcat 集 群 生 产 数 据 库 用 ORACLE 的 RAC 集 群, 也 可 考 虑 多 种 数 据 库 并 存 如 用 mysql. 11/4/2011 版 权 所 有, 侵 权 必 究 All rights reserved 第 36 页, 共 39 页 Page 36, Total 39
公 开 机 密 内 部 公 开 >1.5 次 多 个 Nginx+n 个 Tomcat (n>=2) 组 合 ; 注 : 同 时 配 置 缓 冲 n 台 web 服 务 (n>30) m 台 数 据 库 服 务 器 2 台 缓 存 服 务 器 2 台 负 载 均 衡 器 组 成 多 个 nginx+tomcat 集 群 (1 台 ngix+5 台 tomcat), 通 过 负 载 均 衡 器 分 流 数 据 库 用 ORACLE 的 RAC 集 群 说 明 : 1) 理 论 上 单 个 tomcat 可 以 支 持 500 的 并 发, 考 虑 到 门 户 的 高 可 用 性, 可 以 考 虑 用 Nginx+n 个 Tomcat (n>=2) 的 负 载 均 衡 架 构 2) 当 并 发 >500 时 可 以 考 虑 增 加 tomcat 服 务 器, 当 tomcat 增 加 达 到 30 个 时 理 论 可 以 支 撑 1.5 次 的 并 发 请 求 3) 当 并 发 >1.5 次 时 则 需 要 考 虑 增 加 一 套 Nginx+tomcat 的 组 合, 多 个 Nginx+tomcat 通 过 硬 件 或 是 软 件 负 载 均 衡 器 来 实 现 平 载 均 衡 4) 以 上 的 硬 件 配 置 没 考 虑 其 他 复 杂 的 应 用 需 求, 如 有 其 他 应 用 ( 大 容 量 的 文 件 存 储 接 口 服 务 复 杂 的 计 算 等 ) 需 求 则 需 要 配 置 相 应 的 硬 件 4.3 硬 件 扩 容 策 略 当 网 站 发 展 到 一 定 阶 段, 随 着 用 户 量 不 断 扩 大, 现 有 的 网 络 资 源 和 服 务 器 资 源 不 能 满 足 用 户 需 要 的 时 候, 就 需 要 对 平 台 进 行 服 务 器 和 网 络 的 扩 容 以 下 是 两 种 平 台 扩 容 的 方 式 : 4.3.1 增 加 服 务 器 对 于 web 的 并 发 处 理 有 瓶 颈 时, 新 增 的 web 服 务 器, 把 新 增 的 web 服 务 器 填 加 到 Web 服 务 器 集 群 中, 以 增 加 WEB 的 并 发 处 理 能 力 对 于 数 据 库 有 处 理 压 力 时, 可 以 增 加 数 据 库 服 务 器, 增 加 数 据 库 服 务 器 加 入 数 据 库 的 集 群 中 4.3.2 增 加 存 储 对 于 存 储 容 量 不 能 满 足 业 务 需 要 时, 可 以 考 虑 在 磁 盘 柜 中 新 增 加 硬 盘, 甚 至 考 虑 新 增 磁 盘 柜 4.3.3 升 级 服 务 器 可 以 升 级 服 务 器 的 内 存 硬 盘, 甚 至 考 虑 用 新 的 性 能 更 高 的 服 务 器 来 替 换 4.3.4 网 络 扩 容 1) 申 请 更 大 的 网 络 带 宽 2) 引 入 CDN 3) 升 级 内 网 交 换 机 11/4/2011 版 权 所 有, 侵 权 必 究 All rights reserved 第 37 页, 共 39 页 Page 37, Total 39
公 开 机 密 内 部 公 开 5 附 录 : 一 些 主 流 网 站 的 真 实 数 据 1) taobao 服 务 中 心 200 台 服 务 器 承 载 了 70 亿 / 天 的 请 求 2) 维 基 百 科 alexa 访 问 量 排 名 第 6 的 维 基 百 科, 每 天 有 3.4 亿 个 PV, 但 其 最 高 峰 的 HTTP 请 求 数 也 只 有 五 六 左 右 3) facebook 120M+ active users 50B+ PVs per month 50B+ PVs per month 10B+ Photos 1B+ connections 50K+ Platform Apps 400K+ App Developers LAMP + Services AdServer Search Network Selector News Feed Blogfeeds PHP Memcache MySQL Blogfeeds CSSParser Mobile ShareScraper 4) Amzon 的 一 组 数 据 : 超 过 5500 活 动 顾 客 的 帐 号 和 账 单 信 息 ; 世 界 范 围 内 超 过 100 个 活 动 零 售 商 ; 构 建 一 个 页 面 所 需 要 访 问 的 服 务 API 在 100 至 150 个 ; 每 天 数 十 亿 的 用 户 访 问 这 是 一 组 庞 大 的 数 字 5) 豆 瓣 网 的 一 些 数 据 : 2.8M 注 册 用 户, 约 1/4 活 跃 用 户 千 级 非 注 册 用 户 20M 动 态 请 求 / 天, 峰 值 500~600/sec 11/4/2011 版 权 所 有, 侵 权 必 究 All rights reserved 第 38 页, 共 39 页 Page 38, Total 39
公 开 机 密 内 部 公 开 23 台 普 通 PC 服 务 器 (1U*15/2U*8) 12 台 提 供 线 上 服 务 38G memcached 6) ebay 212,000,000 注 册 用 户 十 亿 每 天 十 亿 的 PV 每 天 260 亿 的 SQL 执 行 7) Yupoo 国 内 最 大 的 图 片 服 务 提 供 商 之 一,Yupoo! 的 Alexa 排 名 大 约 在 5300 左 右 同 时 收 集 到 的 一 些 数 据 如 下 : 带 宽 :4000M/S ( 参 考 ) 服 务 器 数 量 :60 台 左 右 Web 服 务 器 :Lighttpd, Apache, nginx 应 用 服 务 器 :Tomcat 其 他 :Python, Java, MogileFS ImageMagick 等 8) 优 酷 网 08 年 9 月 : VV: 1.6 亿 + 日 上 传 视 频 : 6 + LAMP+lighttpd Memcached 11/4/2011 版 权 所 有, 侵 权 必 究 All rights reserved 第 39 页, 共 39 页 Page 39, Total 39