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

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

一:从平台架构来分析

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

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

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

  1. 一个资深程序员看12306 (三)

    首先声明,本篇文章内容将和12306没有半毛钱关系,只是对(一)和(二)的延续. 实话说,原本是没有打算写三的,其实最初只打算写个一,因此,当时博客文章命名为<资深程序员看12306铁路售票系统 ...

  2. 一个资深程序员看12306

    http://blog.csdn.net/nostopstep/article/details/18222629 12306铁路售票系统,这是近两年来难以绕开得话题.在2012年的时候,刚看到谩骂调侃 ...

  3. 一个资深程序员看12306(四)

    在写这篇文章的时候,想到我一仁兄很经典的话:"有时候用户只是说一句话,问一个问题,你就得写一篇文章来回应,甚至还不行."我十分赞赏这句话,也佩服这位仁兄在处理用户需求的时候表现出的 ...

  4. 一个资深程序员看12306(终结篇)

    "喂?老兄,今晚我请吃饭,你有时间没"? "有,当然有了." "很好,你今晚帮我值班吧!" 上面的台词估计很多人都看了都会一笑.为什么会有笑 ...

  5. 一个资深程序员成功的背后

    转载:来自希赛BBS 成功的背后,有着许多不为人知的故事,而正是这些夹杂着泪水和汗水的过去,才成就了一个个走向成功的普通人. 凌晨两点半,早已习惯了一个人坐在电脑前的我,望着屏幕,任思绪在暗夜的包容下 ...

  6. 学完java后学编译原理_一个资深程序员对Java初学者的学习思维路线建议

    如何学习Java,学完后尽快成为一个可以参加工作的Java开发者.现在还在待业期间,如何准备转行学习Java.相信很多初学java者都在考虑这个问题. 如果你是在校学生,务必要在学好基础(比如计算机系 ...

  7. 一个资深程序员的忠告

    你是否了解,咱们中国有相当大的一部分软件公司,他们的软件开发团队都小的可怜,甚至只有1-3个人,连一个项目小组都算不上,而这样的团队却要承担一个软件公司所有的软件开发任务,在软件上线和开发的关键阶段需 ...

  8. 资深程序员参加面试因穿着被认为是新手,拿下帽子后,被当场录取

    在职场上,面试几乎是每一个行业从业人员都必要要经历的过程.对于很多的职场新手来说,在面试的时候很容易因不懂"行业潜规则"而遗憾的被面试官淘汰! 最近,一个资深程序员应聘的视频引起了 ...

  9. (精华转看)一个老程序员的心里话

    一个老程序员的心里话  (本来不想写的,实在不想看到某些人误人子弟,混淆视听,耽误了中国IT的未来,所以一吐为快) 一些人总是发出一些错误的声音,形成了劣胜优汰可怕的现象.他们在误导着中国,把我们的后 ...

最新文章

  1. 【哈利波特】Sherbert Lemon对HP的解读之六
  2. 机器学习算法加强——决策树和随机森林实践
  3. solidity智能合约[37]-以太坊虚拟机数据存储
  4. mongo mapreduce java_那位帮忙提供一个java mongodb多个collection进行mapreduce的操作。
  5. C++_IO类型_文件输入输出流_字符串流
  6. 祝贺吾博文中第一篇点击超过一万的文章出现
  7. Column ‘XXX‘ not found完美解决
  8. 2020年Java市场需求分析
  9. python的底层是c_Python的内存管理和垃圾回收机制:基于C语言源码底层深入剖析...
  10. 聚合架构-晓岩企业架构系列讲座整理(0-19)
  11. 盛迈坤电商:退款率高会影响店铺吗
  12. Python 使用speedtest来测网速
  13. 线性代数在计算机视觉的应用,线性代数在数据科学中的十大强大应用(二)
  14. 硬盘安装ubuntu 14.04 LTS
  15. 无刷电动车控制器设计要点
  16. GRUB4DOS(六) find命令的实现
  17. Python Scipy 显著性检验
  18. 机器学习:Python实现聚类算法(二)之AP算法
  19. 网站项目成功管理实践(刘振飞)
  20. 万年历农历程序(抄表法)

热门文章

  1. nuxt解决首屏加载慢问题_Steam商店加载慢/社区进不去有效解决办法
  2. 家政公司微信小程序源码运营版 开源可二开 含详细搭建教程
  3. java long类型大小_java中long类型占多少字节
  4. 短链系统设计-场景需求及性能要求分析
  5. 在CSDN上消失的一年
  6. Veusz:替代Origin的免费绘图软件之二
  7. JS鼠标事件实现动效
  8. Unhandled error during execution of render function
  9. ASBSO:具有灵活搜索长度和基于记忆选择的改进头脑风暴优化
  10. 自指(Self-reference)