高并发问题解决基本思路

高并发问题解决基本思路

高并发问题的本质是有限的资源应对大量的请求

一般存在以下解决方向

  • 提高单位资源处理能力

  • 增加资源

  • 减少请求

  • 提升处理速度

以下分别讨论

提高单位资源处理能力

一般是采用更高性能的硬件或者更有针对性的硬件驱动。例如,使用固态硬盘替换机械硬盘以提升MySQL的处理能力

增加资源数量

单位资源的处理能力总是受制于物理极限的天花板,并且高性能硬件往往更加昂贵。因此通过增加资源数量来提升处理能力才是主流。这种方式也称为水平扩展。水平扩展要能实现并非无代价,代价就是无状态性。要满足无状态性通常有三种方案

  • 相同session路由到同一服务器

  • 集中session存储

  • 只用token存储session状态

减少请求

减少请求一般有三种思路

  • 错峰

  • 排队

  • 限流

处理速度

请求到一般处理流程是

前端访问->前置条件校验->业务处理->数据存储->结果响应返回。

根据经验,前置条件校验,业务处理,数据库IO是耗时关键

前置条件校验优化思路:

  • 缓存:前置条件校验一般是查询多,解决思路是使用更近的存储,代价是需要维护缓存一致性。

业务处理优化思路:

  • 异步:有些处理并不是实时需要,如通知等,可以异步处理

  • 并行:业务处理往往包含许多步骤,假如有些步骤没有依赖关系,可以并行处理,根据情况采用合适的并发模型。假如有依赖关系也可以尝试重新设计数据模型消除依赖。并行的代价是提升编码复杂性,需要小心设计避免资源竞争问题

数据库IO优化思路:

  • 缓存:尽量使用缓存分担数据库查询压力

  • 分散:例如MySQL主从模式分散请求流量

  • 异步持久化:需要极致性能的场景不要直接磁盘访问。通过kafka之类的消息中间件异步持久化