一个资深程序员看12306 (二)

上一篇,我是从感官和直觉上进行的分析,可以说几乎没有涉及到技术层面。

但作为一个程序员,仅从感官和直觉上分析,那就不叫程序员了,更何况,我还自诩为资深程序员呢?尽管我一再软件行业跌打了近十年,但资深也不是仅仅靠时间就能说明一切的。因此,我一定不能跑了题,本篇将从技术层面进行简单分析。

一:从平台架构来分析

一个好的系统,必须有好的平台架构,那么什么样的平台架构是好的呢?评价一个平台架构的好坏,我认为主要从五个方面来评判:

高稳定性:系统级平台,稳定压倒一切,没有稳定的平台一切都是浮云。

那么如何使一个平台具有高稳定性能?要想使一个平台具备很高的稳定性,那除了平台服务器程序本身稳定可靠,经得住考验外,还要有冗余备份,即备份得时刻准备着。举个形象的例子,一个富翁,出入都会带上几个保镖,那么如果不发生任何事情,这些保镖的作用就看不出来,就会显的多余,但一旦出了事情,他们的重要性就显现出来了,必须在关键的时候能够顶上去。那这么多的冗余备份,都是要靠钱砸出来的;再换个比喻,一个国家和平时期,看不出部队的重要性,但你敢不要部队么?部队是保护和平稳定的核心内容。所以只是高稳定三个字,那背后付出的代价多大有多少人知道?一个平台,大多数时候冗余备份是多余的,作为公司来说,不可能让其闲着啥都不干。就像保镖一样,闲的时候,你可以帮着开车,甚至送老板娃上学。部队平时搞个演戏,或者抗个洪救个灾什么的,甚至参与到治安维护上,这样就能很大程度的发挥了冗余部分的作用。这也是为啥华为、百度、360、腾讯等很多大的公司,借助自己的优秀平台,来大力发展云盘,云存储的原因,因为他们的冗余备份足够,又不能浪费。

12306作为一个在几天内,访问人数超过全国人口总量的几倍的系统,不可能不去考虑稳定性。

 

高安全性:平台必须有很强的安全性,能够抗击或者分散大量的攻击;

       说完了稳定性,就要说安全性了,安全的重要指标就是用户信息不被盗,平台不被黑掉,大量的攻击不能打瘫痪平台。换句话说,客户端或者Web端你可以瘫痪数次,整个后端支持平台一次都不能挂掉。那么如何架设一个高安全性的平台呢?

首先就要解决的是,用户信息不能暴露在最上层,换句话说,就是用户数据信息尽可能的往更底层去存放。说的更通俗一点,就是用户登录的数据,不能直接放在第一层服务器上。搞技术的,特别是做网站的,都知道,IE通过WebService获取数据,而WebService直接连接数据库。这就是最基础的。这样的网站也是最容易被攻击的,我们应该把数据库向下再隐藏数层级。

其次,就是分散攻击力度。什么意思呢?就是不能让攻击包始终朝着一个方向打,要知道,水滴还能石穿呢?让攻击始终朝着一个点,那攻破是迟早的事。如果让他们的打击从一个点扩散到一个面,每个面都打的不疼不痒的,就解决了问题了。

再次,就是数据传输的安全性,不怕一万,就怕万一,因此所有的涉及到用户安全信息的内容,都得尽可能的加密传输,加密转运。其它还有数据库的访问不要通过传输SQL语句而是改为存储过程访问等。

然而,目前大多数中小公司,数据库的位置都很靠前,甚至一些大公司都有这样做的。分散打击点,是很多公司不会过多考虑的,因为对公司来说,没必要好那么大的资金去整这些,况且,他们的访问量也不大。官网访问的后端WebService,那最多就是设计成集群模式。前端架上个Ngx也就足够了,有多少个公司的官网访问量能每秒达到60万人次呢?有的公司很大,但官网并发访问量每秒不到几万,这样的官网,甚至连集群都不用考虑,只需要一主一备,甚至瘫痪后重启就行了。

       但12306不同,因为好汉架不住人多,如果有人存心想对某些官网网站进行攻击,用数十个服务器不停地给你的WebService发无用包。不为其他,只为让你的网站瘫痪,有几个能架的住的?而不幸的是,这样的人还挺多,并且大多数是竞争公司的公司行为。

       那再回到12306,每个抢票软件的每条消息都相当于一个攻击包,并且这些攻击包还是合法有效的包,平台不能直接丢掉,必须处理的包,更何况还有通过正常途径买票,不停地刷官网网站的呢?

       要想真正解决这个问题,只能是将WebService尽可能的分布式。可以这么理解,一个公司的官网可以同时并发的人数假如说是30万,那100个公司的官网,把他们的并发数算在一起,那不就是3000万了么?所以,12306要想解决并发访问官网,就需要部署100个甚至更多的12306的WebService,那就要申请更多的域名。只有这样,才能保证不被同时瘫痪。但这的需要多大的储备资金?更何况,仅仅这样还不够,还要解决更底层的数据同步问题。毕竟几百个公司有几百个数据库,他们之间不需要考虑数据同步和一致性,但一个公司的话,必须考虑。

 

高扩展性:好的平台,必须是能够动态扩展几乎任何一部分,并且是热扩展性。

       这个很好理解,就是说,当你的平台资源不够用的时候,只需要再配置一台或几台服务,直接插上电,通上网,这些服务器就会自动融入到系统平台中,开始工作并提供服务了。同样,一个服务器如果坏掉了,直接拔掉拿走就行了,而不会影响正在工作的其它系统,也就是说,用户感受不到任何异常。

高并发性:好的平台,必须能够支持高并发。

       这个也很高理解,就是访问量的问题,这里说的访问量,是合法数据包的访问量,整个平台,在同一时期,能够同时处理的有效数据。

海量存储:好的平台,必须有海量的存储信息。

       支撑高并发的,必定是优秀的存储平台,这个平台,能够适应海量数据的快速存储和访问,这就不能只是数据库了,还要考虑内存存储。因为数据库的存储毕竟是要做I/O操作的,I/O操作必然定会耗时。目前知名的数据库,我比较熟知的有SQL SerVer、Oracle、SyBase、Gbase和MySql,而我这几个数据库中,Gbases是树形数据库,非关系型数据库,是专门针对海量数据使用的,也就是说,海量数据的存储查询,他非常快,什么是海量数据呢?即存储记录以T的倍数来计算的。10T,100T的,他的存储速录快到让人咋舌,每秒钟最高能达到百万条数据。但他也有弊端,对于关系型信息的查找,就很慢了,因此它只能在特定领域使用。而SqlServer的话,如果是12306,不应该选择他,或者说选择他会被鄙视。因为他连基本的跨平台都不能,一般来说服务平台,都在Linux下,可他是微软的,不支持Linux。SyBase则是有点过时的数据库。Mysql做大存储量才5000万条。所以,选来选取,只能是Oracle。他的吞吐速率不高,单纯的查询和插入,他每秒的条数我测试过的最高不足2万条。还没有进行关联操作测试。所以,海量存储仅仅靠数据库是不行得,常用东西还需要放置在内存缓存中,类似Memcache这样的东西,让其和数据库配合使用,才是最优秀的。但,12306的数据,很大情况下,不能这么使用。

 

       另外,一个优秀的平台,还必须是高融合性,即能够供外界快速接入。因此,粗略来说,基于分布式的优秀平台,至少要有如下几个部分构成。

1、用户认证服务器。

2、日志服务器;

3、业务处理服务器。

4、数据管理服务器

5、数据库服务器

6、调度服务器。

7、操作维护服务器

二:从业务分析

       综上,一个优秀的平台,诞生时间肯定不会端,投入至少也是千万级别的。而上面这些,对于12306来说,都过于简单。只需要简单想一下,你就知道。12306的平台系统不可能是一个,他是多个平台系统的组合。

1、订票系统:负责票务的查询、预定、票仓管理、用户认证和登陆。

2、支付系统:用来进行购票的支付,锁定票据。

3、信息通知系统:用来进行订票后的通知。

这三大系统的融合,必然不是特别顺畅,他需要银行银监会的协助,联通电信移动运营商的协助。铁路系统的协助。等等,你想到的和你想不到的。这么想来,12306可以称为有史以来,最为复杂的系统了。这么想来,一些什么IT人士不堪忍受而自组团队来开发售票系统,简直是一个笑话。

 

因此,我们应该用正确的眼光看来看12306,不能仅仅是批判。要理性对待。莫说投入一两个亿,这个系统,投入100亿去做,都不为过,如果这个系统真做好了,那具有划时代的意义,他能做到像颠覆那个通讯公司就颠覆那个,设想一下,如果他又个类似QQ的东西,一下子就聚集了上亿人的账号信息。这是腾讯10年的成果。他只需不到一年就能达到。那他想做其他的,还难么?这么想的话,给他投个100亿,*可以通过它掌控整个民生民意和经济了。

一个资深程序员看12306 (二)

上一篇:PKU1860--Currency Exchange


下一篇:LINUX SHELL 抓取错误日志脚本