大型网站技术架构剖析

大型网站技术架构剖析

大型网站系统特点

  • 高并发,大流量

  • 高可用

  • 海量数据

  • 用户分布广泛,网络情况复杂

  • 安全环境恶劣

  • 需求快速变更,发布频繁

  • 渐进式发展

大型网站发展演化过程

一台服务器

特点:没人

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

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

应用服务器

  • 处理大量业务

  • 需要更快更强的CPU

数据服务器

  • 需要快速磁盘检索和数据缓存

  • 需要更快的磁盘和更大的内存

文件服务器

  • 需要更大的硬盘

使用缓存改善网站性能

  • 本地缓存

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

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

  • 负载均衡服务器

  • 用户服务器集群

数据库读写分离

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

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

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

反向代理服务器

  • 缓存用户请求资源

CDN服务器

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

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

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

使用NoSQL和搜索引擎

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

业务拆分

应对日益复杂的业务场景

拆分方法

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

应用产品之间的关系

  • 超链接

  • 消息队列进行数据分发

  • 访问同一个数据存储系统

分布式服务

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

大型网站架构模式

分层

  • 应用层

  • 服务层

  • 数据层

分割

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

分布式

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

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

  • 分布式应用和服务

  • 分布式静态资源

  • 分布式数据和存储

  • 分布式计算

  • 分布式配置

  • 分布式文件系统

集群

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

优点:

  • 提高系统并发访问量

  • 提高系统可用性(冗余)

缓存

改善性能的第一手段

  • 内容分发网络CDN

  • 反向代理

  • 本地缓存

  • 分布式缓存

异步

  • 共享内存队列(单服务器)

  • 分布式消息队列(分布式系统)

冗余

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

自动化

  • 自动化报警

  • 自动化失效转移

  • 自动化失效恢复

  • 自动化降级

  • 自动化分配资源

安全

  • 身份认证

  • 加密

  • 验证码识别

  • 对于XSS,SQL注入,进行编码转换等

  • 敏感信息过滤

  • 风险控制

网站性能测试优化

性能测试指标

  • 响应时间

  • 并发数

  • 吞吐量

  • 性能计数器

性能测试方法

  • 性能测试

  • 负载测试

  • 压力测试

  • 稳定性测试

常见优化手段

用户视角

  • 优化页面HTML样式

  • 利用浏览器的并发和异步

  • 调整浏览器缓存策略

  • CDN和反向代理

开发人员

  • 使用缓存加速数据读取速度

  • 使用集群提高系统吞吐能力

  • 使用异步消息加速响应及实现消峰

  • 优化代码改善程序性能

运维人员

  • 优化骨干网

  • 使用高性价比定制服务器

  • 使用虚拟化技术优化资源利用

网站性能优化

web性能优化

  • 减少HTTP请求(合并css、javascript、图片)

  • 使用浏览器缓存(使用Cache-Control和Expire属性)

  • 启用压缩(减少网络数据传输量)

  • 减少页面阻塞(CSS文件尽量放在最上面,javascript放在最下面)

  • 减少Cookie传输

  • CDN加速

  • 反向代理

    • 安全

    • 加速web请求(可以缓存一些静态资源)

    • 负载均衡

应用服务器优化

  • 分布式缓存

  • 异步操作(消息队列)

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

  • 使用集群

    使用负载均衡技术来构建

存储服务器优化

  • 访问频繁的页面不应该访问数据库(如首页,最好是静态的)

  • 谨慎使用锁操作

  • 对缓存的管理提高到和其他服务器一样的级别

  • 大文件小文件分别对待

大型网站架构设计误区

  • 一味追求大公司的解决方案

  • 为了技术而技术

  • 企图用技术解决所有问题

  • 本文作者: zhimiao

  • 本文链接: https://weizhimiao.github.io


往期精彩