:::tips 解决高并发问题从宏观角度来说有3个方向:

  • 提高单机并发:尽可能减小业务接口的RT(ResponseTime响应时间),提升单机性能和并发能力
  • 水平扩展:将热点服务水平扩展,做好负载均衡,提高整个集群的并发能力
  • 服务保护:做好服务熔断、降级保护措施,提高服务的高可用性

其中,水平扩展和服务保护侧重的是运维层面的处理,而提高单机并发能力侧重的则是业务层面的处理,也就是我们程序员通过编码来提升业务的单机并发能力 :::

提高单机并发

:::tips 在服务器性能固定的情况下,想要提高单机并发能力就需要尽可能缩短业务时间(ResponseTime),而对响应时间影响最大的往往是对数据库的操作,从数据库角度来说,业务无非是做读和写两种操作,因此,需要考虑从读、写两方面优化代码:

  • 读优化:
    • 优化代码和SQL语句
    • 使用Redis缓存高频数据
  • 写优化:
    • 优化代码和SQL语句
    • 异步写替换同步写
    • 合并写请求 :::

      合并写请求

      :::tips 合并写请求方案其实是参考高并发读的优化思路:当数据库写操作并发较高时,不再直接写到数据库,而是先将数据缓存到Redis,然后定期将缓存中的数据批量写入数据库

优点:

  1. 写缓存速度快,大大减少响应时间
  2. 降低了数据库写频率和写次数,减轻数据库并发压力

缺点:

  1. 实现相对复杂
  2. 依赖缓存系统可靠性
  3. 不支持事务和复杂业务

场景:

  • 写频率较高、写业务相对简单的场景 :::