大流量高并发


基本原则:分而治之,扇入和扇出.

前端:异步请求(ajax)

服务器:缓存(expires),压缩(gzip),负载均衡(扇出)

后端:缓存(redis),RPC(语言性能提升php->go),队列(异步处理)

数据层:分库(业务拆分),分区(表拆分),批量(写入更新),乐观锁(多版本并发控制),集群(读写分离)

搜索:ES(全文搜索引擎)

架构:微服务(高并发大流量往往集中在部分的业务中,微服务按业务拆分,可以针对部分业务做集群,优化和扩展)

并发与并行

并行意味着程序在任意时刻都是同时执行的。

并发意味着程序在单位时间内是同时执行的。

服务器

静态资源缓存,nginx对js,css,image,font做资源缓存.

gzip,nginx使用gzip压缩文本资源.

负载均衡,将请求做扇出处理.

提升单机配置或使用集群.

前端

异步请求,ajax请求.

资源静态化,静态的html页面.

CDN,内容分发网络,加速地域节点访问速度.

缓存,使用get请求可以缓存资源.

避免重复提交,如短信60秒倒计时.

扇出处理,比如图片加水印,可以在前端完成再上传.

后端

服务端的资源是有限的,要考虑合理的使用cpu,I/O,内存,网络连接数,端口等.

增加资源,提高网络带宽,高性能的服务器和数据库.

请求分流,集群,分布式的系统架构.

应用优化,比如使用go优化php的相关应用.

请求队列,比如发送邮件.

数据层

InnoDB支持行级锁,写入更快.

数据库集群,读写分离.

分库,分表,分区.

redis缓存

批量写入更新.

如何处理高并发业务场景

  • 前端:异步请求+资源静态化+CDN
  • 后端:请求队列+轮询分发+负载均衡+共享缓存
  • 数据层:redis缓存+数据分表+写队列
  • 存储:raid阵列+热备(高可用)
  • 网络:dns轮询+DDOS攻击防护