“喂?老兄,今晚我请吃饭,你有时间没”?
“有,当然有了。”
“很好,你今晚帮我值班吧!”
上面的台词估计很多人都看了都会一笑。为什么会有笑料?因为脱离了人的惯性思维。日常生活中,大家可能只会当笑话,或者会引用这些笑话,会扩散思维,想到很多更为搞笑的笑话。但技术不能这样,技术得脚踏实地,技术得足够严谨,虚心听别人的意见,技术不能浮躁。一个程序员看待一个问题,和这个程序员本身的成长经历和经验有很大关联,甚至和这个程序员从事的工作领域也有很大关系。还有,隔行如隔山,切记多聆听,不要说外行话,否则你认为你说了一句很牛逼的话,行内人会当笑话看。
本篇继续回到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系统的开发人员。所以只是站在一个局外人的角度,以程序员的经历、经验,站在自己的思考角度来分析一下这个系统而已。