前言:
最近經(jīng)?吹劫I(mǎi)票難,作為搞技術(shù)的我TMD的罵一次:
票會(huì)增加嗎?總是有人能買(mǎi)到,有人不能買(mǎi)到;
就不能換個(gè)思路設(shè)計(jì)訂票系統(tǒng)。
要是我是什么什么的來(lái)著,早已經(jīng)實(shí)現(xiàn)通過(guò)手機(jī)短信、網(wǎng)站就能輕松買(mǎi)票了;
還順便將手機(jī)實(shí)名制給實(shí)現(xiàn)了。
正文:
不知是我想簡(jiǎn)單了,還是專(zhuān)家們想復(fù)雜了。
鐵道部的專(zhuān)家還停留在線下售票方案中撥不出來(lái);
線上售票系統(tǒng)簡(jiǎn)單得多了。
罵完鐵道部后,提供一簡(jiǎn)單又可行的解決方案。
查詢余票、防止超售、防止黃牛,一般的設(shè)計(jì)思路是有難度,
換個(gè)思路,TMD太簡(jiǎn)單的就能搞定。
一、總體方案
1、正常情況:預(yù)訂交錢(qián)-->后臺(tái)自動(dòng)驗(yàn)證規(guī)則-->不符合購(gòu)買(mǎi)限制的錢(qián)原路退回-->
-->提醒用戶預(yù)訂成功(但不一定有票)-->運(yùn)輸資源出來(lái),根據(jù)先到可先得+優(yōu)化級(jí)的原則分配
-->短信通知用戶取票
。、用戶不取票:沒(méi)有關(guān)系,因?yàn)殍F道部已經(jīng)收到錢(qián),所以你開(kāi)車(chē)前兩小時(shí)取即可。
多方便啊,就不用為了票多走一次車(chē)站。
。场⒂脩敉似保捍哼\(yùn)有人退嗎?平時(shí)要是退了,就退吧
二、前臺(tái)網(wǎng)站設(shè)計(jì)
只需要預(yù)訂,根本不需要查余票什么的。所以很簡(jiǎn)單的架構(gòu)就能搞定,甚至不用CDN
三、后臺(tái)設(shè)計(jì)
預(yù)訂后,后臺(tái)慢慢處理,看資源情況增加服務(wù)器。即使后臺(tái)的服務(wù)器掛了,前臺(tái)用戶也感覺(jué)不出來(lái)。
運(yùn)輸資源出來(lái),看有多少是分配給網(wǎng)上訂票的,依規(guī)則分配即可。
這樣后臺(tái)的架構(gòu)要有多靈活,就可以設(shè)計(jì)成多靈活。
后臺(tái)由驗(yàn)證服務(wù)器+分配服務(wù)器+取票及跟蹤服務(wù)器組成。
具有分配資格的,滿足了身份證唯一、已付款、優(yōu)先級(jí)等等要求了;
而且是一票一票分配的,根本就沒(méi)有什么復(fù)雜的邏輯處理,也沒(méi)有什么數(shù)據(jù)庫(kù)表鎖;
因?yàn)槟芊峙涞囊呀?jīng)滿足了鎖的要求了,用單線程分配就好了。
。埠说囊幻刖涂梢蕴幚1000張票以上。
四、可能的問(wèn)題
1、有存在海量的處理的情況嗎?沒(méi)有,預(yù)訂對(duì)數(shù)據(jù)只是增加操作,不需要扣除數(shù)量鎖表
2、有峰值壓力嗎?沒(méi)有,預(yù)訂時(shí)要處理的事情很少很少
3、能不能訂到票,心里沒(méi)底?預(yù)訂和搶票,沒(méi)有區(qū)別啊,
關(guān)鍵一點(diǎn)的是,預(yù)訂可以有復(fù)雜的預(yù)計(jì),比如允許自動(dòng)安排下一趟什么的;
多靈活啊。也不要做哪些沒(méi)有意義的重復(fù)提交。
4、如果鐵道部的內(nèi)部人員想作弊,采用什么方式都可能存在作弊
五、優(yōu)點(diǎn)
1、能提前10年預(yù)訂都沒(méi)有問(wèn)題,只要鐵道部和旅客愿意。將來(lái)的目標(biāo)發(fā)展為:個(gè)人旅行管理系統(tǒng)
。、前臺(tái)輕量,愛(ài)怎樣擴(kuò)展就怎樣擴(kuò)展
3、后臺(tái)愛(ài)怎樣處理都行,而且可以很容易監(jiān)控,有異常還可以人工偷偷處理一下,用戶根本感覺(jué)不到
4、實(shí)際上這樣一套系統(tǒng)上線,在家中買(mǎi)票,要坐車(chē)再去取票就可以了。不夠鐵道部的關(guān)系人少了點(diǎn)代理收入。
經(jīng)以上分析,結(jié)論:用Asp.net+SQL2008 就可以輕松實(shí)現(xiàn)。特別是后臺(tái),用C#.net開(kāi)發(fā)絕對(duì)是優(yōu)勢(shì)。