大型网站架构演化

Catalogue
  1. 1. 特点
  2. 2. 初始阶段
  3. 3. 应用服务和数据服务分离
  4. 4. 使用缓存
  5. 5. 服务器集群及读写分离
  6. 6. 使用反向代理和CDN加速网站相应
  7. 7. 分布式文件系统和数据库系统
  8. 8. 使用NoSQL和搜索引擎
  9. 9. 业务拆分
  10. 10. 分布式服务
  11. 11. 参考文章
  12. 12. 引用

特点

  • 高并发
  • 大流量
  • 高可用
  • 海量数据

初始阶段

一台服务器搞定一个网站
初始阶段架构图

应用服务和数据服务分离

应用和数据服务分类图

使用缓存

现在的网站基本上都会使用缓存,即:80%的业务访问都会集中在20%的数据上
缓存改善性能图

服务器集群及读写分离

  • 因为单一应用服务器能够处理的请求连接有限,在网站访问高峰时期,应用服务器会成为整个网站的瓶颈。
    因此使用负载均衡处理器势在必然。通过负载均衡调度服务器,
    可将来自浏览器的访问请求分发到应用的集群中的任何一台服务器上。
  • 当用户达到一定规模后,数据库因为负载压力过高而成为网站的瓶颈
    而目前主流的数据库都提供主从热备功能,通过配置两台数据库主从关系,
    可以将一台数据库的数据更新同步到另一台服务器上。
    网站利用数据库这一功能实现数据库读写分离,从而改善数据库负载压力。
    读写分离图

使用反向代理和CDN加速网站相应

提高网站的访问速度,主要手段有使用CDN和反向代理
CDN和反向代理的基本原理都是缓存,区别在于CDN部署在网络提供商的机房,
而反向代理是部署在网站的中心机房,当用户请求到达中心机房后,首先访问的反向代理,
如果反向代理缓存着用户请求的资源,则直接返回给用户。
反向代理CDN图

分布式文件系统和数据库系统

任何强大的单一服务器都满足不了大型网站持续增长的业务需求。

分布式数据库时网站数据库拆分的最后手段,只用在单表数据规模非常大的时候才使用。
不到不得已时,网站更常用的数据库拆分手段是业务拆分,将不同业务的数据部署在不同的物理服务器上。

使用NoSQL和搜索引擎

NOSQL图

业务拆分

大型网站为了应对日益复杂的业务场景,通过使用分而治之的手段将真个网站业务拆分成不同的产品线。

具体到技术上,也会根据产品线话费,将一个网站拆分成许多不同的应用,每个应用独立部署维护。
应用之间可以通过超链接建立管理,也可以通过消息队列进行数据分发,
当然最多的还是通过访问同一个数据存储系统来构成一个关联的完整系统。

业务拆分图

分布式服务

由于每一个应用系统都需要执行许多相同的业务操作,
比如用户管理,session管理,那么可以将这些公用的业务提取出来,独立部署。
分布式服务图

参考文章

引用

记录点滴,成为更好的自己。 — weizhuo.ma