高并发网站解决方案

1 服务器

  • 使用高性能CPU主机
  • 数据库使用物理机,避免虚拟机,提升IO性能
  • 使用SSD磁盘,提升IO性能
  • 提升带宽

2 数据库

2.1 读写分离

主从同步,实时将主库的数据增量复制到从库,而且一个主库可以连接多个从库同步。

  • 减轻主库(写)压力
  • 从库(读)可水平扩展(加从库机器)
  • 避免主从同步延迟
    • 优化MySQL参数,比如增大innodb_buffer_pool-size,让更多操作在内存中完成,减少磁盘操作
    • 硬件推荐的方案
    • 业务代码优化,将实时性要求高的某些操作,使用主库做读操作

2.2 垂直分库

按业务拆分成不同的业务数据库,每个系统仅访问对应业务的数据库,避免或减少跨库访问。

  • 禁用或少用join操作,应在程序中组装数据,让SQL更简单,一方面为以后进一步拆分业务做准备,另一方面也避免了 MySQL 中 join 的性能较低问题。

2.3 水平分库(sharding)

单表数据量过大影响读写性能,而又不能进一步垂直拆分时,考虑将数据按字段分类(如 ID,城市)拆分为多个表,即水平分库,拆分时需要考虑数据分布是否均匀、数据聚合度是否较高、冗余表等。

3 缓存

参见缓存解决方案

4 消息队列

5 代码

5.1 异步编程(async/await)

6 前端

6.1 HTML静态化

7 负载均衡、反向代理(nginx)

8 内容分发网络(CDN)

通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络“边缘”,使用户可以就近取得所需的内容,提高用户访问网站的响应速度。

9 分布式集群

  • 服务器按功能划分:Web服务器(集群)、数据库服务器(集群)、缓存服务器(集群)、附件服务器(集群)等。

10 镜像

CDN的实现分为三类:镜像、高速缓存、专线。

  • 镜像站点(Mirror Site),是最常见的,它让内容直接发布,适用于静态和准动态的数据同步。但是购买和维护新服务器的费用较高,还必须在各个地区设置镜像服务器,配备专业技术人员进行管理与维护。对于大型网站来说,更新所用的带宽成本也大大提高了。
  • 高速缓存,成本较低,适用于静态内容。Internet的统计表明,超过80%的用户经常访问的是20%的网站的内容,在这个规律下,缓存服务器可以处理大部分客户的静态请求,而原始的服务器只需处理约20%左右的非缓存请求和动态请求,于是大大加快了客户请求的响应时间,并降低了原始服务器的负载。  CDN服务一般会在全国范围内的关键节点上放置缓存服务器。
  • 专线,让用户直接访问数据源,可以实现数据的动态同步。

其他

  • 二八定律:80%的业务访问集中在20%的数据上。

参考

坚持原创技术分享,您的支持将鼓励我继续创作!