女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

關(guān)于高并發(fā)和秒殺系統(tǒng)基本的概念的建立

C語(yǔ)言專家集中營(yíng) ? 來(lái)源:未知 ? 作者:李倩 ? 2018-06-04 17:10 ? 次閱讀

大家也許開(kāi)發(fā)過(guò)高并發(fā)的系統(tǒng)或者秒殺程序,但肯定都有接觸過(guò),像電商平臺(tái)的秒殺、搶購(gòu)等活動(dòng),還有12306春運(yùn)搶票。

互聯(lián)網(wǎng)公司,做一些有獎(jiǎng)活動(dòng),而且數(shù)量有限,獎(jiǎng)品給力,如果是先到先得的策略,那就類(lèi)似秒殺系統(tǒng)了。

這類(lèi)系統(tǒng)最大的問(wèn)題就是活動(dòng)周期短,瞬間流量大(高并發(fā)),很少人可以成功下單,絕大多數(shù)人都是很遺憾。所以從運(yùn)營(yíng)體驗(yàn)上,沒(méi)有成功下單的人,心里肯定是不好受的,如果這時(shí)候,因?yàn)榧夹g(shù)、網(wǎng)絡(luò)問(wèn)題,影響用戶體驗(yàn),那就更是罵聲一片。

這里,就來(lái)講一講技術(shù)在這種情況下,會(huì)發(fā)生和要做的事。

下面是基本的概念的建立。

第一:高并發(fā)

技術(shù)要做的事,一方面優(yōu)化程序,讓程序性能最優(yōu),單次請(qǐng)求時(shí)間能從50ms優(yōu)化到25ms,那就可以在一秒鐘內(nèi)成功響應(yīng)翻倍的請(qǐng)求了。

另一方面就是增加服務(wù)器,用更大的集群來(lái)處理用戶請(qǐng)求,設(shè)計(jì)好一個(gè)可靠且靈活擴(kuò)充的分布式方案就更加重要了。

第二:時(shí)間短

火熱的秒殺活動(dòng),真的是一秒鐘以內(nèi)就會(huì)把商品搶購(gòu)一空,而大部分用戶的感受是,提交訂單的過(guò)程卻要等待好幾秒、甚至十幾秒,更糟糕的當(dāng)然是請(qǐng)求報(bào)錯(cuò)。

那么一個(gè)好的秒殺體驗(yàn),當(dāng)然希望盡可能減少用戶等待時(shí)間,準(zhǔn)確的提示用戶當(dāng)前是否還有商品庫(kù)存。而這些,也是需要有優(yōu)秀的程序設(shè)計(jì)來(lái)保證的。

第三:系統(tǒng)容量預(yù)估

系統(tǒng)設(shè)計(jì)的時(shí)候,都需要有一個(gè)容量預(yù)估,那就是要提前計(jì)算好,我們?cè)O(shè)計(jì)的系統(tǒng),要承載多大的數(shù)量級(jí)。

假如線上前端服務(wù)器規(guī)格是8核16G內(nèi)存的服務(wù)器,而提交訂單的處理程序耗時(shí)100ms,那么可以簡(jiǎn)單計(jì)算一下:

每秒可以處理的訂單請(qǐng)求數(shù)=1000ms/100ms*8=80qps

上面這個(gè)結(jié)果,對(duì)于秒殺系統(tǒng)來(lái)說(shuō),肯定是非常不理想的。

如果能將處理程序耗時(shí)優(yōu)化后,降低到10ms,那么就可以達(dá)到800qps。

如果我們可以把程序繼續(xù)優(yōu)化,能快速區(qū)分開(kāi)有庫(kù)存和無(wú)庫(kù)存處理,那么無(wú)庫(kù)存時(shí)處理就有可能做到1ms甚至更低的耗時(shí)。這樣無(wú)庫(kù)存時(shí)就能有更好的性能,上萬(wàn)的qps也是可以達(dá)到的。

上面的預(yù)估,都是針對(duì)單機(jī),那么簡(jiǎn)單的增加前端服務(wù)器,是不是就能有更好的并發(fā)處理量呢?

肯定沒(méi)這么簡(jiǎn)單,因?yàn)閿?shù)據(jù)庫(kù)、緩存系統(tǒng)甚至機(jī)房網(wǎng)絡(luò)帶寬都會(huì)成為瓶頸。

于是就要有一個(gè)更好的分布式方案。

第四:好的分布式方案

一個(gè)好的分布式方案,首先當(dāng)然是穩(wěn)定可靠,不要出亂子,然后就是方便擴(kuò)充,最好的效果當(dāng)然是增加一臺(tái)服務(wù)器,并發(fā)處理量可以1:1線性增長(zhǎng)。

比如:?jiǎn)螜C(jī)qps是1k,那么10臺(tái)服務(wù)器可以做到1w,100臺(tái)可以做到10w每秒。

要做到這樣的線性增長(zhǎng)效果,就要杜絕出現(xiàn)瓶頸,否則還是會(huì)代價(jià)太大。

拒絕假的分布式尤其重要,比如:前端服務(wù)器是可以獨(dú)立存在的,但是都依賴集中的一個(gè)數(shù)據(jù)庫(kù)或者緩存系統(tǒng),那最后,一定是集中的那個(gè)數(shù)據(jù)庫(kù)或者緩存系統(tǒng)受不了,同樣無(wú)法做到一個(gè)好的分布式。

第五:關(guān)注系統(tǒng)的瓶頸

大家先有幾個(gè)基本的共識(shí),系統(tǒng)的處理速度

程序內(nèi)數(shù)據(jù)讀寫(xiě) > redis > mysql > 磁盤(pán)

單機(jī)網(wǎng)絡(luò)請(qǐng)求 > 局域網(wǎng)內(nèi)請(qǐng)求 > 跨機(jī)房請(qǐng)求

我們優(yōu)化程序的時(shí)候,盡量用最快的方式,盡量用最簡(jiǎn)短的邏輯。

用redis替代mysql來(lái)保存訂單處理中依賴的數(shù)據(jù),用程序中的提交的數(shù)據(jù)代替從redis中二次獲取數(shù)據(jù),比如:商品庫(kù)存信息,用戶訂單信息。

邏輯處理中,把速度快且提前中斷的邏輯放在最前面,比如:驗(yàn)證登錄,驗(yàn)證問(wèn)答

我們做分布式方案的時(shí)候,盡量把資源調(diào)用放在最近的地方。

前端服務(wù)器依賴的數(shù)據(jù)盡量就在局域網(wǎng)內(nèi),如果能在單機(jī)都有讀的redis服務(wù)當(dāng)然更好,程序維護(hù)數(shù)據(jù)響應(yīng)會(huì)復(fù)雜些。

不要出現(xiàn)跨機(jī)房網(wǎng)絡(luò)請(qǐng)求,不要出現(xiàn)跨機(jī)房網(wǎng)絡(luò)請(qǐng)求,不要出現(xiàn)跨機(jī)房網(wǎng)絡(luò)請(qǐng)求,重要的事情說(shuō)三遍。

第六:什么語(yǔ)言更適合這類(lèi)系統(tǒng)

課程中用的是PHP語(yǔ)言,開(kāi)發(fā)這類(lèi)系統(tǒng)也是沒(méi)問(wèn)題的。

當(dāng)然,像是用golang, ngx_lua可能在高并發(fā)和性能方面會(huì)更有優(yōu)勢(shì)。

如果使用java、.net當(dāng)然也是可以的,作為一個(gè)系統(tǒng),語(yǔ)言只是工具,更好的設(shè)計(jì)和優(yōu)化,才能達(dá)到最終想要的效果。

有了上面的基本概念,我們接下來(lái)再來(lái)看看,具體運(yùn)行時(shí),會(huì)出現(xiàn)什么狀況。

下面是一些具體的問(wèn)題:

問(wèn)題1:庫(kù)存超賣(mài)

只有10個(gè)庫(kù)存,但是一秒鐘有1k個(gè)訂單,怎么能不超賣(mài)呢?

核心思想就是保證庫(kù)存遞減是原子性操作,10--返回9,9--返回8,8--返回7。

而不能是讀取出來(lái)庫(kù)存10,10-1=9再更新回去。因?yàn)檫@個(gè)讀取和更新是并發(fā)執(zhí)行的,很可能就會(huì)有1k個(gè)訂單都成功了,而庫(kù)存實(shí)際只有10。

那么,怎么保證原子性操作呢?

1 數(shù)據(jù)庫(kù):

update product set left_num=left_num-1 where left_num>0;

這里用到的是left_num=left_num-1,如果left_num>0才能執(zhí)行成功,數(shù)據(jù)庫(kù)查詢、更新的時(shí)候有用到鎖,是可以保證更新操作的原子性的。

數(shù)據(jù)庫(kù)性能較差,不建議使用。

2 分布式鎖

用redis來(lái)做一個(gè)分布式鎖,reids->setnx('lock', 1) 設(shè)置一個(gè)鎖,程序執(zhí)行完成再del這個(gè)鎖。

鎖定的過(guò)程,不利于并發(fā)執(zhí)行,大家都在等待鎖解開(kāi),不建議使用。

3 消息隊(duì)列

將訂單請(qǐng)求全部放入消息隊(duì)列,然后另外一個(gè)后臺(tái)程序一個(gè)個(gè)處理隊(duì)列中的訂單請(qǐng)求。

并發(fā)不受影響,但是用戶等待的時(shí)間較長(zhǎng),進(jìn)入隊(duì)列的訂單也會(huì)很多,體驗(yàn)上并不好,也不建議使用。

4 redis遞減

通過(guò) redis->incrby('product', -1) 得到遞減之后的庫(kù)存數(shù)。

性能方面很好,同時(shí)體驗(yàn)上也很好,在PHP秒殺課程中,優(yōu)化后就是用的這種方法,而沒(méi)有使用上述其他方法,大家應(yīng)該也能對(duì)比了解啦。

問(wèn)題2:集群怎么來(lái)規(guī)劃

前端服務(wù)器因?yàn)闆](méi)有相互間關(guān)聯(lián),集群的數(shù)量不受影響。

redis的性能可以達(dá)到每秒幾萬(wàn)次響應(yīng),所以一個(gè)集群的規(guī)模,也就是redis服務(wù)可以承載的數(shù)量。

比如:一臺(tái)前端服務(wù)器是1~2k的qps(有庫(kù)存時(shí)),那么10臺(tái)+1臺(tái)redis就可以是一個(gè)獨(dú)立的集群,可以支撐1~2w每秒訂單量。

10個(gè)上述的集群就可以做到一秒鐘處理10w~20w的有效訂單。

如果秒殺活動(dòng)的庫(kù)存量在1w以內(nèi),預(yù)計(jì)參與的人數(shù)在百萬(wàn)左右,那么有一個(gè)集群也就可以搞定。

如果秒殺參與的人數(shù)超過(guò)千萬(wàn),那么就要用到不止一個(gè)集群了。

問(wèn)題3:多個(gè)集群的數(shù)據(jù)怎么保持一致性

不要做多集群的數(shù)據(jù)同步,而是用散列,每個(gè)集群的數(shù)據(jù)是獨(dú)立存在的。

假設(shè),有10個(gè)商品,每個(gè)商品有1w庫(kù)存,規(guī)劃用10個(gè)集群,那么每個(gè)集群有10個(gè)商品,每個(gè)商品是1k庫(kù)存。

每個(gè)集群只需要負(fù)責(zé)把自己的庫(kù)存賣(mài)掉即可,至于說(shuō),會(huì)不會(huì)有用戶知道有10個(gè)集群,然后每個(gè)集群都去搶。

這種情況就不要用程序來(lái)處理了,利用運(yùn)營(yíng)規(guī)則,活動(dòng)結(jié)束后匯總訂單的時(shí)候再去處理就好了。

如果擔(dān)心散列的不合理,比如:某個(gè)集群用戶訪問(wèn)量特別少,那么可以引入一個(gè)中控服務(wù),來(lái)監(jiān)控各個(gè)集群的庫(kù)存,然后再做平衡。

問(wèn)題4:機(jī)器人搶購(gòu)怎么辦:

沒(méi)什么太好的辦法,類(lèi)似DDOS攻擊,只能是讓自身更強(qiáng)大才是王道。

運(yùn)營(yíng)策略上,可以嚴(yán)格控制用戶注冊(cè),必須登錄,提交訂單的時(shí)候引入圖像驗(yàn)證碼,問(wèn)答,交互式驗(yàn)證等。

上面的內(nèi)容不知道大家還會(huì)有什么疑問(wèn),可以給我留言。

具體的關(guān)于高并發(fā)、秒殺的實(shí)戰(zhàn)內(nèi)容,在課程中也有詳細(xì)的講解,這里用文字的形式提煉整理出來(lái),希望能更好的幫助大家理解,謝謝~

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    13

    文章

    9709

    瀏覽量

    87332
  • 數(shù)據(jù)庫(kù)
    +關(guān)注

    關(guān)注

    7

    文章

    3902

    瀏覽量

    65796

原文標(biāo)題:關(guān)于高并發(fā)和秒殺系統(tǒng),你知道的和不知道的一些事

文章出處:【微信號(hào):C_Expert,微信公眾號(hào):C語(yǔ)言專家集中營(yíng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    如何去實(shí)現(xiàn)一種基于SpringMVC的電商并發(fā)秒殺系統(tǒng)設(shè)計(jì)

    參考博客Java并發(fā)秒殺系統(tǒng)API目錄業(yè)務(wù)場(chǎng)景要解決的問(wèn)題Redis的使用業(yè)務(wù)場(chǎng)景首頁(yè)倒計(jì)時(shí)秒殺活動(dòng),搶購(gòu)商品要解決的問(wèn)題
    發(fā)表于 01-03 07:50

    并行和并發(fā)哪個(gè)好?并行和并發(fā)概念和區(qū)別

    摘要:并發(fā)與并行是兩個(gè)既相似而又不相同的概念并發(fā)性,又稱共行性,是指能處理多個(gè)同時(shí)性活動(dòng)的能力;并行是指同時(shí)發(fā)生的兩個(gè)并發(fā)事件,具有并發(fā)
    發(fā)表于 12-08 09:12 ?6.6w次閱讀
    并行和<b class='flag-5'>并發(fā)</b>哪個(gè)好?并行和<b class='flag-5'>并發(fā)</b>的<b class='flag-5'>概念</b>和區(qū)別

    阿里的秒殺系統(tǒng)是如何設(shè)計(jì)的?

    阿里的秒殺系統(tǒng)是怎么設(shè)計(jì)的?,服務(wù)器,redis,調(diào)用,后端
    的頭像 發(fā)表于 02-20 11:23 ?2121次閱讀
    阿里的<b class='flag-5'>秒殺</b><b class='flag-5'>系統(tǒng)</b>是如何設(shè)計(jì)的?

    解密并發(fā)業(yè)務(wù)場(chǎng)景下典型的秒殺系統(tǒng)的架構(gòu)

    中,就更別提如何構(gòu)建并發(fā)系統(tǒng)了! 究竟什么樣的系統(tǒng)算是并發(fā)
    的頭像 發(fā)表于 11-17 10:32 ?2534次閱讀
    解密<b class='flag-5'>高</b><b class='flag-5'>并發(fā)</b>業(yè)務(wù)場(chǎng)景下典型的<b class='flag-5'>秒殺</b><b class='flag-5'>系統(tǒng)</b>的架構(gòu)

    【源碼版】基于SpringMVC的電商并發(fā)秒殺系統(tǒng)設(shè)計(jì)思路

    參考博客Java并發(fā)秒殺系統(tǒng)API目錄業(yè)務(wù)場(chǎng)景要解決的問(wèn)題Redis的使用業(yè)務(wù)場(chǎng)景首頁(yè)倒計(jì)時(shí)秒殺活動(dòng),搶購(gòu)商品要解決的問(wèn)題
    發(fā)表于 01-12 10:23 ?0次下載
    【源碼版】基于SpringMVC的電商<b class='flag-5'>高</b><b class='flag-5'>并發(fā)</b><b class='flag-5'>秒殺</b><b class='flag-5'>系統(tǒng)</b>設(shè)計(jì)思路

    如何實(shí)現(xiàn)一個(gè)秒殺系統(tǒng)

    實(shí)現(xiàn)一個(gè)秒殺系統(tǒng),采用spring boot 2.x + mybatis+ redis + swagger2 + lombok實(shí)現(xiàn)。
    的頭像 發(fā)表于 09-15 09:56 ?2421次閱讀

    通過(guò)秒殺商品來(lái)模擬并發(fā)的場(chǎng)景

    并發(fā)場(chǎng)景在現(xiàn)場(chǎng)的日常工作中很常見(jiàn),特別是在互聯(lián)網(wǎng)公司中,這篇文章就來(lái)通過(guò)秒殺商品來(lái)模擬并發(fā)的場(chǎng)景。
    的頭像 發(fā)表于 02-07 10:47 ?587次閱讀

    服務(wù)器的并發(fā)能力如何提升?

    服務(wù)器的并發(fā)能力如何提升? 服務(wù)器并發(fā)能力體現(xiàn)著服務(wù)器在單位時(shí)間內(nèi)的很強(qiáng)數(shù)據(jù)處理能力,一般來(lái)說(shuō),如果企業(yè)的互聯(lián)網(wǎng)業(yè)務(wù)需要面對(duì)大量的同時(shí)在線請(qǐng)求,那么就需要高
    的頭像 發(fā)表于 03-17 17:07 ?1230次閱讀

    如何控制秒殺商品頁(yè)面購(gòu)買(mǎi)按鈕的點(diǎn)亮

    售空;(4)一般是定時(shí)上架;(5)時(shí)間短、瞬時(shí)并發(fā); ? 2 秒殺技術(shù)挑戰(zhàn) 假設(shè)某網(wǎng)站秒殺活動(dòng)只推出一件商品,預(yù)計(jì)會(huì)吸引1萬(wàn)人參加活動(dòng),也就說(shuō)最大
    的頭像 發(fā)表于 06-29 11:12 ?1106次閱讀
    如何控制<b class='flag-5'>秒殺</b>商品頁(yè)面購(gòu)買(mǎi)按鈕的點(diǎn)亮

    服務(wù)器并發(fā)概念

    自己調(diào)整系統(tǒng)的相關(guān)參數(shù) 并發(fā)概念是什么?什么是并發(fā)? 對(duì)于服務(wù)器并發(fā)概念,下面幾點(diǎn)是錯(cuò)誤的定
    的頭像 發(fā)表于 11-10 10:05 ?7984次閱讀
    服務(wù)器<b class='flag-5'>并發(fā)</b>的<b class='flag-5'>概念</b>

    java結(jié)合redis秒殺功能

    近年來(lái),隨著電子商務(wù)的快速發(fā)展,各大電商平臺(tái)都推出了各種促銷(xiāo)活動(dòng)來(lái)吸引用戶。秒殺活動(dòng)作為一種高效的促銷(xiāo)方式,能夠在很短的時(shí)間內(nèi)促成大量的交易。然而,并發(fā)場(chǎng)景下的秒殺活動(dòng)也給
    的頭像 發(fā)表于 12-04 11:06 ?769次閱讀

    redis并發(fā)能力直接相關(guān)概念有哪些

    Redis是一種高性能的開(kāi)源內(nèi)存數(shù)據(jù)庫(kù),具有出色的并發(fā)能力。為了實(shí)現(xiàn)并發(fā),需要有一些相關(guān)概念和技術(shù)。下面是關(guān)于Redis
    的頭像 發(fā)表于 12-05 10:34 ?1549次閱讀

    并發(fā)系統(tǒng)的藝術(shù):如何在流量洪峰中游刃有余

    前言 我們常說(shuō)的三并發(fā)可用、高性能,這些技術(shù)是構(gòu)建現(xiàn)代互聯(lián)網(wǎng)應(yīng)用程序所必需的。對(duì)于京東618備戰(zhàn)來(lái)說(shuō),所有的中臺(tái)系統(tǒng)服務(wù),無(wú)疑都是
    的頭像 發(fā)表于 08-05 13:43 ?477次閱讀
    <b class='flag-5'>高</b><b class='flag-5'>并發(fā)</b><b class='flag-5'>系統(tǒng)</b>的藝術(shù):如何在流量洪峰中游刃有余

    并發(fā)物聯(lián)網(wǎng)云平臺(tái)是什么

    并發(fā)物聯(lián)網(wǎng)云平臺(tái)是一種能夠處理大量設(shè)備同時(shí)連接并進(jìn)行數(shù)據(jù)交換的云計(jì)算平臺(tái)。這種平臺(tái)通常被設(shè)計(jì)用來(lái)應(yīng)對(duì)來(lái)自數(shù)以萬(wàn)計(jì)甚至數(shù)十億計(jì)的物聯(lián)網(wǎng)設(shè)備的并發(fā)請(qǐng)求,保證系統(tǒng)的穩(wěn)定性和響應(yīng)速度。 首先
    的頭像 發(fā)表于 08-13 13:50 ?489次閱讀

    TurMass? 如何幫助解決 UWB 定位系統(tǒng)大規(guī)模終端標(biāo)簽并發(fā)通信沖突問(wèn)題?

    在大容量定位終端數(shù)據(jù)并發(fā)場(chǎng)景中,現(xiàn)有通信技術(shù)因信號(hào)沖突、系統(tǒng)容量受限等問(wèn)題,難以滿足需求。TurMass? 通信技術(shù)通過(guò)多信道設(shè)計(jì)、時(shí)隙劃分、定位與通信一體化等創(chuàng)新方案,有效解決了
    的頭像 發(fā)表于 03-17 14:38 ?327次閱讀
    TurMass? 如何幫助解決 UWB 定位<b class='flag-5'>系統(tǒng)</b>大規(guī)模終端標(biāo)簽<b class='flag-5'>高</b><b class='flag-5'>并發(fā)</b>通信沖突問(wèn)題?