BeetleSoft 大型网站技术架构探讨 [1]
那是不是流量大就是大型网站 ?呢 Google Analytics
BeetleSoft 大型网站技术架构探讨 [2]
追求这 3 个目 ,是网站 的根源标 闹腾
BeetleSoft 大型网站技术架构探讨 [3]
一般地,本文提到的物理服 器都是泛指务 pc 物理服 器;级 务 Web Server 泛指
HTTP 服 器和 用服 器 合体务 应 务 综
于一个 水性网站来 了 成本,对 试 说为 节约 Web Server 和 DB Server 都放在同一台
pc Server 服 器上是常 的事情。务 见
当网站 量增大,访问 cpu 理能力是瓶 的 候,通 把处 颈 时 过 web Server 和 Db
Server 物理分 的,效果明简单 开 显
BeetleSoft 大型网站技术架构探讨 [4]
量持 增大, 面响 越来越慢。考 到网站 在 水性成 段,访问 续 页 应 虑 还处 试 长阶 节
成本,硬件不 ,着重 用本身 化。约 动 应 优
采取 存 理机制是个必然的缓 处 选择
BeetleSoft 大型网站技术架构探讨 [5]
有 可以吹一下时间还 idempotent , etag(http://www.infoq.com/cn/articles/etags)
BeetleSoft 大型网站技术架构探讨 [6]
客向网站 出 求访 发 访问请 , 由前端 面 存器 担原服 器的 理 程做出页 缓 负 务 处 进
响应 , 取原服 器的相 网 内容获 务 应 页 , 将其 存在自身的内存中储 , 与 此同时 , 传
送 客 一 存的内容给访 这 缓 ; 如有另一 客也 求 之前的相同内容访 请 访问 , 前端 面页
存器毋 再次 取原服 器上的相 内容缓 须 获 务 应 , 而直接从自身的内存中 取获 , 将这
一内容 送 客。反之传 给访 , 前端 面 存器也可 存 客的页 缓 缓 访 GET 和 POST 求。请
   客 面 的是前端 面 存器访 实际 对 页 缓 , 与网站之 的通 完全由前端 面 存间 讯 页 缓
器反向代理 , 而非原服 器直接响 客务 应访 , 将大大加快 客上网流 度这 访 畅 , 有效
提升 量访问 , 著降低 占用显 带宽 , 原始服 器的繁忙度减轻 务 , 加快响 速度应 , 毋
不停地 置大内存须 购 , 大硬盘 , 容 力 施 服 器端 省成本。扩 电 设 为 务 节
BeetleSoft 大型网站技术架构探讨 [7]
ESI 是一个基于 XML 的 言,目的是在标记语 HTTP 中 装各 源。在 境组 种资 实际环
中,一个 生成的 面,当中可能只有少量的内容是 繁 化的或是个性化动态 页 频 变
的, 于 的对 传统 Cache 服 器来 , 了能 保 面的 效性,却由于 面务 说 为 够 证页 时 页
中 些少量的 内容而无法将整个 面 行 存。这 动态 页 进 缓 ESI 通 使用 的过 简单 标记语
言来 那些可以 存和不能 存的网 中的内容片断 行描述,每个网 都被对 缓 缓 页 进 页
分成不同的小部分分 予不同的 存控制策略,使划 别赋 缓 Cache 服 器可以根据务
些策略在将完整的网 送 用 之前将不同的小部分 地 合在一起。这 页发 给 户 动态 组
通 控制,可以有效地 少从服 器抓取整个 面的次数,而只用从原服过这种 减 务 页
器中提取少量的不能 存的片断,因此可以有效降低原服 器的 ,同务 缓 务 负载 时
提高用 的响 。户访问 应时间
BeetleSoft 大型网站技术架构探讨 [8]
常 存算法见缓
莱蒂算法(贝 Belady's Algorithm )
最有效率的 存算法会 掉未来最 内不使用的数据。 理想情况被称缓 丢 长时间 这种
作 莱蒂最 算法或者千里眼算法。由于要 数据要多久后才被使用基本上贝 优 预计
是不可能的,所以 算法没有 的可操作性。它的作用在于 不同的 存这种 实际 为 缓
算法 立一个 劣 准。订 优 标
最近最少使用算法 (LRU , Least Recently Used )
最近最少使用算法的思路是 弃近段 内最少被使用的数据。要 算丢 时间 实现这种
法需要跟踪数据何 被使用,用 方法来 去近一段 被最少使用次数时 这种 筛选 时间
的数据其代价往往是昂 的。它的 往往是通 在 存数据上 立 志贵 实现 过 缓 设 时间标
位,用以跟踪最近最少被使用的 存数据。一个数据每被使用一次,其他数据缓
的 志位数 就要增加。时间标 值
BeetleSoft 大型网站技术架构探讨 [9]
网站反 不 , 展比 利。 于有 逼馈 错 业务发 较顺 终 傻 VC 投 了, 充足,就必钱 银弹 须
考 网站可用性及服 容量冗余性 。增加机器,虑 务 问题 搞 HA 是必然 了选择
BeetleSoft 大型网站技术架构探讨 [10]
DNS 均衡负载  反向代理 均衡负载  直接路由 F5 硬件
LVS ( LVS 集群采用 IP 均衡技 和基于内容 求分 技 。 度器具有很负载 术 请 发 术 调
好的吞吐率,将 求均衡地 移到不同的服 器上 行,且 度器自 屏蔽掉请 转 务 执 调 动
服 器的故障,从而将一 服 器 成一个高性能的、高可用的虚 服 器。务 组 务 构 拟 务
整个服 器集群的 客 是透明的,而且无需修改客 端和服 器端的程务 结构对 户 户 务
序)
Virtual Server via NAT ( VS-NAT )
用地址翻 虚 服 器。地址 器有译实现 拟 务 转换
能被外界 到的合法访问 IP 地址,它修改来自专
有网 的流出包的地址。外界看起来包是来自络
地址 器本身,当外界包送到 器 ,它转换 转换 时
BeetleSoft 大型网站技术架构探讨 [11]
各个 系数据 厂商关 库 针对 dal 及 replication 都有自己方案
独立的 DAL Proxy 服 器务
MySQL: mysqlproxy,Amoeba
PostgreSQL: PL/Proxy (Skype)
DAL API
Java: Hibernate Shard,Ibatis Shard,HiveDB,Guzz
Python: Pyshards
BeetleSoft 大型网站技术架构探讨 [12]
网站 展迅速,数据量大幅增大是当前最大的挑 ,用 分散各地区,某业务发 战 户
些地方用 响 很慢,影响体 和 展户访问 应 验 业务发
同 ,由于数据量 大,数据 存在本地内存已 不 ,分布式 存是必然时 过 缓 经 现实 缓
了选择
BeetleSoft 大型网站技术架构探讨 [13]
CDN 的全称是 Content Delivery Network ,即内容分 网 。其目的是通 在发 络 过 现
有的 Internet 中增加一 新的网 架 ,将网站的内容 布到最接近用 的网层 络 构 发 户
络 " 边缘 " ,使用 可以就近取得所需的内容,解决户 Internet 网 的状况络拥挤
,提高用 网站的响 速度。从技 上全面解决由于网 小、用户访问 应 术 络带宽 户访
量大、网点分布不均等原因所造成的用 网站响 速度慢的 。问 户访问 应 问题 ( 也
就是一个服 器的内容,平均分部到多个服 器上,服 器智能 , 用务 务 务 识别 让 户
取离用 最近的服 器,提高速度。获 户 务
BeetleSoft 大型网站技术架构探讨 [14]
本地 存缓 vs 分布式 存, 什么要 分布式 存?缓 为 搞 缓
什么分布式 存器都是采取为 缓 Key-Value 形式 ?
BeetleSoft 大型网站技术架构探讨 [15]
垂直分 后,各模 数据之 如何 ?垂直分 前提是良好的松耦合的库 块 间 关联查询 库
模 化块 设计
BeetleSoft 大型网站技术架构探讨 [16]
Shard 是分布式解决方案,与数据 集中式的表空 分区是 个不同方案库 间 两
BeetleSoft 大型网站技术架构探讨 [17]
某天突然 网站可以成 第发现 为 2 个 facebook 了,用 ,数据量 到户过亿 达 pb 。级
网站性能不是通 增加硬件服 器就能 足的。(机房放 都不 )过简单 务 够满 满 够 这
就不得面 以下 :既然样 对 选择 1 个机房都容不下了(可看做一个数据中心),
那么就建多几个(多个数据中心);建立数据中心,无疑就需要更多的机器和
存 ,考 天价的成本的,利用 有廉价的存 和机器,参照储 虑 现 储 google 的 GFS 、
Map/Reduce 、 Bigtable 技 模式搭建分布式存 和 算的架 就是必然 了术 储 计 构 选择
。
BeetleSoft 大型网站技术架构探讨 [18]
DFS 提供了一个全局命名空 的高可用(通 跨机器(和跨机架)的文件数据间 过 复
制来 到高可用性,免受 文件存 系 无法避免的 多失 的影响)文件达 传统 储 统 许 败
系 ,解决高容量数据高效、可靠存 ;统 储问题 Map/Reduce 的 算框架,它与计
DFS 密 作,帮助 理收集到的海量数据紧 协 处 ;Key-Value DB 代替 的数据 ,传统 库
通 一些主 来 海量数据,并 高效的 。过 键 组织 实现 查询
BeetleSoft 大型网站技术架构探讨 [19]
从网站架 演 程来看,涉及到构 变过 n 多的技 点及 模式, 什么要用 些术 设计 为 这
技 ? 什么 ?困惑了?术 为 这样设计
所以我 需要理 来支 和指 我 架 工作们 论 撑 导 们 构设计
BeetleSoft 大型网站技术架构探讨 [20]
Eric Brewer, 一位加州大学伯克利分校的教授
http://www.cs.berkeley.edu/~brewer/
BeetleSoft 大型网站技术架构探讨 [21]
CAP 分布式系 和 型都有重大指 意 ;对开发 统 选 导 义
BeetleSoft 大型网站技术架构探讨 [22]
http://en.wikipedia.org/wiki/Shared_nothing_architecture
SNA 的主要是 在一个集群分布式 算 境中,若认为 计 环 Session 状 在各个态维护 节
点服 器上, 了保 状 一致性, 点务 为 证 态 节 间 Session 数据需要互相拷 同步,贝 严
重影响性能。
BeetleSoft 大型网站技术架构探讨 [23]
基于 SOA 方面架 的很多了, 里就不 略 了构说 这 简单 过
切勿浪 多 西去做用 少的 西同 可以做好的事情费较 东 较 东 样
BeetleSoft 大型网站技术架构探讨 [24]
很 明 的漫画说 问题
BeetleSoft 大型网站技术架构探讨 [25]
言的 意味着不同的架 路 、不同的语 选择 构 线 开发  框架、不同的部署方式测试
及不同的 效率,最 到底, 言 涉及到 源成本。开发 终 语 选择 资
和人是最 要的钱 终 o( _ )o…∩ ∩

大型网站架构设计

  • 1.
  • 2.
    BeetleSoft 大型网站技术架构探讨 [2] 追求这3 个目 ,是网站 的根源标 闹腾
  • 3.
    BeetleSoft 大型网站技术架构探讨 [3] 一般地,本文提到的物理服器都是泛指务 pc 物理服 器;级 务 Web Server 泛指 HTTP 服 器和 用服 器 合体务 应 务 综 于一个 水性网站来 了 成本,对 试 说为 节约 Web Server 和 DB Server 都放在同一台 pc Server 服 器上是常 的事情。务 见 当网站 量增大,访问 cpu 理能力是瓶 的 候,通 把处 颈 时 过 web Server 和 Db Server 物理分 的,效果明简单 开 显
  • 4.
    BeetleSoft 大型网站技术架构探讨 [4] 量持增大, 面响 越来越慢。考 到网站 在 水性成 段,访问 续 页 应 虑 还处 试 长阶 节 成本,硬件不 ,着重 用本身 化。约 动 应 优 采取 存 理机制是个必然的缓 处 选择
  • 5.
    BeetleSoft 大型网站技术架构探讨 [5] 有可以吹一下时间还 idempotent , etag(http://www.infoq.com/cn/articles/etags)
  • 6.
    BeetleSoft 大型网站技术架构探讨 [6] 客向网站出 求访 发 访问请 , 由前端 面 存器 担原服 器的 理 程做出页 缓 负 务 处 进 响应 , 取原服 器的相 网 内容获 务 应 页 , 将其 存在自身的内存中储 , 与 此同时 , 传 送 客 一 存的内容给访 这 缓 ; 如有另一 客也 求 之前的相同内容访 请 访问 , 前端 面页 存器毋 再次 取原服 器上的相 内容缓 须 获 务 应 , 而直接从自身的内存中 取获 , 将这 一内容 送 客。反之传 给访 , 前端 面 存器也可 存 客的页 缓 缓 访 GET 和 POST 求。请    客 面 的是前端 面 存器访 实际 对 页 缓 , 与网站之 的通 完全由前端 面 存间 讯 页 缓 器反向代理 , 而非原服 器直接响 客务 应访 , 将大大加快 客上网流 度这 访 畅 , 有效 提升 量访问 , 著降低 占用显 带宽 , 原始服 器的繁忙度减轻 务 , 加快响 速度应 , 毋 不停地 置大内存须 购 , 大硬盘 , 容 力 施 服 器端 省成本。扩 电 设 为 务 节
  • 7.
    BeetleSoft 大型网站技术架构探讨 [7] ESI是一个基于 XML 的 言,目的是在标记语 HTTP 中 装各 源。在 境组 种资 实际环 中,一个 生成的 面,当中可能只有少量的内容是 繁 化的或是个性化动态 页 频 变 的, 于 的对 传统 Cache 服 器来 , 了能 保 面的 效性,却由于 面务 说 为 够 证页 时 页 中 些少量的 内容而无法将整个 面 行 存。这 动态 页 进 缓 ESI 通 使用 的过 简单 标记语 言来 那些可以 存和不能 存的网 中的内容片断 行描述,每个网 都被对 缓 缓 页 进 页 分成不同的小部分分 予不同的 存控制策略,使划 别赋 缓 Cache 服 器可以根据务 些策略在将完整的网 送 用 之前将不同的小部分 地 合在一起。这 页发 给 户 动态 组 通 控制,可以有效地 少从服 器抓取整个 面的次数,而只用从原服过这种 减 务 页 器中提取少量的不能 存的片断,因此可以有效降低原服 器的 ,同务 缓 务 负载 时 提高用 的响 。户访问 应时间
  • 8.
    BeetleSoft 大型网站技术架构探讨 [8] 常存算法见缓 莱蒂算法(贝 Belady's Algorithm ) 最有效率的 存算法会 掉未来最 内不使用的数据。 理想情况被称缓 丢 长时间 这种 作 莱蒂最 算法或者千里眼算法。由于要 数据要多久后才被使用基本上贝 优 预计 是不可能的,所以 算法没有 的可操作性。它的作用在于 不同的 存这种 实际 为 缓 算法 立一个 劣 准。订 优 标 最近最少使用算法 (LRU , Least Recently Used ) 最近最少使用算法的思路是 弃近段 内最少被使用的数据。要 算丢 时间 实现这种 法需要跟踪数据何 被使用,用 方法来 去近一段 被最少使用次数时 这种 筛选 时间 的数据其代价往往是昂 的。它的 往往是通 在 存数据上 立 志贵 实现 过 缓 设 时间标 位,用以跟踪最近最少被使用的 存数据。一个数据每被使用一次,其他数据缓 的 志位数 就要增加。时间标 值
  • 9.
    BeetleSoft 大型网站技术架构探讨 [9] 网站反不 , 展比 利。 于有 逼馈 错 业务发 较顺 终 傻 VC 投 了, 充足,就必钱 银弹 须 考 网站可用性及服 容量冗余性 。增加机器,虑 务 问题 搞 HA 是必然 了选择
  • 10.
    BeetleSoft 大型网站技术架构探讨 [10] DNS均衡负载 反向代理 均衡负载 直接路由 F5 硬件 LVS ( LVS 集群采用 IP 均衡技 和基于内容 求分 技 。 度器具有很负载 术 请 发 术 调 好的吞吐率,将 求均衡地 移到不同的服 器上 行,且 度器自 屏蔽掉请 转 务 执 调 动 服 器的故障,从而将一 服 器 成一个高性能的、高可用的虚 服 器。务 组 务 构 拟 务 整个服 器集群的 客 是透明的,而且无需修改客 端和服 器端的程务 结构对 户 户 务 序) Virtual Server via NAT ( VS-NAT ) 用地址翻 虚 服 器。地址 器有译实现 拟 务 转换 能被外界 到的合法访问 IP 地址,它修改来自专 有网 的流出包的地址。外界看起来包是来自络 地址 器本身,当外界包送到 器 ,它转换 转换 时
  • 11.
    BeetleSoft 大型网站技术架构探讨 [11] 各个系数据 厂商关 库 针对 dal 及 replication 都有自己方案 独立的 DAL Proxy 服 器务 MySQL: mysqlproxy,Amoeba PostgreSQL: PL/Proxy (Skype) DAL API Java: Hibernate Shard,Ibatis Shard,HiveDB,Guzz Python: Pyshards
  • 12.
    BeetleSoft 大型网站技术架构探讨 [12] 网站展迅速,数据量大幅增大是当前最大的挑 ,用 分散各地区,某业务发 战 户 些地方用 响 很慢,影响体 和 展户访问 应 验 业务发 同 ,由于数据量 大,数据 存在本地内存已 不 ,分布式 存是必然时 过 缓 经 现实 缓 了选择
  • 13.
    BeetleSoft 大型网站技术架构探讨 [13] CDN的全称是 Content Delivery Network ,即内容分 网 。其目的是通 在发 络 过 现 有的 Internet 中增加一 新的网 架 ,将网站的内容 布到最接近用 的网层 络 构 发 户 络 " 边缘 " ,使用 可以就近取得所需的内容,解决户 Internet 网 的状况络拥挤 ,提高用 网站的响 速度。从技 上全面解决由于网 小、用户访问 应 术 络带宽 户访 量大、网点分布不均等原因所造成的用 网站响 速度慢的 。问 户访问 应 问题 ( 也 就是一个服 器的内容,平均分部到多个服 器上,服 器智能 , 用务 务 务 识别 让 户 取离用 最近的服 器,提高速度。获 户 务
  • 14.
    BeetleSoft 大型网站技术架构探讨 [14] 本地存缓 vs 分布式 存, 什么要 分布式 存?缓 为 搞 缓 什么分布式 存器都是采取为 缓 Key-Value 形式 ?
  • 15.
    BeetleSoft 大型网站技术架构探讨 [15] 垂直分后,各模 数据之 如何 ?垂直分 前提是良好的松耦合的库 块 间 关联查询 库 模 化块 设计
  • 16.
    BeetleSoft 大型网站技术架构探讨 [16] Shard是分布式解决方案,与数据 集中式的表空 分区是 个不同方案库 间 两
  • 17.
    BeetleSoft 大型网站技术架构探讨 [17] 某天突然网站可以成 第发现 为 2 个 facebook 了,用 ,数据量 到户过亿 达 pb 。级 网站性能不是通 增加硬件服 器就能 足的。(机房放 都不 )过简单 务 够满 满 够 这 就不得面 以下 :既然样 对 选择 1 个机房都容不下了(可看做一个数据中心), 那么就建多几个(多个数据中心);建立数据中心,无疑就需要更多的机器和 存 ,考 天价的成本的,利用 有廉价的存 和机器,参照储 虑 现 储 google 的 GFS 、 Map/Reduce 、 Bigtable 技 模式搭建分布式存 和 算的架 就是必然 了术 储 计 构 选择 。
  • 18.
    BeetleSoft 大型网站技术架构探讨 [18] DFS提供了一个全局命名空 的高可用(通 跨机器(和跨机架)的文件数据间 过 复 制来 到高可用性,免受 文件存 系 无法避免的 多失 的影响)文件达 传统 储 统 许 败 系 ,解决高容量数据高效、可靠存 ;统 储问题 Map/Reduce 的 算框架,它与计 DFS 密 作,帮助 理收集到的海量数据紧 协 处 ;Key-Value DB 代替 的数据 ,传统 库 通 一些主 来 海量数据,并 高效的 。过 键 组织 实现 查询
  • 19.
    BeetleSoft 大型网站技术架构探讨 [19] 从网站架演 程来看,涉及到构 变过 n 多的技 点及 模式, 什么要用 些术 设计 为 这 技 ? 什么 ?困惑了?术 为 这样设计 所以我 需要理 来支 和指 我 架 工作们 论 撑 导 们 构设计
  • 20.
    BeetleSoft 大型网站技术架构探讨 [20] EricBrewer, 一位加州大学伯克利分校的教授 http://www.cs.berkeley.edu/~brewer/
  • 21.
    BeetleSoft 大型网站技术架构探讨 [21] CAP分布式系 和 型都有重大指 意 ;对开发 统 选 导 义
  • 22.
    BeetleSoft 大型网站技术架构探讨 [22] http://en.wikipedia.org/wiki/Shared_nothing_architecture SNA的主要是 在一个集群分布式 算 境中,若认为 计 环 Session 状 在各个态维护 节 点服 器上, 了保 状 一致性, 点务 为 证 态 节 间 Session 数据需要互相拷 同步,贝 严 重影响性能。
  • 23.
    BeetleSoft 大型网站技术架构探讨 [23] 基于SOA 方面架 的很多了, 里就不 略 了构说 这 简单 过 切勿浪 多 西去做用 少的 西同 可以做好的事情费较 东 较 东 样
  • 24.
  • 25.
    BeetleSoft 大型网站技术架构探讨 [25] 言的意味着不同的架 路 、不同的语 选择 构 线 开发 框架、不同的部署方式测试 及不同的 效率,最 到底, 言 涉及到 源成本。开发 终 语 选择 资 和人是最 要的钱 终 o( _ )o…∩ ∩