西西河

主题:【讨论】回应对12306.cn网站的技术质疑 -- 忘情

共:💬187 🌺697 🌵3 新:
分页树展主题 · 全看首页 上页
/ 13
下页 末页
    • 家园 忘情不点评一下?这里有一些建议是纯技术的,不适合卖票业务

      楼主有不少好建议,类似减少网页静态内容的大小并优化网页结构,利用反向代理来缓存静态内容,采用负载均衡的分布式前端web服务器,分拆数据表等等都是很好的建议,也会很有效。但是有些建议明显不切合火车票卖票业务的实际情况。比如:

      1. “我们要在单条数据上进行数据分区,也就是说,把一个畅销商品的库存均分到不同的服务器上,如,一个畅销商品有1万的库存,我们可以设置10台服务器,每台服务器上有1000个库存,这就好像B2C的仓库一样”

      这条建议把集中售票的优势抹杀了。原来售票厅售票就是采用沿线每个站事先分配几张票的方式,结果很可能造成一个座位明明空着没有人买,但同一车厢里还卖出了不少站票。而集中售票方式则可以完全避免这样的问题,做到充分利用每个空座。

      2. “我觉得完全可以向网上购物学习。在排队(下单)的时候,收集好用户的信息和想要买的票,并允许用户设置购票的优先级,比如,A车次卧铺买 不到就买 B车次的卧铺,如果还买不到就买硬座等等,然后用户把所需的钱先充值好,接下来就是系统完全自动地异步处理订单。成功不成功都发短信或邮件通知用户”

      这种方式也不够现实。

      a.首先购票是突发业务,在几天的时间内几乎24小时的每一秒都有海量的订票交易,而系统必须在相对短的时间内给出交易是否成功的回复,这就使得异步处理的优势完全体现不出来;

      b.其次,现场购票如果买不到火车票可以立刻去买机票长途汽车票,如果异步处理等候时间稍长,比如隔夜才有结果的话,等系统通知我买不到票的时候,很可能也错失了买机票汽车票的机会了,这样更容易引发不满。

      c.不知道这次网络售票是不是与售票厅联网,还是单独拿出一批票来卖。如果单独还好说,如果是与售票厅联网,那么就不可能异步处理,因为售票厅是“同步处理”当场卖票的。

      如果让我来给建议的话,除了楼主说过的优化前端和数据库表结构的很多建议外,我会建议业务细分。比如查询车次余票用一组前端应用服务器,购票用另一组,结帐再用一组,分配座号(如果需要这个功能的话)又是一组。当然,购票和余票的数据库可能只能用同一组,否则任意区段的余票数目很难得到及时更新,座号可以单独按铁路局分成几组数据库,用户信息又是一组数据库。同组数据库只能采用集群技术分担负载,否则数据一致性就是大麻烦。

      技术构架方面,前端服务器和负载均衡代理可以分布在不同的网段(电信联通移动教育网等等)和不同的地理位置以保证网页响应速度,后端数据库也可以在每个网段都放置节点,但前端服务器与数据库节点,数据库节点与数据库节点相互之间必须保证至少10Gbps的连接以提供足够快的网络响应速度。另外,读写数据库要分离。

      这样的架构应该可以保证网民打开网页的实时性,同时,由于采用多数据源,以及数据库间交叉查询,也可以保证后台查询的速度和准确性并及时返回查询结果。

      • 家园 重复

        看忘情的帖子,确实积累了不少技术的经验。

        可惜多为工程经验,浮于表面。

        就如你分析别人对铁路网站的攻击浮于表面一样,你对数据库的理解也限于了主流产品对你们的洗脑。

        俺给你推荐三个东西,看对你是否有启发

        1 exdata

        2 nettezza

        3 spanner

        • 重复
          家园 你推荐的三个跟我说的没有一毛钱关系啊

          第一个exdata是Oralce的数据库+存储解决方案,解决的是数据库IO性能问题,楼主和我的文章里完全没有涉及这块。当然,如果采用oralce的产品,这个东东应该对提高IO性能有帮助。

          BTW。这个也属于你所谓的主流数据库产品,只是把存储做硬件优化后与数据库服务器整合在一起了而已

          第二个是IBM的BI warehouse,也就是说专门对于OLAP查询优化的,而订票系统肯定不是BI这个地球人都没有疑问吧

          第三个不是通用数据库,是google的私货,打死铁道部也不敢上的

          • 家园 好吧,俺再多说几句

            不想学葡萄,总是被人看不懂

            忘情的帖子解释了众网友的攻击不靠谱,因为核心问题在于数据库的OLTP,而基于传统的解决方案,这个问题是很难解决的。所以12306有情可原。

            而俺的回复是说明这个问题是可以解决的,并列了三个产品,看是否对你们有启发。

            三个产品的技术路线并不一样,但性能都有了数量级的提升,最后一个产品更是宣布,从此全世界只需要三个数据库,一个在开发中,一个在测试中,一个在线上跑。

            既然有产品能满足性能的要求,也就是说技术上是可以克服的。虽然众网友的攻击没道理,忘情自己的解释也没有看到技术的进步。

            我举了三个例子,并不是说只有这三个产品可以解决问题,当然还有更好的产品。

            不知道俺现在的说明是否有1毛钱关系了?

            • 家园 你说的只是数据库啊,还有前端呢

              spanner和ibm的那个不去说它,反正12306也不可能用。exadata看起来不错,data sheet和一些客户的应用实例已经达到十亿交易+/日级别的规模了,看起来似乎可以应付12306。不过上了exadata您可别嫌贵,一个X2.2的full rack的数据库和存储就得$3m,这还只是硬件和支持费用,估计再加乱七八糟其他费用,一个数据库得起码$4m,如果再加实施费用就得更多了。还不知道这玩意儿美国卖不卖给中国。不过话说回来,根据这个看起来这次升级要了2个亿¥好像也太过分了些,嘿嘿。。。

              不过还是得考虑前端的web构架和动态查询订票程序的构架,这也得应付得了这么大规模的访问量才行。

              • 家园 如何评价技术

                如果OLTP都解决了,WEB层面的只读应用还会是问题?

                众网友都能出谋划策(虽然他们说了些啥,忘情怎么回复的俺都没仔细看)

                俺只是从技术层面上回复说问题可以解决.没有考虑商业上,政治上的种种.不过退一步说,传统的架构再便宜,不还要2亿?还不能解决问题.当然还有更好的产品,国内也有巨头注意到了.希望能有决策者勇于跟随技术的进步.

                最后俺想告诉本贴的技术从业者,不要被商业公司洗脑.看一个产品或者技术,要从它的技术本质去思索.比如ibm的产品.这个产品的技术路线是什么,IBM为什么要收购它,这个技术路线是否可以应用于OLTP? 如果可以,IBM为什么宣传它是OLAP或者BI?从这个例子引开去,你会发现技术上的新天地.

                从西西河看了太多的历史社会,回馈一点技术,仅此而已.

      • 家园 一点不同看法。

        1。不是把同一车次分散到几个服务器上,是按车次或承担任务局分散,这样同一个车次肯定在同一个服务器上,虽然总数不集中但单车次上是集中的,不会出现你说的问题。

        2、这个俺不懂,不过对2c根据我的认识说一下:

          根据我以前的了解,票源不是混厂一起卖的,否则因为出票时间晚,窗口你会一张票都没有。

          网购、电话。窗口的票数应该是事先分配好的,比例不知道,但可以肯定的时网上买不到分给电话和窗口的票源,电话也买不到分给窗口的票源,但网上和电话没卖完的票源到最后一两(也许要多几天)天会放到窗口去卖。

          留票的事与咱们的讨论关系不大,虽然意见很大,但没法不留。一是铁路部门与地方关系千丝万缕,二是如果当地政府、公安如果有突发事件需要出行,总比旅客的事要重要些。另外还有与旅行社的留票合同,旅行社如果没有这合同业务就根本没法做。还有铁路的内部留票。不过这些票如果没卖掉的话最后一天或几个小时都会放在窗口卖,这也是有时热门票到开车前反而能买到的原因。

分页树展主题 · 全看首页 上页
/ 13
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河