首页 > 其他分享 >并发

并发

时间:2023-01-04 11:14:08浏览次数:36  
标签:请求 处理 并发 秒杀 服务器 多线程

问:什么是并发?

并发指的是并发访问,也就是在某个时间点,有多少个访问请求同时到来。并发处理能力主要看服务器配置,服务器配置越高,在单位时间里处理的请求就越多。

问:衡量一个服务器处理并发能力的指标有哪些?

1️⃣QPS(每秒查询率):每秒请求数量。

2️⃣吞吐量:单位时间内处理请求的数量。

3️⃣响应时间:系统对请求做出响应的时间。

4️⃣并发用户数:能够承载正常使用系统的用户数量。

问:如何提高服务器的并发处理能力?

两种方式,第一种提高单机硬件的性能,第二种采用分布式开发架构,增加机器数量。

前者被称为“垂直扩展”,后者被称为“水平扩展”,提升硬件性能是有极限的,终极解决方法主要还是靠后者水平扩展
问:并发和多线程之间是什么关系?

实现高并发是目的,采用多线程一种实现手段。并发是指服务器同时处理多个请求的能力,而处理并发最好的方式就是采用多线程
问:高并发和多线程的应用场景有哪些?

多线程应用场景:

1️⃣连续操作(多用户请求)

2️⃣并行计算(执行慢而不影响主程序的程序块)

3️⃣等待网络、文件系统、用户或其他I/O响应(切片上传、Scoket)

高并发应用场景:

访问量过大导致的服务器处理不过来(电商秒杀活动、12306抢票)

问:如何处理高并发?

1、前端处理

1️⃣采用前后端分离模式,前端项目单独部署至服务器。

2️⃣前端对请求接口进行置灰操作,等到这个时间点再开启。

3️⃣前端加入CDN加速服务。

4️⃣前端引入Nginx,如果不够,加入集群Nginx,还不行,直接上LVS。

5️⃣前端对访问的URL 进行特殊处理,MD5加密请求后台,或加入特殊的字符去请求后台,后台识别到进行访问,否则直接返回null。

6️⃣前端限流:这个很简单,一般秒杀不会让你一直点的,一般都是点击一下或者两下然后几秒之后才可以继续点击,这也是保护服务器的一种手段。

2、后端处理

1️⃣服务单一原则,秒杀就是秒杀服务,商品就是商品服务,一个服务挂了,不至于把其他服务搞崩溃。

2️⃣Redis做集群,读多写少,Redis集群,主从同步、读写分离 还搞点哨兵,开启持久化直接无敌高可用!

3️⃣Nginx大家想必都不陌生了吧,这玩意是高性能的web服务器,并发也随便顶几万不是梦,但是我们的Tomcat只能顶几百的并发呀,那简单呀负载均衡嘛,一台服务几百,那就多搞点,在秒杀的时候多租点流量机。

4️⃣秒杀的时候肯定是涉及到后续的订单生成和支付等操作,但是都只是成功的幸运儿才会走到那一步,那一旦100个产品卖光了,return了一个false,前端直接秒杀结束,然后你后端也关闭后续无效请求的介入了。

5️⃣库存预热, 秒杀前你通过定时任务或者运维同学提前把商品的库存加载到Redis中去,让整个流程都在Redis里面去做,然后等秒杀介绍了,再异步的去修改库存就好了。

6️⃣削峰填谷MQ你可以把它放消息队列,然后一点点消费去改库存就好了嘛,不过单个商品其实一次修改就够了,我这里说的是某个点多个商品一起秒杀的场景。

7、加入分布式锁,多个请求来的时候,可以防止超卖问题。

8️⃣限流&降级&熔断&隔离。

附:

大规模并发的场景

超发:假设秒杀场景中,商品有100个,最后一刻已经抢购了99个还剩下1个,这个时候,客户大批量请求过来,造成系统多个并发请求,这批请求读取到的余量都是1,然后都通过了这一余量判断,导致超发(抢购量>实际拥有量)。

解决思路:

1️⃣悲观锁思路,修改数据的时候先锁定,等这个线程处理完数据其他线程再去操作数据,但是高并发情况下,会有很多请求,这样一个一个处理极其费时,连接数被耗尽导致系统异常,有些线程甚至永远也不可能抢到锁,这种请求也会死在那里。——不可行

2️⃣FIFO队列思路(FIFO:先进先出)我们把大批量请求放在队列中,采用FIFO,让请求先进先出,这样就不会导致某些请求永远获取不到锁。虽然解决了锁的问题,但是有个新的问题——高并发下因为请求很多可能一瞬间将内存“撑爆”,然后系统又陷入异常;其次队列处理速度跟不上WEB请求涌入的速度,导致队列内请求越来越对,系统瘫痪。——不可行

3️⃣乐观锁思路,乐观锁就是带着版本号去请求,只有内存中的版本号和请求的版本号一致才能抢购成功,其他线程都会返回抢购失败。这样就不用考虑队列的问题,不过乐观锁的缺点是增大了CPU开销,综合来说这是一个比较好的解决方案。——可行

标签:请求,处理,并发,秒杀,服务器,多线程
From: https://www.cnblogs.com/damugua/p/17024282.html

相关文章

  • 06.一文看懂并发编程中的锁
    大家好,我是王有志。关注王有志,一起聊技术,聊游戏,从北漂生活谈到国际风云。相信你经常会听到读锁/写锁,公平锁/非公平锁,乐观锁/悲观锁等五花八门的锁,那么每种锁有什么用呢?它......
  • 从零部署个人网站并发布上线【ASP】-阿里云服务器
      视频链接:https://www.bilibili.com/video/BV1Us411E7vU?p=1&vd_source=f47173c6ece362dfbe9a439ae6addcce 1.阿里云ECS服务器/域名购买与管理2.远程连接(windows......
  • 在多线程创建TFPHTTPClient对象并发送请求时出现Could not initialize OpenSSL librar
    在多线程创建TFPHTTPClient对象并发送请求时出现CouldnotinitializeOpenSSLlibrary应该怎么解决?单线程的时候没有遇到。经网友指导下使用以下方法就可以解决这个问题:......
  • 记一次并发工具类countdownlantch 在线程池中的使用
    首先新建一个 ThreadFactory:packagecn.likui.common.thread.pool;importjava.util.concurrent.ThreadFactory;importjava.util.concurrent.atomic.AtomicInteger......
  • 浅谈Java并发
    Java并发是比较难的知识点,难于对并发的理解。并发要从操作系统和硬件层面去理解,才会比较深入,而不单单是从编程语言的逻辑去理解。首先对于并发要清楚的几点:线程可能在任......
  • 并发学习笔记
    并发三大特性可见性当一个线程修改了共享变量的值,其他线程能够看到修改的值。保证可见性的方式:volatile修饰变量内存屏障:Unsafe.getUnsafe().storeFence();synchr......
  • 狂神说Go语言—并发编程
    聊聊进程、线程、协程多线程上方左图所示:在主线程中为main方法左图的右边为test方法,在main方法中调用test方法,mian方法执行就会先去执行test方法,执行完后再回到main......
  • 一次多线程并发查询导致结果混乱的问题的排查和记录·JAVA·2022
    业务背景该业务是报表查询类业务:要求从销售出库数据(存储于ElasticSearch索引中)中,按照管理者分组聚合查询各个管理者一定时间段内的动销汇总数据,如出库金额、毛利率等。但......
  • 【Storm篇】--Storm并发机制
    =========================================================声明:由于不同平台阅读格式不一致(尤其源码部分),所以获取更多阅读体验!!个人网站地址:​​http://www.lhworldblog.......
  • Linux下c++开发的轻量级、高性能、高并发的web服务器
     代码:WebServer.zip项目描述:通过HTTP协议与客户端(通常是浏览器(Browser))进行通信,来接收、存储、处理来自客户端的HTTP请求,并对其请求做出HTTP响应,返回给客户端其请......