【读书笔记】大型网站技术架构

关于大型网站

大型网站是相当于企业级应用来说的,特点有

  • 高并发,大流量
  • 高可用
  • 海量数据
  • 用户分布广泛,网络情况复杂
  • 安全环境恶劣
  • 需求快速变更,发布频繁
  • 渐进式发展

核心要素

架构是“最高层次的规划,难以改变的规定”。主要关注五个要素:

  • 性能
  • 可用性(Availability)
  • 伸缩性(Scalability)
  • 扩展性(Extensibility)
  • 安全性

大型网站追求的性能指标

可用性 availability

在服务器宕机时,服务和应用是否依旧可用。网站使用的商用服务器硬件的设计目标本身并不保证高可用性。必须在系统设计层面予以考虑。

伸缩性 scalability

定义:往集群中加入服务器的手段,缓解并发访问压力的难易程度

扩展性 extensibility

满足功能需求的难易程度。一般使用事件驱动的架构或分布式服务实现。

安全性 security


大型网站的演化发展历程

任何大型网站都是从小网站进化出来的:

阶段 1

应用程序、文件、数据库都在同一台服务器上
【读书笔记】大型网站技术架构

阶段 2

应用和文件、数据分离。使用三台专职服务器:

  • 文件服务器:执行大量业务逻辑,需要CPU优化的硬件

  • 数据库服务器:磁盘读写和缓存读写,需要快速的硬盘和内存

  • 文件服务器:大硬盘
    【读书笔记】大型网站技术架构

阶段 3

数据库成为瓶颈。加入对最hot的20%的数据缓存:

  • 应用服务器上的本地缓存(大小受限)

  • 专门的分布式缓存服务器集群上的远程缓存
    【读书笔记】大型网站技术架构

阶段 4

应用服务器成为瓶颈。将应用服务器扩展为集群。
此时的问题:

  • Session管理:4种方式
    • 复制:服务器之间同步所有session。资源利用率太低。
    • 绑定:利用load balancer的源地址Hash,确保同一IP的请求被分发到同一服务器。可用性目标很难达到,一旦某台服务器宕机,它维护的所有session就会丢失
    • Cookie记录:不少网站采用。但受限cookie的大小,并且如果用户关闭浏览器的cookie功能,session就将无法工作。
    • 专用session服务器:将应用服务器分为有状态和无状态部分。有状态的部分用专门的session服务器来维护。一般来说redis是一个很好的选择。
      【读书笔记】大型网站技术架构

阶段 5

对数据看的写操作和未命中缓存的读操作,在用户达到一定规模后使得数据库再次成为瓶颈。这时启用主从备份功能:

1.写数据直接写到主数据库
2.主数据库通过主从备份机制把写数据更新到从数据库
3.读操作读取从数据库
【读书笔记】大型网站技术架构

阶段 6

随着网站用户群扩散,特定地区的用户访问网站会遇到性能问题。此时开始对前端性能进行优化,启用CDN和反向代理
【读书笔记】大型网站技术架构

阶段 7

单机数据库和文件系统不能满足性能和高可用性需求,启用分布式数据库和分布式文件服务器:

  • 分布式存储系统的三类故障:

    • 瞬时鼓掌:网络中断、服务器GC等,可重试后自行恢复
    • 临时故障:交换机宕机、网卡松动、内存损坏、CPU过热等,需要人工干预,持续几十分钟到几个小时
    • 永久故障:硬盘损坏
  • 使用备份和冗余

  • 服务器宕机下的失效转移:确认失效 -> 访问转移 -> 数据恢复

  • CAP原理:可用性、某种程度上的数据一致性、伸缩性之间的权衡

    • 强一致:各个副本数据总是一致的,对更新和读操作的响应也是一致的
    • 用户一致:各个副本的数据可能是不一致的,但是用户一旦访问数据,就会通过纠错和校验机制确保用户得到的数据是一致正确的
    • 最终一致:各个副本的数据可能是不一致的,用户得到的数据也可能是不一致的(同一个用户连续访问,或者多个用户同时访问,结果不同)。但是系统经过一段时间的自我恢复和修正,数据最终达到一致。

【读书笔记】大型网站技术架构

阶段 8

网站业务越来越复杂,对搜索和存储的需求也越来越复杂。此时引入NoSQL和非数据库查询技术,如搜索引擎。
【读书笔记】大型网站技术架构

阶段 9

业务场景复杂度与日俱增,此时开始采取分而治之的手段把网站业务拆分成不同的产品线。技术上网站被拆分成多个独立维护的应用。应用之间通过如消息队列等手段通信。

【读书笔记】大型网站技术架构

阶段 10

随着业务拆分越来越小,应用系统的整体复杂程度急剧上升,部署和维护越来越困难。此时采取分布式服务架构,把公共的可复用业务提取出来独立部署

【读书笔记】大型网站技术架构