總結大家的發言,期望中的火車新訂票系統:
1)鐵付通:允許允值到帳戶
2)預訂方式:預訂不成功退錢回帳戶
3)加入分配規則:解決像春節特殊節日下,優先滿足回家的人們
(去年有回去的優先順序下降一檔、不是回家的優先最低。
什麼流量,根本就是最最基本的技術問題,談流量者SB)
4)加入使用者信用評價體系,並和分配優先順序掛鈎
5)支援PC、智能手機的訂票方式,逐漸減少人工售票點(不會線上訂票的人群)
6)目標是:使用者可以10分鐘內完成預訂單(不需要也不提供查餘票功能)
在搶票期內5分鐘~24小時給出是否預訂成功;
非搶票期在運輸資源出來後1小時內給出是否預訂成功。
節約沒有意義的排隊、刷屏的國民時間;照顧到需要照顧的人群;
讓最基層的老百姓多些滿意。
(架構圖就不畫了,估計鐵道部相關的人員也不會理睬這個)
***********************************************************
前言:
最近經常看到買票難,作為搞技術的我TMD的罵一次:
票會增加嗎?總是有人能買到,有人不能買到;
就不能換個思路設計訂票系統。
要是我是什麼什麼的來著,早已經實現通過手機簡訊、網站就能輕鬆買票了;
還順便將手機實名制給實現了。
摘要:
現有的訂票方案問題在哪,
1)是即時的,需要很多很多計算資源;搞得訂票過程耗時
2)技術難度大:如餘票查詢、數量扣除鎖等,都有很大的架構難度。
即並行訪問根本就不是問題,問題在於單個使用者的處理時間過長,
造成使用者在網站“同一資源過程”停留的過長造成的雪崩效應問題。
最終是:200個使用者在A伺服器上卡死了,會話時間為20分鐘的話,A伺服器基本上是掛了。要等監控進程清理,所以才會出現付錢不給票的情況(強制清除進程造成)
我想解決的是:避免浪費國民的時間,老是作那些沒有意義的查詢,
直接根據旅客的要求要給有沒有票就好了。
而且,能實現很多很多其它的功能,又沒有什麼技術難度。
本文:
不知是我想簡單了,還是專家們想複雜了。
鐵道部的專家還停留線上下售票方案中撥不出來;
線上售票系統簡單得多了。
罵完鐵道部後,提供一簡單又可行的解決方案。
查詢餘票、防止超售、防止黃牛,一般的設計思路是有難度,
換個思路,TMD太簡單的就能搞定。
一、總體方案
1、正常情況:預訂交錢-->後台自動驗證規則-->不符合購買限制的錢原路退回-->
-->提醒使用者預訂成功(但不一定有票)-->運輸資源出來,根據先到可先得+最佳化級的原則分配
-->簡訊通知使用者取票
2、使用者不取票:沒有關係,因為鐵道部已經收到錢,所以你開車前兩小時取即可。
多方便啊,就不用為了票多走一次車站。
3、使用者退票:春運有人退嗎? 平時要是退了,就退吧
二、前台網站設計
只需要預訂,根本不需要查餘票什麼的。所以很簡單的架構就能搞定,甚至不用CDN
三、後台設計
預訂後,後台慢慢處理,看資源情況增加伺服器。即使背景伺服器掛了,前台使用者也感覺不出來。
運輸資源出來,看有多少是分配給網上訂票的,依規則分配即可。
這樣背景架構要有多靈活,就可以設計成多靈活。
後台由驗證伺服器+分配伺服器+取票及Tracing Service器組成。
具有分配資格的,滿足了身份證唯一、已付款、優先順序等等要求了;
而且是一票一票分配的,根本就沒有什麼複雜的邏輯處理,也沒有什麼資料庫表鎖;
因為能分配的已經滿足了鎖的要求了,用單線程分配就好了。
2核的一秒就可以處理1000張票以上。
四、可能的問題
1、有存在海量的處理的情況嗎? 沒有,預訂對資料只是增加操作,不需要扣除數量鎖表
2、有峰值壓力嗎? 沒有,預訂時要處理的事情很少很少
3、能不能訂到票,心裡沒底? 預訂和搶票,沒有區別啊,
關鍵一點的是,預訂可以有複雜的預計,比如允許自動安排下一趟什麼的;
多靈活啊。也不要做哪些沒有意義的重複提交。
4、如果鐵道部的內部人員想作弊,採用什麼方式都可能存在作弊
五、優點
1、能提前10年預訂都沒有問題,只要鐵道部和旅客願意。將來的目標發展為:個人旅行管理系統
2、前台輕量,愛怎樣擴充就怎樣擴充
3、後台愛怎樣處理都行,而且可以很容易監控,有異常還可以人工偷偷處理一下,使用者根本感覺不到
4、實際上這樣一套系統上線,在家中買票,要坐車再去取票就可以了。不夠鐵道部的關係人少了點代理收入。
六、經@諾貝爾的啟發,完善系統如下:
1、前台部分:
PC端:由前台預訂系統、身證驗證子系統、網銀子系統、防止入侵子系統、業務監控系統
智能手機:修改適合手機特點的預訂系統
(前台預計系統很簡單,就一般的小公司都沒做再來的那一種,就是往資料庫裡增加記錄,不驗證不看餘票等規則)
2、後台部分
訂票確權伺服器(是否有預計資格)、車票分配伺服器、取票通知伺服器、業務監控系統、資源管理和分配規則管理系統等組成
3、結算部分
另開發結算管理系統,處理帳務、退錢、退票等
經以上分析,結論:用Asp.net+SQL2008 就可以輕鬆實現。特別是後台,用C#.net 開發絕對是優勢。