自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

過(guò)年回家搶票,12306的余票是怎么計(jì)算的,具體的思路是什么?

開(kāi)發(fā) 架構(gòu) 服務(wù)器運(yùn)維
車(chē)票售賣(mài)特點(diǎn),有一張車(chē)票賣(mài)出去就會(huì)影響到整個(gè)列車(chē)線(xiàn)的票數(shù):北京開(kāi)往廣州的一趟列車(chē)有人買(mǎi)了石家莊到鄭州的票,同時(shí)意味著出發(fā)點(diǎn)在北京-石家莊,目的地是鄭州-廣州的所有情況都會(huì)少一張票。

 車(chē)票售賣(mài)特點(diǎn),有一張車(chē)票賣(mài)出去就會(huì)影響到整個(gè)列車(chē)線(xiàn)的票數(shù):北京開(kāi)往廣州的一趟列車(chē)有人買(mǎi)了石家莊到鄭州的票,同時(shí)意味著出發(fā)點(diǎn)在北京-石家莊,目的地是鄭州-廣州的所有情況都會(huì)少一張票。

1.最low的方法。每次查詢(xún)車(chē)票時(shí)候都算一遍各個(gè)站點(diǎn)的票數(shù),取最小值。假設(shè)一共3站,北京,石家莊,廣州,共10個(gè)座位。有人要查詢(xún)北京-廣州的票:已經(jīng)賣(mài)出了北京-石家莊9張票,石家莊-廣州1張票,取中間車(chē)站的最小值10-9=1,剩一張。這樣如果是20站查看兩頭車(chē)站的余票就要計(jì)算19次再找最小值。

為什么說(shuō)它low呢?因?yàn)槠睌?shù)不多但是查看余票的人太多!而且人都不傻,在沒(méi)票時(shí)候還會(huì)刷新!所以來(lái)一次訪問(wèn)計(jì)算20次,10萬(wàn)人加上每個(gè)黃牛開(kāi)10臺(tái)電腦用來(lái)刷票,瞬間訪問(wèn)數(shù)達(dá)到100W,想要1秒內(nèi)都得到響應(yīng)需要1秒計(jì)算2000W次。

2.稍微好一點(diǎn)的方法。票被買(mǎi)走時(shí)候把每個(gè)車(chē)站余票計(jì)算一下,查看余票時(shí)候直接返回這個(gè)結(jié)果。同樣每秒100W訪問(wèn),但是只有1000人在這秒買(mǎi)到了票,計(jì)算余票時(shí)候只需要1000*20=20W次,省下了1800W次的運(yùn)算。

3.更“實(shí)際”一點(diǎn)的方法。每隔1秒同步一次數(shù)據(jù)狀態(tài)。假設(shè)12306每次查余票需要更新1k數(shù)據(jù),一般單個(gè)網(wǎng)卡1G帶寬,理論能同時(shí)支持12.8W的訪問(wèn)量,100W人都要看就至少有8個(gè)服務(wù)器在工作,方法2中,余票需要存放8份的話(huà)就需要1000*8=8000次更新。還要考慮各個(gè)地區(qū)訪問(wèn)的不均等性,電信,網(wǎng)通,鐵通等線(xiàn)路,整體列車(chē)余票情況數(shù)據(jù)量也有幾十K,所以1秒8000次更新也幾百兆的流量了。但是如果每隔1秒同步當(dāng)前的數(shù)據(jù)狀態(tài)就好很多,這樣編程了1*8=8次,更新數(shù)據(jù)庫(kù)傳輸總量1M/s左右,差不多吧?

即便如此,還是扛不住訪問(wèn)量。

因?yàn)殡娔X上12306是用的網(wǎng)頁(yè)模式,查詢(xún)車(chē)票那個(gè)頁(yè)面大小6K,即便是用了ajax,刷新一次北京-鄭州,這樣的大站需要傳輸7K的純json數(shù)據(jù),個(gè)人感覺(jué)有很多字段都浪費(fèi)了,沒(méi)什么用。

 

所以就我看來(lái),12306可以做以下改進(jìn),不是一切問(wèn)題都要用技術(shù)解決的。

1.已經(jīng)做了,分段放票,減少扎堆

2.12306自制一款好的搶票軟件。既然搶票權(quán)在自己手里了,刷票軟件就少了,大量減少流量。

3.別搞現(xiàn)在的圖片驗(yàn)證碼了,這些驗(yàn)證碼刷不出來(lái),辨識(shí)度低根本是暴力防刷,不但防機(jī)器人,真人都不行。

4.更改搶票規(guī)則,反正都是拼手速,拼網(wǎng)速,拼人品,何必這么費(fèi)勁大家一頓刷刷刷呢?寫(xiě)個(gè)算法分配下吧。

供需是主要矛盾,供大于求必定導(dǎo)致各種買(mǎi)不到票,沒(méi)辦法。

有些看官想學(xué)習(xí)高性能,高并發(fā),分布式網(wǎng)站架構(gòu)設(shè)計(jì),我真心也不會(huì)......

建議看看看《大型網(wǎng)站技術(shù)架構(gòu)_核心原理與案例分析_李智慧》,《大型網(wǎng)站系統(tǒng)與Java中間件實(shí)踐》這兩本書(shū),《Hadoop實(shí)戰(zhàn)》這本也不錯(cuò)。

由于12306這個(gè)開(kāi)放性問(wèn)題太大,我就只能說(shuō)下為什么看到票卻買(mǎi)不到的最基本情況,權(quán)當(dāng)拋磚引玉吧。

12306網(wǎng)站是全世界最繁忙的網(wǎng)絡(luò)之一,由于大量的人集中在某個(gè)時(shí)間點(diǎn)大量訪問(wèn)該網(wǎng)站,導(dǎo)致網(wǎng)站的并發(fā)處理能力要求非常高。我是個(gè)it小菜鳥(niǎo),就給沒(méi)有計(jì)算機(jī)基礎(chǔ)的各位看官講講皮毛知識(shí),大牛莫笑。

網(wǎng)上有這么一個(gè)統(tǒng)計(jì)圖:

 

 

過(guò)年回家搶票,12306的余票是怎么計(jì)算的,具體的思路是什么?

 

 

1.網(wǎng)站是怎么運(yùn)作的。

一個(gè)用戶(hù)想知道現(xiàn)在有沒(méi)有票,于是打開(kāi)網(wǎng)頁(yè),網(wǎng)站的后臺(tái)就去查看自己的數(shù)據(jù)庫(kù),檢索下有沒(méi)有用戶(hù)需要的數(shù)據(jù),然后將結(jié)果展示到頁(yè)面上,就形成了頁(yè)面上的余票信息。

然后用戶(hù)看到:嘿~有票!買(mǎi)買(mǎi)買(mǎi)!點(diǎn)擊購(gòu)買(mǎi)后,網(wǎng)站后臺(tái)將用戶(hù)訂票的信息在數(shù)據(jù)庫(kù)中更新一下:北京到巴黎的票100張變成了99張,然后購(gòu)票成功。

我這里說(shuō)的很簡(jiǎn)單,沒(méi)有提到支付環(huán)節(jié)與退票,咱們先看這個(gè)簡(jiǎn)單的例子,畫(huà)個(gè)圖大概是這個(gè)樣子的:

 

 

過(guò)年回家搶票,12306的余票是怎么計(jì)算的,具體的思路是什么?

 

 

2.當(dāng)有101個(gè)人都在搶票時(shí)候呢?

悲劇了,現(xiàn)在搶票更接近真實(shí)了,在早上8:00:00,有101個(gè)人同時(shí)要搶這100張票,會(huì)發(fā)生什么呢?對(duì)于一個(gè)人來(lái)說(shuō),網(wǎng)站實(shí)行“查看有多少票”(檢索數(shù)據(jù)庫(kù)),“買(mǎi)一張票”(修改數(shù)據(jù)庫(kù))的時(shí)間非??欤蠹s在50ms以?xún)?nèi),所以很順利就執(zhí)行了。但是101人同時(shí)點(diǎn)擊購(gòu)買(mǎi)呢?全按照上圖的簡(jiǎn)單流程,就多賣(mài)了1張票!所以需要再加一層檢查:

由于不止一個(gè)人同時(shí)買(mǎi)票,所以看到票數(shù)一瞬間與點(diǎn)擊買(mǎi)票的一瞬間實(shí)際上剩余的車(chē)票數(shù)量發(fā)生了變化!因此買(mǎi)票時(shí)候會(huì)再次檢查余票。如下圖,雖然紅框內(nèi)同時(shí)發(fā)生,不過(guò)你網(wǎng)速手速不行......

 

 

過(guò)年回家搶票,12306的余票是怎么計(jì)算的,具體的思路是什么?

 

 

所以,你看到有票但是買(mǎi)時(shí)候沒(méi)票

3.上百萬(wàn)人同時(shí)訪問(wèn)一個(gè)網(wǎng)站呢?

基本與上邊步驟都一樣,不過(guò)網(wǎng)站后臺(tái)把用來(lái)給用戶(hù)看的數(shù)據(jù)庫(kù)與用來(lái)給系統(tǒng)改寫(xiě)的數(shù)據(jù)庫(kù)拆開(kāi)了。也就是說(shuō)有一個(gè)(多個(gè))數(shù)據(jù)庫(kù)專(zhuān)門(mén)是給用戶(hù)讀的,有一個(gè)數(shù)據(jù)庫(kù)專(zhuān)門(mén)是用來(lái)做加減操作的。它們之間每隔一定時(shí)間就把內(nèi)容同步一次。(用來(lái)改寫(xiě)的數(shù)據(jù)庫(kù)叫主庫(kù),用來(lái)讀取的數(shù)據(jù)庫(kù)叫從庫(kù),一般情況下主庫(kù)只有一個(gè),從庫(kù)有很多個(gè)。主庫(kù)的數(shù)據(jù)每隔一段時(shí)間同步到從庫(kù)中)

查看票數(shù)時(shí)候只訪問(wèn)從庫(kù):還有票哇,好開(kāi)心!

 

 

過(guò)年回家搶票,12306的余票是怎么計(jì)算的,具體的思路是什么?

 

 

買(mǎi)票時(shí)候改成了訪問(wèn)主庫(kù):你妹!說(shuō)好的有票呢!

 

 

過(guò)年回家搶票,12306的余票是怎么計(jì)算的,具體的思路是什么?

 

 

最后:實(shí)際應(yīng)用中12306流程比這個(gè)復(fù)雜的多,比如同時(shí)10人搶1張票給誰(shuí)?這么大訪問(wèn)量我?guī)捒覆蛔≡趺崔k?由于列車(chē)太多,少一張票就會(huì)影響整個(gè)列車(chē)線(xiàn),計(jì)算量太大怎么辦?40分鐘等待時(shí)間車(chē)票怎么辦?所以這里只列舉了正常情況下比較簡(jiǎn)單的邏輯,權(quán)當(dāng)一看。

責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2021-07-26 07:47:37

前端自動(dòng)搶票

2019-12-30 07:00:51

技術(shù)研發(fā)系統(tǒng)

2013-01-17 10:49:42

2014-12-22 11:07:18

12306

2020-12-18 08:55:20

Python火車(chē)票代碼

2013-01-16 16:28:20

2014-01-03 09:15:39

12306搶票360

2018-02-07 17:12:00

2013-01-22 17:10:42

瀏覽器技術(shù)解析

2019-12-24 09:44:02

界面12306系統(tǒng)

2018-01-10 15:23:09

2013-09-12 11:14:52

假冒1230612306

2013-09-12 11:17:02

2013-12-09 14:21:45

12306搶票瀏覽器

2013-09-12 12:17:23

搶票攻略搶票

2013-01-22 09:31:20

獵豹瀏覽器

2013-01-22 09:31:33

2019-01-09 09:35:41

搶票Python軟件

2018-01-26 10:31:11

搶票軟件公平

2013-09-12 10:50:13

獵豹瀏覽器12306搶票軟件
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)