快要太監(jiān)了 :-( 由于各種個人原因, 鐵道部的這個博文系列中止了很久,。最近終于連自己都不好意思了,。所以還是繼續(xù)完成它吧,估計1-2周一篇的節(jié)奏,。
感覺不先劃分一下大的系統(tǒng)架構(gòu)總會讓大家感覺有點頭暈, 不過沒能力對整個12306進(jìn)行設(shè)計,,這個貨太大了。只是借這個機(jī)會談?wù)勛约簩ο到y(tǒng)結(jié)構(gòu)分析的一些感想
樸素的面向?qū)ο蠓治?/strong> 面向?qū)ο笫且粋€萬金油,,但是據(jù)說真正懂的人不多是吧,? 我對面向?qū)ο蟮母杏X就是: 他本質(zhì)上是對現(xiàn)實世界的抽象,其表面現(xiàn)象是不斷細(xì)分對象的粒度,,提升對象的抽象度,。最終形成一種用有限數(shù)量的獨立的對象“積木”構(gòu)造整個需求不斷變化的系統(tǒng)的目標(biāo),。 而系統(tǒng)級別的分析也大致如此,我們可以借鑒類分析中的很多概念,,不斷劃小系統(tǒng)規(guī)模,,剝離職責(zé),抽出依賴性,。
一般系統(tǒng)結(jié)構(gòu) 這里只是一個簡單模型,,用以表達(dá)我對多數(shù)項目的結(jié)構(gòu)分析。 配置數(shù)據(jù)服務(wù):系統(tǒng)運(yùn)行所需要的動態(tài)配置信息 其中業(yè)務(wù)系統(tǒng)和業(yè)務(wù)數(shù)據(jù)服務(wù)應(yīng)該是最核心的部分。 一般而言,,那些配置和資產(chǎn)管理的部分不會造成嚴(yán)重的性能問題,。只要在實現(xiàn)CRUD的時候多考慮考慮相關(guān)的業(yè)務(wù)需求,努力做到任何資產(chǎn)的屬性變動時,,確保相關(guān)的業(yè)務(wù)完整性就好(出租公司管理系統(tǒng)里,,一輛出租車今天還在運(yùn)營,后臺系統(tǒng)絕對不應(yīng)該可以輕松地把它標(biāo)記成報廢車輛,,連軟刪除都是不合理的做法),。 12306之所以能招全國人民圍觀,我覺得主要還是花的錢和大家的感受之間有落差,。而我陰暗的以為這個問題的核心部分就在票務(wù)處理的部分,。 所以我后續(xù)的幾篇博文都會圍繞票務(wù)處理里面的內(nèi)容展開。 另外,,我要大家了解的是,,我是要設(shè)計一個合理的區(qū)間票售票系統(tǒng)核心。而不是實現(xiàn)鐵道部的需求,。本質(zhì)上我認(rèn)為鐵道部不會說清楚他自己的需求,,而太極公司的需求分析有可以進(jìn)一步深挖的可能。
12306核心需求及模塊分析 整體架構(gòu)沒法子設(shè)計,,太大了,。有興趣的可以參考 中國鐵路客票發(fā)售和預(yù)訂系統(tǒng)5_0版的研究與實現(xiàn) 目前我專注的是用于訂票的部分。我感覺這個是最重要的部分,。 12306最大的問題,,就是如何在訂票的時候高效率得并且適當(dāng)優(yōu)化得找到需要數(shù)量的車票。并且要能徹底保證一張票不會被兩個請求同時處理成功,。 只要這個問題無法徹底解決,,任何分布式處理,,最終都會卡在這個問題上。 我會涉及到的模塊
12306票務(wù)處理功能模塊分析 假想完整網(wǎng)絡(luò)訂票流程圖 這里實際的用戶和系統(tǒng)的交互有4種類型,。 1,、車次和余額查詢 2、訂票 3,、取消訂票 4、確認(rèn)訂票
這里希望廣大圍觀群眾都來評估一下這個假設(shè)的訂票流程及其參數(shù)是不是都合理,?如果這個流程本身不合理,,則我后續(xù)的分析都要重寫了。不熟悉售票流程的,,可以看看我之前的分析文章,。 然后我們繼續(xù)來細(xì)化一下
車次和余額查詢 輸入:起始站,終到站,,日期,,座位類型集合 輸出:車次,對應(yīng)座位類型可售余額 作用:最終用戶根據(jù)查詢結(jié)果選擇需要出行的車次,,并進(jìn)一步進(jìn)入訂票操作,。但是系統(tǒng)不保證顯示為有票的車次在下一步操作中必然有票。 這里其實涉及到兩個類型的查詢 1,、哪些車次符合用戶的查詢結(jié)果,,可以通過一個基本固定不變的數(shù)據(jù)源來提供。而該數(shù)據(jù)源可以實現(xiàn)分布式緩存以緩解查詢壓力,,甚至可以考慮客戶端部分結(jié)果緩存,。 2、特定車次,,特定座位類型的可售票數(shù)量,。這個數(shù)據(jù)的來源應(yīng)該和第一個查詢不同。 訂票(我喜歡稱它為鎖票) 輸入:起始站,,終到站,,日期,座位類型,,需要車票數(shù)量,,用戶ID 輸出:實際到的獲取車票數(shù)量 作用:最終用戶通過訂票操作,,順利鎖定需要數(shù)量的車票。系統(tǒng)保證用戶在規(guī)定的時間段內(nèi)對這幾張車票具有優(yōu)先訂購權(quán)利,,且其他人不得購買這些車票,。 目前我感覺留給用戶10-15分鐘時間繼續(xù)后續(xù)操作,以進(jìn)入支付環(huán)節(jié)(當(dāng)然,,這必須是在系統(tǒng)本身性能良好條件下,。否則點個按鈕就要等10分鐘,那就不對了,。) 取消訂票 輸入:起始站,,終到站,,日期,座位類型,,數(shù)量,,用戶ID 輸出:成功標(biāo)志 作用:用戶放棄已經(jīng)獲得的被鎖定的售票權(quán)利,系統(tǒng)恢復(fù)對應(yīng)的數(shù)據(jù)為可售,。 確認(rèn)訂票(確認(rèn)支付) 輸入:起始站,,終到站,日期,,座位類型,,數(shù)量,用戶ID,,支付相關(guān)信息 輸出:成功標(biāo)志/確認(rèn)失?。▌偤面i定超時,且被他人訂走) 作用:最終確認(rèn)售票,,系統(tǒng)向第三方支付服務(wù)提交確認(rèn)請求,。 |
|
來自: 昵稱10504424 > 《工作》