日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

秒杀系统必须考虑的 3 个技术问题!

發(fā)布時(shí)間:2025/3/21 windows 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 秒杀系统必须考虑的 3 个技术问题! 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

來(lái)源:cnblogs.com/dreamworlds/p/5398468.html

1、并發(fā)隊(duì)列的選擇

Java的并發(fā)包提供了三個(gè)常用的并發(fā)隊(duì)列實(shí)現(xiàn),分別是:ArrayBlockingQueue、ConcurrentLinkedQueue 和 LinkedBlockingQueue 。

ArrayBlockingQueue是初始容量固定的阻塞隊(duì)列,我們可以用來(lái)作為數(shù)據(jù)庫(kù)模塊成功競(jìng)拍的隊(duì)列,比如有10個(gè)商品,那么我們就設(shè)定一個(gè)10大小的數(shù)組隊(duì)列。

ConcurrentLinkedQueue使用的是CAS原語(yǔ)無(wú)鎖隊(duì)列實(shí)現(xiàn),是一個(gè)異步隊(duì)列,入隊(duì)的速度很快,出隊(duì)進(jìn)行了加鎖,性能稍慢。

LinkedBlockingQueue也是阻塞的隊(duì)列,入隊(duì)和出隊(duì)都用了加鎖,當(dāng)隊(duì)空的時(shí)候線程會(huì)暫時(shí)阻塞。

在請(qǐng)求預(yù)處理階段,由于我們的系統(tǒng)入隊(duì)需求要遠(yuǎn)大于出隊(duì)需求,一般不會(huì)出現(xiàn)隊(duì)空的情況,所以我們可以選擇ConcurrentLinkedQueue來(lái)作為我們的請(qǐng)求隊(duì)列實(shí)現(xiàn)。

?

2、請(qǐng)求接口的合理設(shè)計(jì)

一個(gè)秒殺或者搶購(gòu)頁(yè)面,通常分為2個(gè)部分,一個(gè)是靜態(tài)的HTML等內(nèi)容,另一個(gè)就是參與秒殺的Web后臺(tái)請(qǐng)求接口。

通常靜態(tài)HTML等內(nèi)容,是通過(guò)CDN的部署,一般壓力不大,核心瓶頸實(shí)際上在后臺(tái)請(qǐng)求接口上。這個(gè)后端接口,必須能夠支持高并發(fā)請(qǐng)求,同時(shí),非常重要的一點(diǎn),必須盡可能“快”,在最短的時(shí)間里返回用戶的請(qǐng)求結(jié)果。

為了實(shí)現(xiàn)盡可能快這一點(diǎn),接口的后端存儲(chǔ)使用內(nèi)存級(jí)別的操作會(huì)更好一點(diǎn)。仍然直接面向MySQL之類的存儲(chǔ)是不合適的,如果有這種復(fù)雜業(yè)務(wù)的需求,都建議采用異步寫入。

當(dāng)然,也有一些秒殺和搶購(gòu)采用“滯后反饋”,就是說(shuō)秒殺當(dāng)下不知道結(jié)果,一段時(shí)間后才可以從頁(yè)面中看到用戶是否秒殺成功。

但是,這種屬于“偷懶”行為,同時(shí)給用戶的體驗(yàn)也不好,容易被用戶認(rèn)為是“暗箱操作”。推薦:秒殺系統(tǒng)設(shè)計(jì)的 5 個(gè)要點(diǎn)。

?

3、高并發(fā)下的數(shù)據(jù)安全

我們知道在多線程寫入同一個(gè)文件的時(shí)候,會(huì)存現(xiàn)“線程安全”的問(wèn)題(多個(gè)線程同時(shí)運(yùn)行同一段代碼,如果每次運(yùn)行結(jié)果和單線程運(yùn)行的結(jié)果是一樣的,結(jié)果和預(yù)期相同,就是線程安全的)。

如果是MySQL數(shù)據(jù)庫(kù),可以使用它自帶的鎖機(jī)制很好的解決問(wèn)題,但是,在大規(guī)模并發(fā)的場(chǎng)景中,是不推薦使用MySQL的。秒殺和搶購(gòu)的場(chǎng)景中,還有另外一個(gè)問(wèn)題,就是“超發(fā)”,如果在這方面控制不慎,會(huì)產(chǎn)生發(fā)送過(guò)多的情況。

我們也曾經(jīng)聽(tīng)說(shuō)過(guò),某些電商搞搶購(gòu)活動(dòng),買家成功拍下后,商家卻不承認(rèn)訂單有效,拒絕發(fā)貨。這里的問(wèn)題,也許并不一定是商家奸詐,而是系統(tǒng)技術(shù)層面存在超發(fā)風(fēng)險(xiǎn)導(dǎo)致的。

超發(fā)的原因

假設(shè)某個(gè)搶購(gòu)場(chǎng)景中,我們一共只有100個(gè)商品,在最后一刻,我們已經(jīng)消耗了99個(gè)商品,僅剩最后一個(gè)。

這個(gè)時(shí)候,系統(tǒng)發(fā)來(lái)多個(gè)并發(fā)請(qǐng)求,這批請(qǐng)求讀取到的商品余量都是1個(gè),然后都通過(guò)了這一個(gè)余量判斷,最終導(dǎo)致超發(fā)。(同文章前面說(shuō)的場(chǎng)景)

在上面的這個(gè)圖中,就導(dǎo)致了并發(fā)用戶B也“搶購(gòu)成功”,多讓一個(gè)人獲得了商品。這種場(chǎng)景,在高并發(fā)的情況下非常容易出現(xiàn)。

悲觀鎖思路

解決線程安全的思路很多,可以從“悲觀鎖”的方向開(kāi)始討論。

悲觀鎖,也就是在修改數(shù)據(jù)的時(shí)候,采用鎖定狀態(tài),排斥外部請(qǐng)求的修改。遇到加鎖的狀態(tài),就必須等待。

雖然上述的方案的確解決了線程安全的問(wèn)題,但是,別忘記,我們的場(chǎng)景是“高并發(fā)”。也就是說(shuō),會(huì)很多這樣的修改請(qǐng)求,每個(gè)請(qǐng)求都需要等待“鎖”,某些線程可能永遠(yuǎn)都沒(méi)有機(jī)會(huì)搶到這個(gè)“鎖”,這種請(qǐng)求就會(huì)死在那里。

同時(shí),這種請(qǐng)求會(huì)很多,瞬間增大系統(tǒng)的平均響應(yīng)時(shí)間,結(jié)果是可用連接數(shù)被耗盡,系統(tǒng)陷入異常。

FIFO隊(duì)列思路

那好,那么我們稍微修改一下上面的場(chǎng)景,我們直接將請(qǐng)求放入隊(duì)列中的,采用FIFO(First Input First Output,先進(jìn)先出),這樣的話,我們就不會(huì)導(dǎo)致某些請(qǐng)求永遠(yuǎn)獲取不到鎖。看到這里,是不是有點(diǎn)強(qiáng)行將多線程變成單線程的感覺(jué)哈。

然后,我們現(xiàn)在解決了鎖的問(wèn)題,全部請(qǐng)求采用“先進(jìn)先出”的隊(duì)列方式來(lái)處理。那么新的問(wèn)題來(lái)了,高并發(fā)的場(chǎng)景下,因?yàn)檎?qǐng)求很多,很可能一瞬間將隊(duì)列內(nèi)存“撐爆”,然后系統(tǒng)又陷入到了異常狀態(tài)。

或者設(shè)計(jì)一個(gè)極大的內(nèi)存隊(duì)列,也是一種方案,但是,系統(tǒng)處理完一個(gè)隊(duì)列內(nèi)請(qǐng)求的速度根本無(wú)法和瘋狂涌入隊(duì)列中的數(shù)目相比。

也就是說(shuō),隊(duì)列內(nèi)的請(qǐng)求會(huì)越積累越多,最終Web系統(tǒng)平均響應(yīng)時(shí)候還是會(huì)大幅下降,系統(tǒng)還是陷入異常。

樂(lè)觀鎖思路

這個(gè)時(shí)候,我們就可以討論一下“樂(lè)觀鎖”的思路了。樂(lè)觀鎖,是相對(duì)于“悲觀鎖”采用更為寬松的加鎖機(jī)制,大都是采用帶版本號(hào)(Version)更新。

實(shí)現(xiàn)就是,這個(gè)數(shù)據(jù)所有請(qǐng)求都有資格去修改,但會(huì)獲得一個(gè)該數(shù)據(jù)的版本號(hào),只有版本號(hào)符合的才能更新成功,其他的返回?fù)屬?gòu)失敗。

這樣的話,我們就不需要考慮隊(duì)列的問(wèn)題,不過(guò),它會(huì)增大CPU的計(jì)算開(kāi)銷。但是,綜合來(lái)說(shuō),這是一個(gè)比較好的解決方案。

?

有很多軟件和服務(wù)都“樂(lè)觀鎖”功能的支持,例如Redis中的watch就是其中之一。通過(guò)這個(gè)實(shí)現(xiàn),我們保證了數(shù)據(jù)的安全。

總結(jié)

以上是生活随笔為你收集整理的秒杀系统必须考虑的 3 个技术问题!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美日韩国产专区 | 日韩爱爱网站 | 国产精品久久一区二区三区动 | 特黄特色大片免费视频大全 | 中文日本在线 | 嫩草伊人久久精品少妇av | 欧美日韩免费在线视频 | 台湾swag在线观看 | a√天堂资源在线 | 国产91网址 | 91日韩在线| 中文字幕在线观看第二页 | 国产精品suv一区二区 | 亚洲图片中文字幕 | 久久人人添人人爽添人人片 | 男女视频免费看 | 亚洲av无码一区二区二三区 | 日韩av免费播放 | 欧美日韩高清 | 无码人妻丰满熟妇区五十路百度 | 人妻丰满熟妇岳av无码区hd | 性欧美在线观看 | 91超碰在线| 91精品国产综合久久久蜜臀图片 | 亚洲精品a区 | 亚洲精品综合 | 久久国产精品久久久久久 | 97久久人国产精品婷婷 | 波多野结衣免费观看视频 | 免费久久久 | 久久伊人99 | 在线观看涩涩视频 | 久久久三级 | 欧美另类专区 | 丝袜美腿一区二区三区 | 国产精品污 | 美女脱裤子打屁股 | av免费在线观看网站 | 男人插女人网站 | 蜜臀av免费一区二区三区水牛 | 色多多视频在线观看 | 亚洲经典在线 | 日韩一区视频在线 | 日韩黄片一区二区三区 | 在线播放小视频 | 久久久久久久久久久久久国产 | 91视频综合 | 国产视频在线观看免费 | 黄色a级片在线观看 | 国产情侣自拍一区 | 清冷男神被c的合不拢腿男男 | 无码人中文字幕 | 66精品 | 日本视频免费在线播放 | 久久少妇av | 亚洲免费在线视频观看 | 欧美男女视频 | 善良的女朋友在线观看 | 激情91| 99热播精品 | 成人av番号网 | 午夜天堂精品久久久久 | 激情久久av一区av二区av三区 | 成人黄色在线播放 | 国产精品免费一区二区三区都可以 | 日韩欧美一二区 | 超碰国产一区二区三区 | 国产无码精品在线播放 | 亚洲高潮无码久久 | 性大片潘金莲裸体 | 亚洲巨乳| 91av在线免费| 二十四小时在线更新观看 | 亚洲一区二区日韩 | 操操日 | 亚洲人成免费电影 | 国产福利午夜 | 国产九九在线 | 亚洲精品网站在线观看 | 一级片福利 | 久久人妻无码aⅴ毛片a片app | 美国伊人网 | 丁香花婷婷 | 欧美精品久久久久久久久 | 欧美色图激情小说 | 高清av网址 | 日韩欧美一级大片 | 欧美亚洲精品在线观看 | 五月天亚洲综合 | 亚洲乱码精品久久久久.. | 亚洲激情婷婷 | www.日本黄色 | 国产高清一区在线观看 | 在线观看一级片 | 久久免费的精品国产v∧ | av资源吧首页 | 欧美成人视屏 | 黄色a网站 | 人妻在线一区二区 |