高并发问题解决基本思路
高并发问题解决基本思路
高并发问题的本质是有限的资源应对大量的请求
一般存在以下解决方向
提高单位资源处理能力
增加资源
减少请求
提升处理速度
以下分别讨论
提高单位资源处理能力
一般是采用更高性能的硬件或者更有针对性的硬件驱动。例如,使用固态硬盘替换机械硬盘以提升MySQL的处理能力
增加资源数量
单位资源的处理能力总是受制于物理极限的天花板,并且高性能硬件往往更加昂贵。因此通过增加资源数量来提升处理能力才是主流。这种方式也称为水平扩展。水平扩展要能实现并非无代价,代价就是无状态性。要满足无状态性通常有三种方案
相同session路由到同一服务器
集中session存储
只用token存储session状态
减少请求
减少请求一般有三种思路
错峰
排队
限流
处理速度
请求到一般处理流程是
前端访问->前置条件校验->业务处理->数据存储->结果响应返回。
根据经验,前置条件校验,业务处理,数据库IO是耗时关键
前置条件校验优化思路:
- 缓存:前置条件校验一般是查询多,解决思路是使用更近的存储,代价是需要维护缓存一致性。
业务处理优化思路:
异步:有些处理并不是实时需要,如通知等,可以异步处理
并行:业务处理往往包含许多步骤,假如有些步骤没有依赖关系,可以并行处理,根据情况采用合适的并发模型。假如有依赖关系也可以尝试重新设计数据模型消除依赖。并行的代价是提升编码复杂性,需要小心设计避免资源竞争问题
数据库IO优化思路:
缓存:尽量使用缓存分担数据库查询压力
分散:例如MySQL主从模式分散请求流量
异步持久化:需要极致性能的场景不要直接磁盘访问。通过kafka之类的消息中间件异步持久化