做床爱全过程激烈视频网站,伊人色综合久久天天五月婷,一性一交一口添一摸视频,在线观看人成激情视频,呦系列视频一区二区三区

數(shù)十年專注企業(yè)數(shù)字化轉(zhuǎn)型、智能化升級、企業(yè)上云解決方案服務(wù)商
工單提交 實名認證 騰佑科技咨詢熱線咨詢熱線: 400-996-8756
百度云服務(wù)中心騰佑科技公司
云服務(wù)器活動 服務(wù)器租用 服務(wù)器托管 機柜租賃 帶寬租賃
  • 最新資訊
  • 熱門資訊
  • 最熱資訊
智能建站

「開發(fā)」總結(jié)高并發(fā)秒殺系統(tǒng)

發(fā)布時間:2022-07-18 作者:admin

簡述:大家也許開發(fā)過高并發(fā)的系統(tǒng)或者秒殺程序,但肯定都有接觸過,像電商平臺的秒殺、搶購等活動,還有12306春運搶票。特點:時間短流量多,需要注意外掛。所以要單獨提出秒殺系統(tǒng)。技術(shù)特點:瞬時高并發(fā),多層次分布式處理,人機交互對抗一、系統(tǒng)環(huán)境搭建(

大家可能都開發(fā)過高并發(fā)系統(tǒng)或者秒殺程序,但是肯定都接觸過,比如電商平臺的秒殺、搶購等活動,以及12306春運搶票。

特點:時間短,流量大,需要注意插件。因此,應(yīng)單獨提出秒殺系統(tǒng)。

技術(shù)特點:瞬時高并發(fā)、多層次分布式處理、人機交互對抗

一、系統(tǒng)環(huán)境建設(shè)

(1)技術(shù)選型

linux nginx php mysql redis(開源,免費)

CDN(分布式緩存),智能DNS(多線接入選擇)

負載均衡LVS,大型Web集群(分流節(jié)點,實現(xiàn)高效穩(wěn)定)

(2)開發(fā)準備

工具:Eclipseforphp或phpStorm或Editplus、Sublime

部署環(huán)境:XAMPP/brew/yum

代碼管理:Git/SVN

(3)Mysql封裝

PDO組件,常用的增刪改查

使用開源代碼Db、Crud代碼庫

(4)Redis封裝

(需要配置器的數(shù)據(jù)緩存)

PHP客戶端:phpredis/Predis

封裝基本的redis連接和命令資源

(5)debug封裝

定制日志和調(diào)試日志。學會事半功倍。

二、系統(tǒng)設(shè)計

(1)基本功能和流程

背景:活動管理/商品管理/訂單管理/日志管理

前臺:商品展示/秒殺/購物車/我的訂單

安全:驗證碼/問答

(2)項目流程

秒殺——>問答驗證——>庫存驗證——>生成訂單——>

(3)數(shù)據(jù)庫設(shè)計

活動信息表、商品信息表、訂單信息表、問答信息表、日志記錄表

(4)交互和頁面設(shè)計

背景:基本管理,列表增刪

前臺:商品展示、搶購、我的訂單、購物車、登錄

安全:防攻擊、防作弊、防機器人。

三、「開發(fā)」總結(jié)高并發(fā)秒殺系統(tǒng):

活動周期短,瞬時流量大(高并發(fā)),技術(shù)在這種情況下會發(fā)生和需要做的事情。

一是高并發(fā)

一方面,優(yōu)化程序,使程序性能最好,單次請求時間可從50點開始ms優(yōu)化到25ms,然后你可以在一秒鐘內(nèi)成功地響應(yīng)翻倍的請求。

另一方面,更重要的是增加服務(wù)器,使用更大的集群來處理用戶要求,并設(shè)計一個可靠和靈活的擴展分布式方案。

第二:時間短

火熱的第二次殺戮活動真的會在一秒鐘內(nèi)買到商品,而大多數(shù)用戶的感覺是,提交訂單的過程需要等待幾秒甚至十秒。當然,更糟糕的是要求報錯。

當然,一個好的秒殺體驗希望盡可能減少用戶的等待時間,準確地提醒用戶目前是否有商品庫存。這些也需要優(yōu)秀的程序設(shè)計來保證。

三是系統(tǒng)容量估計

在設(shè)計系統(tǒng)時,需要有一個容量估計,即提前計算我們設(shè)計的系統(tǒng)應(yīng)該承載多少數(shù)量級。

如果在線前端服務(wù)器規(guī)格為8核16G提交訂單的內(nèi)存服務(wù)器需要100個處理程序ms,然后可以簡單計算一下:

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

對于秒殺系統(tǒng)來說,上述結(jié)果肯定是非常不理想的。

如果能優(yōu)化處理程序,可以減少到10ms,然后就可以達到8000qps。

如果我們可以把程序繼續(xù)優(yōu)化,能快速區(qū)分開有庫存和無庫存處理,那么無庫存時處理就有可能做到1ms甚至更低的時間消耗。這樣,在沒有庫存的情況下,會更好,成千上萬qps也可以實現(xiàn)。

以上估計都是針對單機的,那么簡單的增加前端服務(wù)器就能有更好的并發(fā)處理量嗎?

因為數(shù)據(jù)庫、緩存系統(tǒng)甚至機房網(wǎng)絡(luò)帶寬都不會那么簡單。

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

第四:好的分布式方案

一個好的分布式解決方案,當然是穩(wěn)定可靠的,不要混亂,然后方便擴展,當然,最好的效果是增加服務(wù)器,并發(fā)處理量可以線性增長1:1。

比如:單機qps是1k,10臺服務(wù)器可以做到10臺服務(wù)器w,100臺可以做到10w每秒。

要達到這樣的線性增長效果,就要杜絕瓶頸,否則還是會太貴。

拒絕假分布式尤為重要。例如,前端服務(wù)器可以獨立存在,但它們都依賴于集中的數(shù)據(jù)庫或緩存系統(tǒng)。最后,集中的數(shù)據(jù)庫或緩存系統(tǒng)無法忍受,也無法實現(xiàn)良好的分布式。

第五:注意系統(tǒng)的瓶頸

先有幾個基本共識,系統(tǒng)的處理速度

讀寫程序中的數(shù)據(jù)>redis>mysql>磁盤單機網(wǎng)絡(luò)請求>局域網(wǎng)請求>跨機房請求

當我們優(yōu)化程序時,使用最快的方法和最短的邏輯。

用redis替代mysql用程序中提交的數(shù)據(jù)代替訂單處理中依賴的數(shù)據(jù)redis商品庫存信息、用戶訂單信息等二次數(shù)據(jù)獲取。

在邏輯處理中,將快速、提前中斷的邏輯放在首位,如驗證登錄、驗證問答等。

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

前端服務(wù)器所依賴的數(shù)據(jù)應(yīng)盡可能在局域網(wǎng)中,如果可以在單機上閱讀redis當然,服務(wù)更好,程序維護數(shù)據(jù)響應(yīng)會更復(fù)雜。

不要有跨機房網(wǎng)絡(luò)請求,不要有跨機房網(wǎng)絡(luò)請求,不要有跨機房網(wǎng)絡(luò)請求,重要的事情說三遍。

第六:什么語言更適合這種系統(tǒng)?

在課程中使用PHP語言,開發(fā)這樣的系統(tǒng)也沒問題。

當然,就像使用一樣golang,ngx_lua它可能在高并發(fā)性和性能方面有更多的優(yōu)勢。

如果使用java、.net當然,作為一個系統(tǒng),語言只是一過更好的設(shè)計和優(yōu)化,語言才能達到預(yù)期的效果。

有了以上基本概念,我們來看看具體操作會發(fā)生什么。

以下是一些具體問題:

問題1:庫存超賣

只有10個庫存,但每秒1k一個訂單,怎么能不超賣呢?

核心思想是保證庫存遞減是原子操作,10-9,9-8-7。

而不是讀取庫存10,10-10=9再次更新。因為這個讀取和更新是并發(fā)執(zhí)行的,很可能會有1k所有訂單都成功了,實際庫存只有10。

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

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

updateproductsetleft_numleft_num=left_num-1whereleft_num>0;

這里用到的是left_num=left_num-1,如果left_num>0能成功實施,數(shù)據(jù)庫查詢、更新時有用到鎖,能保證更新操作的原子性。

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

2.分布式鎖

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

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

3.消息隊列

將所有訂單請求放入消息隊列,然后在另一個后臺程序中逐一處理訂單請求。

并發(fā)不受影響,但用戶等待時間長,會有很多訂單進入隊列,體驗不好,不建議使用。

4.redis遞減

通過redis->incrby(product,-1)遞減后的庫存數(shù)。

性能好,體驗好。PHP在秒殺課程中,優(yōu)化后使用這種方法,而不使用上述其他方法,我們也應(yīng)該能夠比較和理解。

問題2:如何規(guī)劃集群?

前端服務(wù)器因為沒有相互間關(guān)聯(lián),集群的數(shù)量不受影響。

redis性能每秒可以達到數(shù)萬次響應(yīng),因此集群的規(guī)模,即redis可承載的服務(wù)數(shù)量。

例如,前端服務(wù)器是1~2k的qps(有庫存的時候) 1臺redis它可以是一個獨立的集群,可以支持1~2w每秒訂單量。

以上10個集群一秒鐘就能處理10個w~20w有效訂單。

如果秒殺活動的庫存在1w在此期間,預(yù)計參與人數(shù)約為100萬,因此有一個集群可以完成。

如果參與秒殺的人數(shù)超過1000萬,則需要使用不止一個集群。

問題3:如何保持多個集群數(shù)據(jù)的一致性?

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

假設(shè)每種商品有10種商品w庫存,規(guī)劃10個集群,每個集群有10種商品,每種商品有10種k庫存。

每個集群只需要負責出售自己的庫存。至于是否會有用戶知道有10個集群,然后每個集群都會被搶。

不要用程序來處理這種情況。使用操作規(guī)則,在活動結(jié)束后匯總訂單時處理。

如果擔心散列不合理,比如某個集群用戶訪問量特別少,可以引入中央控制服務(wù)監(jiān)控各個集群的庫存,然后平衡。

問題4:機器人搶購怎么辦:

沒有什么好辦法,類似DDOS攻擊只能讓自己更強大。

在操作策略上,用戶注冊可以嚴格控制,必須登錄,提交訂單時引入圖像驗證碼、問答、交互式驗證等。

騰友科技在世界120多個國家部署數(shù)據(jù)中心,為世界各地的許多國家提供服務(wù)器租賃。所有服務(wù)器都可以根據(jù)需要配置大帶寬和大流量。美國G口獨家享受大帶寬服務(wù)器,告別網(wǎng)絡(luò)擁堵;

點擊展開全文

騰佑科技(www.158100.cn)成立于2009年,總部位于河南鄭州,是一家集互聯(lián)網(wǎng)基礎(chǔ)設(shè)施及軟硬件于一體化的高新技術(shù)企業(yè),具有IDC/ISP/ICP/云牌照、雙軟等資質(zhì),并擁有多個國家版權(quán)局認證。公司自成立以來,一直致力于發(fā)展互聯(lián)網(wǎng)IDC數(shù)據(jù)中心DataCenter、云計算Cloud、大數(shù)據(jù)BigDate、人工智能AI、內(nèi)容加速CDN、互聯(lián)網(wǎng)安全、軟件定制開發(fā)等產(chǎn)品服務(wù)及行業(yè)客戶技術(shù)一體化智能解決方案;2018年成為百度智能云AI河南服務(wù)中心。

售前咨詢熱線:400-996-8756

備案提交:0371-89913068

售后客服:0371-89913000

熱門活動

百度云服務(wù)中心
  • 熱門資訊
  • 隨便看看