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