本文主要讨论高并发系统应该从哪些方面着眼,提供一个大概的思路
初步方案 加钱
- 提升机器的性能 提升硬件 比如8核心 到 16核心
- 部署多台机器分担压力 这就需要负载均衡
- 大部分应用的瓶颈在数据库 可以读写分离 分库分表
- 引入缓存 缓存一致性的问题 可以通过订阅binlog日志或者MQ的方式保证最终一致性
- Redis 一般部署为集群
限流
到了这里,系统已经具有很高的处理能力了
但是一个接口本来就是只能处理一秒一万次请求,但是突然出现峰值,在某一天有一秒一百万请求应该如何处理呢?
答案是限流,比如使用MQ 先把请求放入MQ 然后慢慢消化,大家排着队来,出口按照能力慢慢消化,当然结果往往就是用户需要等待一会。
比如支付场景 秒杀场景 抢购场景
同时,我们还需要加上限流,如果我们的系统只能承载一万的流量,那我们就只能允许流量一万一个批次的过来。
DNS 负载均衡
但是入口都是统一的,如果入口撑不住则应该使用 DNS负载均衡 将同一个域名分发的不同的服务区处理
其他
- 将静态资源放入CDN中加速访问 且不消耗应用服务器的性能
- 搜索用ES加快查询
代码层面
- 开多个线程提高系统的处理能力
- 连接池的方式降低数据库连接
- 使用分布式锁避免集群环境下的竞争问题
- 使用MQ避免分布式锁带来的开销问题
总结
加钱 缓存 队列 拆分 池化