大流量高并发
大约 2 分钟
大流量高并发
基本原则:分而治之,扇入和扇出.
前端:异步请求(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攻击防护