高并发的一些解决方案

本文探讨了高并发场景下的解决方案,包括应用服务器的限流策略(令牌桶和漏桶算法)、异步化请求、统一网关入口,以及存储服务器的高并发处理,如数据库和Redis的优化。同时,文章强调了幂等性在处理高并发问题中的重要性,以防止数据错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是高并发

高并发是一个相对的概念,取决于生产环境,1000 的访问量对于一个很小的公司的网站来说已经是非常高的并发了,可能会出现故障,但是这个 1000 对于淘宝双11来说,就是微乎其微.高并发一般我们指的是突发性的高并发,指的是接近或者超过了生产环境的极限。

高并发问题

  • 应用服务器的高并发处理
  • 存储服务器的高并发处理

二、应用服务器的高并发

1、限流

我们的接入服务器也好还是应用服务器也好,需要首先考虑限流,比如我的承受能力是 1000/s,现在来了 10000,另外 9000 个等待或者是直接返回错误信息等提示内容。限流的方式,主要是令牌桶算法和漏桶算法。

  • 令牌桶算法
    指的是类似于线程池的这种东西,我根据我的承受能力,不断是向桶中放令牌,满了我就不放了,来的请求必须先从桶中拿出一个令牌,能拿到说明可以请求,拿不到就不允许请求

  • 漏桶算法
    就相当于我们漏水的水桶,一般漏水比放水慢,放水可以类比为来的请求,漏水可以类比为处理的请求,你发现只要来的请求大于处理的请求(放水的速度比漏水快,基本上就代表不管你放的水多快,漏都是固定的速度)

2、异步化请求

将整个业务需要经过的服务链进行拆分,将可以异步化的地方进行异步化,提前让请求返回结果,来降低请求的时间,提升服务器的吞吐量,那就代表着我们的服务器在相同的时间里面可以处理更多的请求

3、统一的程序入口-网关

我们的程序不是所有的功能都是高并发的,有的功能访问量非常多,有的很少. 假如说如果出现了突发性并发的时候,我能不能牺牲一部分不常用的功能,然后提供这个被高并发的常用功能的可用性,比如 2018 年淘宝双 11,淘宝降低了用户查询更改收货地址服务的权重.减少了他们的服务器使用量,将多出来的机器给更多人使用的如商品和订单服务来用。

三、存储服务器的高并发

1、数据库之类高并发,redis高并发,es 高并发

数据库为什么会在高并发的情况下会出现问题?其实数据库不能高并发的主要原因是在磁盘速度,其实就是 io速度。

  • 要想提高速度,可以采用搭建集群进行分片,将请求分发到不同的服务器来处理
  • 更换更快的固态硬盘,提升 io 的速度
  • 将数据放入到更快的内存中,也就是使用缓存,比如 redis,但是你提升了效率后就会带来新的问题,比如缓存的同步,缓存的击穿,雪崩,穿透,倾斜的问题
  • 如果使用的是模糊搜索之类的,可以放入到 es 进行全文检索

上面都可以成为数据的异构

2、redis 高并发了怎么办

多级缓存,对于我们放到 redis 中的这些用于查询的数据是经常查询的,我们的应用服务器每次都要去 redis 中获取这个数据,大部分情况下获取到的还是一样的,那有必要每次都去查询 redis 吗?没有必要,我们可以将这些数据也缓存到我们的应用或者接入服务器,下次访问的时候直接从这些服务器返回数据,但是主要也要保证数据的同步问题,而且这个缓存的有消息一定要小于redis 的数据的有效期。

3、es 之类的高并发了怎么办

es 会发生高并发的时候可能是大量的人在搜索某几个关键词,我们可以将这些查询频率比较高的数据缓存起来,然后通过访问缓存来降低 es 的搜索

4、不管是什么存储型的服务器高并发,其实高并发的数据大部分都是一些热点数据,这些数据我们是可以做静态化。

四、幂等性的问题

​ 在高并发的情况下我们要考虑幂等性的问题,比如我们在使用异步化来解决一部分并发的时候,异步之前的结果我们立刻返回了,但是异步后的结果是另外一个程序在处理,可能会出现多次处理,导致数据多次修改的问题,最终结果不一致。所有的修改操作天然是非幂等的,需要人为控制变成幂等的,代表着通过程序、应用服务器来对同一个重复修改请求进行拦截,请求已被处理了,再次请求只需返回请求的处理结果即可,这样来减少数据的错误量。
幂等的主要解决点是这个请求是否处理,处理过的请求进行存储,存储的数据有一个唯一标识,下次只需根据数据标识判断有没有。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值