1. 程式人生 > >一個資深程式設計師看12306(終結篇)

一個資深程式設計師看12306(終結篇)

“喂?老兄,今晚我請吃飯,你有時間沒”?

“有,當然有了。”

“很好,你今晚幫我值班吧!”

上面的臺詞估計很多人都看了都會一笑。為什麼會有笑料?因為脫離了人的慣性思維。日常生活中,大家可能只會當笑話,或者會引用這些笑話,會擴散思維,想到很多更為搞笑的笑話。但技術不能這樣,技術得腳踏實地,技術得足夠嚴謹,虛心聽別人的意見,技術不能浮躁。一個程式設計師看待一個問題,和這個程式設計師本身的成長經歷和經驗有很大關聯,甚至和這個程式設計師從事的工作領域也有很大關係。還有,隔行如隔山,切記多聆聽,不要說外行話,否則你認為你說了一句很牛逼的話,行內人會當笑話看。

本篇繼續回到12306上,對其再做一些總結性的說法。

首先:12306存在問題,我是從來不否認的,並且也抨擊鄙視過它。

有些問題,我們確實感覺很簡單,不應該存在的問題,但他確確實實存在了,那我們就可以提醒他去更改,但不能因為這些,我們就斷定我們能做一套這樣的系統,並且比他做的好。我甚至碰到過這樣的問題,我買了兩張高鐵票,然後,後悔了,打算改到第二天。我查閱了第二天的票,發現還有很多,於是我改簽,可忘記選日期了,竟然沒有一句提醒,導致我改簽了之後,發現還是原車原日期原班次,只不過座位號變了,而再改簽的時候,就只能退票了。這種問題,我就覺得業務邏輯上欠缺了思考。當然還有其他問題。這些問題,是需要12306系統逐步消化改正的。

其次:我是站在程式設計師的角度來看12306

有的人說了,問題的根源就是票和人的供求關係,如果票夠了,比這再爛些都沒啥,這話相當正確,但這一句話要實施得多大成本?不妨大概粗略的不能再粗略的想一下:要解決供求關係,就得鋪鐵路,或者解決地區發展不平衡,那又要和國家大策略掛鉤,資金的投入得是戰略性的。有外在威脅,內部矛盾,如何協調解決,我想憑我們幾個搞技術的在這談論,非但問題不能解決,被諷刺和嘲笑那是必然的吧,差著行呢,如果我寫這樣的文章,那用夜郎自大來形容都是輕的。因此,我們還得回過頭來,以自己的領域看問題,既然是自己的領域,嘗試著對一個新生事物進行分析一下,把它的範圍限制在IT技術領域和IT技術理論領域,儘管這依然是一個很龐大的領域,但至少我們能理性看待一下。

“還有人說了看到12306的UI頁面,實在忍受不了,果斷點叉”。那我們就不妨推測一下,這個人要麼是做UI設計的,要麼是做UI實現的,他可能在這方面有很深的造詣,但絕對不是做大型網站的。因為關於UI的問題,我第一篇文章就說的很清楚了,那不僅僅是UI的問題,還和網路資源有很大關係,他應該對網路資源的增量和價格的正比關係沒有研究過,或者他的領域並不需要考慮這個。

再次:我認為12306是相當複雜的,可以說是有史以來最為複雜的一個系統。

到現在我還這麼認為,只不過,我忘記加定語了,這是我的錯,這個複雜是建立在IT網際網路,即真正的廣域網內的,不是區域網。這個話題,也是我今天著重要說的。對於這個話題我分如下幾個方面來說:

一、業務不復雜,不見得平臺系統不復雜。

有人說,12306的業務他分析了,並不複雜,所以,哪來那麼複雜的架構?

12306業務到底複雜不復雜,我這裡且不去論。但不復雜的業務就不需要架構了麼?或者不復雜業務的系統架構就一定不復雜了麼?

       任何一個系統,只要和大訪問量、高併發、金錢這三者碰觸到一起,必然是一個複雜的大型系統。很多時候,平臺的複雜度不是完全取決於需求的,他是要高於需求的,如果平臺不高於需求,那後續動態擴充套件就無從談起,正是因為有一個好的平臺,一個可以很方便擴充套件的平臺,所以騰訊、阿里巴巴等才能依託於平臺,擴展出各式各樣的龐大功能和需求,有的想法需求甚至是剛剛才有的,難不成他會為此而不停的重新設計平臺麼?瞭解騰訊歷史的人都知道,騰訊至今一共重新更改設計了四次平臺,每次更改和完善,幾乎都在兩年左右,所投入的人才和資本也是次方級別的。但每次更改之後,依託於新平臺的業務功能都會爆發式增長。。

大家可以試著從上篇我提到的個檔案傳輸伺服器的業務去想一下,不難得出,業務簡單,平臺可能會很複雜,甚至會更復雜,因為一個簡單的業務,可能後面隱藏著說不清的更多業務流程。舉個例子,你說你要實現聊天業務,那我就得考慮註冊業務、登入認證業務、好友管理業務、訊息儲存業務、而每個業務又會涵蓋有很多子業務。比如好友管理,那最起碼就包含查詢好友、新增好友、刪除好友、好友備註名修改等。註冊業務就包含有手機註冊、賬號註冊、郵箱註冊、還要考慮VIP等級等等。這些就不簡單了吧。如此想來,12306的業務也不見得簡單吧,甚至更復雜吧。舉個簡單的例子,你認為從哈爾濱到深圳的1張票可以賣幾次?買票的人不見得會從頭做到尾吧。那這張票還能不能再賣呢?很多業務細節,不是行內人士,很難接觸到,很難了解其中的複雜度的。因此,我數篇文章,都不評論12306的業務。因為對這些業務,流程,我是行外人士,但這並不妨礙我站在一個程式設計師的角度對12306系統複雜度進行一番想象吧。

二、融合性平臺不是簡單的介面相連,他背後有很多事要做。

       還有人說,平臺的融合,就更簡單了,只不過接到別人介面上而已,哪來那麼誇張的複雜度。那我只能說,他對接的東西很簡單,或者太簡單了,你有想過這些背後的事情大概要考慮多少麼?

       就我所親身經歷或接觸過的網路系統來說,我知道的區域網系統從安全級別高低來說,依次有:軍方網路系統、公安網路系統、銀行網路系統、教育網路系統。

軍方網路系統的安全級別相當高,我認為除非你作為硬體或軟體供應商,能在他們的監控中事先注入病毒而不被發現。否則很難攻破。因為他們的網路是真正獨立的一個區域網。就算要從裡面匯出一個東西,從硬體上就是僅能單向傳輸的,並且還要經過授權審批的,更何況,有資格做軍方的企業,必然要接受來自軍方的安全評判並授權。

公安系統也是相當獨立的,基本上是不允許外部網路接入的。就拿最簡單的身份證識別系統來說,你要想使用,必須是使用它們配給你的終端識別系統,這和你的系統是不對接的。所以,我們常看到的醫院、火車站的身份識別客戶端等,那都是公安系統授權之後給你的終端機器,不是介面。這就是為啥很多比較出名的網路商,你在上面註冊了賬號之後,還要讓你提交身份證照片,並且還要經過至少24小時的稽核才能行的原因,如果他們真和公安系統對接了,還需要這麼複雜麼?

再有就是銀行系統。目前,就國內來說,所有的銀行系統准入制,都需要經過一個最高級別的銀監會來稽核批准,並不是銀行說了就算的。如果你做過支付系統,就會知道,如果你要接入到銀行介面,那需要銀監會的稽核審批,他們的一個硬性指標就是,你的公司最起碼的市值500億以上。否則想都別想。所以,做支付只能是那些大公司去做,而小公司做支付只能是通過抓取銀行的網頁或者跳轉到銀行的支付網頁上去實現。因此,即便你那邊交易成功了,這邊有可能還不知道,還需要你認為的再點選確認一下,就是這個原因。

而上面這些系統之所以做的這麼嚴格,那是因為這些都是涉及到國家安全、民生等的核心基礎。誰敢承擔那麼大的責任任意公開?更何況,即便公開了,每個系統肯定也是優先考慮內部使用吧。不能因為公開給你了,你的大訪問量,導致我係統的癱瘓而不能辦公吧。

如上這些,要對接,哪個方面不需要國家層面出面協調,分清問題責任才能做?這還幸虧是在中國,基於中國體制下才有可能。如果在國外,怕是想都不敢想的工程吧。有人說,為啥支付不直接連到支付寶上呢?咱們暫且不說支付寶應付這麼多支付資訊的能力如何,他作為中間商。會輕易免費給你提供支付功能麼?他敢揹負罵名,讓所有支付匯聚在他一個節點上麼?

還有人說,12306的簡訊通知,只需要一個簡訊通知介面就行了?但這個簡訊通知介面12306他敢隨便租用一個麼?它裡面那麼多的個人使用者資訊,他敢受控到一個僅僅是做簡訊群發平臺的公司麼?很顯然,所有大型公司都不會這麼做,都會有自己的簡訊平臺。每個簡訊平臺,至少得接聯通、電信、移動吧。而這三家又有CDMA、WCDMA、TD-SCDMA協議,你要相接他們,必須得遵守他們的協議處理吧。他們的協議處理會簡單麼?做過通訊業務的應該知道這裡面的複雜度和審批流程吧。

綜上、12306的複雜度可想而知了,這麼一個複雜的東西,幾個因不堪忍受其弊病的程式設計師就能做的出來麼?那不是一個笑話是啥?在廣域網而言,世界上誰還能找到一個比他還複雜的平臺系統麼?所以,我說他是有史以來,最為複雜的一個平臺系統了。這種說法,我自認為沒什麼不妥。

特別鄭重說明啊,我真的不是12306團隊中人,甚至沒見過一個參與過12306系統的開發人員。所以只是站在一個局外人的角度,以程式設計師的經歷、經驗,站在自己的思考角度來分析一下這個系統而已。