什么是高并发
通俗来讲,高并发是指在同一个时间点,有很多用户同时的访问同一接口或者urI地址。它经常会发生在有大活跃用户量,用户高聚集的业务场景中。如: 淘宝,京东,天猫,微信支付等等
高并发造成的问题
- 数据不一致问题,多个用户对同一个数据进行读写操作,第一个用户已经把100改成了99,第二个用户读取时也是100,同样也拿走了一个,依旧把100改成99,实际上已经拿走了2个,数据却只减了一个
- 安全问题,高并发容易引起安全问题,如恶意攻击,导致信息泄露等问题
- 性能问题,当一个请求发生,系统会做出相应的计算,高并发时会产生大量的计算,增加系统的负载,轻则导致系统相应变慢,重则导致服务崩溃或者停止响应
- 缓存击穿,在高并发的情况下,可能会出现大量没有命中缓存的数据,数据库瞬时压力过大,导致崩溃
- 队列问题,在高并发环境下,请求在排队等待的情况下,队列管理不当,导致拥堵,请求出现大量的失败或者超时
解决方案
- 提升硬件,这是最简单有效的处理方式,但是这样提升有限
- 负载均衡,利用多台机器来分担压力,但是要求程序需要支持负载均衡的部署方式(如redis或者其它中间件来统一存储session)
- 分布式缓存,有效应用缓存,数据库毕竟是对磁盘操作,其速度远远慢内存中数据读写的速度,有效运用缓存可以非常好的处理并发问题,这里如果有缓存中间件将缓存分散到多台服务器上,减少单台服务器的压力。
- 数据库优化,合理建立索引,优化查询效率,提升处理能力(如分库分表,读写分离,一主多从,多主多从)
- 异步处理,当请求量过大,服务器吞吐有限,可以采用异步处理的方式(消息队列,协程,异步IO等)
- 架构优化,将服务拆分,形成更小的模块(微服务),以小模块进行单独部署,通过网关集群化
- 代码优化,合理性设计开发代码,通过更优的算法或者更有效率的代码,提升系统的执行效率
当然这些解决方案要结合实际场景来灵活运用,运用的越多,相应的维护成本越大、维护难度越大。你总不能建个飞机跑道来跑电动车吧。