第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

高并發(fā)解決方案之秒殺

標(biāo)簽:
Html5

一、什么是高并发


高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。高并发相关常用的一些指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPS(Query Per Second),并发用户数等。

响应时间:系统对请求做出响应的时间。例如系统处理一个HTTP请求需要200ms,这个200ms就是系统的响应时 间。

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

QPS:每秒响应请求数。在互联网领域,这个指标和吞吐量区分的没有这么明显。

并发用户数:同时承载正常使用系统功能的用户数量。例如一个即时通讯系统,同时在线量一定程度上代表了系统 的并发用户数。

二、什么是秒杀

秒杀场景一般会在电商网站举行一些活动或者节假日在12306网站上抢票时遇到。对于电商网站中一些稀缺或者特 价商品,电商网站一般会在约定时间点对其进行限量销售,因为这些商品的特殊性,会吸引大量用户前来抢购,并 且会在约定的时间点同时在秒杀页面进行抢购。

此种场景就是非常有特点的高并发场景,如果不对流量进行合理管控,肆意放任大流量冲击系统,那么将导致一系 列的问题出现,比如一些可用的连接资源被耗尽、分布式缓存的容量被撑爆、数据库吞吐量降低,最终必然会导致 系统产生雪崩效应。

一般来说,大型互联网站通常采用的做法是通过扩容、动静分离、缓存、服务降级及限流五种常规手段来保护系统 的稳定运行。

三、如何解决秒杀的高并发

1. 限流

在讨论为什么需要限流之前,我们先聊一聊生活中那些随处可见的限流场景。

例如上下班高峰期,大量人群涌入地铁站,会造成严重拥堵,原本从站厅到站台最多只需花费5分钟左右的时间, 却在被限流管制下被迫花费30分钟或更久才能顺利进入站台。

https://img1.sycdn.imooc.com/5094b4680850e23207280392.jpg


https://img1.sycdn.imooc.com/2e56ca680850e23223091732.jpg


上面两张图片就展示了地铁拥挤的场景,如果这所有的人全部涌入站台,那么会造成更多的人无法上车,所以采取 了管制之后,我们可以让人们通过地面和站厅层的双重排队等待,减轻站台的压力,保证每一位乘客最终都能顺利 的上车。

在电商系统的秒杀中,也会有大批量的用户同时涌入,鉴于只有少部分用户能够秒杀成功,所以要限制大部分流 量,只允许少部分流量进入服务后端。

限流可以采用限制服务器的连接等待数量以及等待时间,每次只放行少量用户,让更多的用户处于假排队的状态。 例如tomcat的配置:

1<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxThreads="800" acceptCount="1000"/>

其中最后两个参数意义如下:

maxThreads:tomcat起动的最大线程数,即同时处理的任务个数,默认值为200 acceptCount:当tomcat起动的线程数达到最大时,接受排队的请求个数,默认值为100 这两个值如何起作用,请看下面三种情况

情况1:接受一个请求,此时tomcat起动的线程数没有到达maxThreads,tomcat会起动一个线程来处理此请求。

情况2:接受一个请求,此时tomcat起动的线程数已经到达maxThreads,tomcat会把此请求放入等待队列,等待 空闲线程。

情况3:接受一个请求,此时tomcat起动的线程数已经到达maxThreads,等待队列中的请求个数也达到了

acceptCount,此时tomcat会直接拒绝此次请求,返回connection refused

2. 页面静态化

首先我们可以使用Freemarker对页面进行静态化,让用户减少跟后端服务器之间的交互。这样就能降低服务器的 压力,如果条件允许我们可以采用CDN加速。

Freemarker的原理如下图,模板+数据通过Freemarker可以生成静态页面。

https://img1.sycdn.imooc.com/010a44680850e23203930166.jpg


CDN是将源站内容分发至最接近用户的节点,使用户可就近取得所需内容,提高用户访问的响应速度和成功率。 例如下图:北京网民会自动访问到离自己最近并且速度最快的服务器的资源。

https://img1.sycdn.imooc.com/c73aac680850e23204900368.jpg

                                               老富贵论坛

3. 引入Redis

限流和静态化都是为了减轻服务器后端的压力,但是最终用户的请求还是会落到服务器中,为了增加用户的体验 度,我们也应加快相应速度。后端代码和数据库之间的交互会降低相应速度,所以我们可以采用Redis来进行数据 的高速读取。

Redis是一款极其优秀的内存级别的NoSql数据库,单线程下读写速度能达到5w/s。所以我们在很多情况下都能利 用Redis去解决高速读取的问题。

特别是库存量的超卖现象,我们可以在开始秒杀的时候,把总的库存量存入Redis中,每当用户来抢购时,利用String类型的decr方法去减一,如果减一成功就视认为抢够成功,并把用户和商品信息存入Redis的订单条目中, 当最终抢购结束时,我们再一并把Redis的订单信息存入到数据库中。

代码参考:

1	# 设置总的待抢购数量为10000002	set amount 1000000;3	# 抢购 数量减一4	decr amount 56	# 把用户信息存入到抢购成功的集合中,由商品ID命名来区分7	lpush 用户ID 商品ID

四、总结

通过上述3种方案可以解决大部分场景下的秒杀问题,当然高并发下也会出现更多的意外的状况,那么我们可以针 对自己的业务,资源的调度进行更多方位的尝试,找到最适合自己的解决方案。


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消