大型网站技术架构剖析

大型网站技术架构剖析

大型网站系统特点

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

大型网站发展演化过程

一台服务器

特点:没人

应用程序、数据库、文件都在一个服务器。

应用服务器和数据服务器分离

应用服务器

  • 处理大量业务
  • 需要更快更强的CPU

数据服务器

  • 需要快速磁盘检索和数据缓存
  • 需要更快的磁盘和更大的内存

文件服务器

  • 需要更大的硬盘

使用缓存改善网站性能

  • 本地缓存
  • 远程缓存(分布式缓存)

使用应用服务器集群改善并发处理能力

  • 负载均衡服务器
  • 用户服务器集群

数据库读写分离

利用数据库的主从热备份,来实现数据库的读写分离。从而改善数据库的负载压力。

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

基本原理都是缓存(都可以缓存一些静态资源)

反向代理服务器

  • 缓存用户请求资源

CDN服务器

  • 目的:尽早返回数据给用户

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

分布式数据库是网站数据库拆分的最后手段。不到万不得已的时网站更常用的拆分手段是业务拆分。

使用NoSQL和搜索引擎

应对更复杂的存储和检索需求

业务拆分

应对日益复杂的业务场景

拆分方法

  • 根据产品线拆分成不同的应用

应用产品之间的关系

  • 超链接
  • 消息队列进行数据分发
  • 访问同一个数据存储系统

分布式服务

通过分布式服务调用公用业务服务完成具体业务需要

大型网站架构模式

分层

  • 应用层
  • 服务层
  • 数据层

分割

对不同的层继续进行垂直的分割

分布式

分层、分割的主要目的就是为了便于分布式部署。

分布式就是为了用更多的计算机来完成同样的功能

  • 分布式应用和服务
  • 分布式静态资源
  • 分布式数据和存储
  • 分布式计算
  • 分布式配置
  • 分布式文件系统

集群

多台服务器部署相同应用构成一个集群。通过负载均衡设备对外提供服务

有点:

  • 提高系统并发访问量
  • 提高系统可用性(冗余)

缓存

改善性能的第一手段

  • 内容分发网络CDN
  • 反向代理
  • 本地缓存
  • 分布式缓存

异步

  • 共享内存队列(单服务器)
  • 分布式消息队列(分布式系统)

冗余

访问和负载很小的服务器也至少要部署两台构成集群。目的就是实现服务的高可用。

自动化

  • 自动化报警
  • 自动化失效转移
  • 自动化失效恢复
  • 自动化降级
  • 自动化分配资源

安全

  • 身份认证
  • 加密
  • 验证码识别
  • 对于XSS,SQL注入,进行编码转换等
  • 敏感信息过滤
  • 风险控制

网站性能测试优化

性能测试指标

  • 响应时间
  • 并发数
  • 吞吐量
  • 性能计数器

性能测试方法

  • 性能测试
  • 负载测试
  • 压力测试
  • 稳定性测试

常见优化手段

用户视角

  • 优化页面HTML样式
  • 利用浏览器的并发和异步
  • 调整浏览器缓存策略
  • CDN和反向代理

开发人员

  • 使用缓存加速数据读取速度
  • 使用集群提高系统吞吐能力
  • 使用异步消息加速响应及实现消峰
  • 优化代码改善程序性能

运维人员

  • 优化骨干网
  • 使用高性价比定制服务器
  • 使用虚拟化技术优化资源利用

网站性能优化

web性能优化

  • 减少HTTP请求(合并css、javascript、图片)
  • 使用浏览器缓存(使用Cache-Control和Expire属性)
  • 启用压缩(减少网络数据传输量)
  • 减少页面阻塞(CSS文件尽量放在最上面,javascript放在最下面)
  • 减少Cookie传输
  • CDN加速
  • 反向代理
    • 安全
    • 加速web请求(可以缓存一些静态资源)
    • 负载均衡

应用服务器优化

  • 分布式缓存

  • 异步操作(消息队列)

    原则:任何可以晚点在做的事都可以晚点再做

  • 使用集群

    使用负载均衡技术来构建

存储服务器优化

  • 访问频繁的页面不应该访问数据库(如首页,最好是静态的)
  • 谨慎使用锁操作
  • 对缓存的管理提高到和其他服务器一样的级别
  • 大文件小文件分别对待

大型网站架构设计误区

  • 一味追求大公司的解决方案
  • 为了技术而技术
  • 企图用技术解决所有问题