2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

技术专家支招 12306.cn 性能优化

  • 2012-01-20
  • 本文字数:1559 字

    阅读完需:约 5 分钟

每年春运都是一件牵动人心的大事,电子商务大势所趋,今年春运我们终于迎来了传统购票方式之外的另一个选择—— 12306.cn 。不过这个新选择并没有让大家的回家之路变得顺畅多少,只是把一部分人的“战场”从寒风中或者电话旁换到了互联网上,各种工具、插件齐上阵,只为买到一张票,网友将它戏称为“中国最牛电商”、“电商严冬中的一朵奇葩”。

我们相信铁道部原本是想让 12306.cn 为大家服务的,不过就目前该网站的表现来看,实在是差强人意。铁路购票系统的细节我们不得而知,笔者也不清楚那非常特别的“海量事务高速处理系统”究竟为何物,但相信该系统在某些地方还是有别于大家所熟知的互联网系统的。针对铁路购票网站无法应对购票客流的话题,在微博和博客中引发了热烈的讨论,众多网友纷纷出谋划策,提出了很多优化的建议。

游戏技术专家云风早些时候发表了博文《铁路订票系统的简单设计》,其中提出了一种基于排队系统的设计方案,排队是网游中比较常用的一种手段,这里将购票网站比作购票窗口,需要购票的用户必须先排队,最后排到的用户才能进行实际的购票操作。藉此提升站点稳定性,避免大量社会资源浪费在无效的网络购票流程上。在文章最后,云风认为:

因为铁路购票系统很多年前就实现了内部网络化,有成熟系统支撑,运作多年。这次做互联网版本,一定不能放弃原有系统新来一套。[…] 所以要做的仅仅是怎么做一个系统和原有系统对接。

4399 首席架构师曹政也撰写了一篇《铁路订票网站个人的设计浅见》,他将网站的主要需求分为三部分,即车次查询与余票显示、用户注册与登录,以及下单。文中以缓存为切入点,提出了一些建议:

  • 针对查询,存储结构 KV 化,推荐 Redis 之类的 NoSQL 存储
  • 车次及车票余量的查询结果要缓存化、静态化
  • 应对 10 亿级别的请求,在前端也需要做缓存处理
  • I/O 优化

缓存化、静态化并不是不做动态更新,总之,目标就是让绝大多数的请求都落到缓存中,降低后端服务器的压力,让它们能有更多的资源处理真正的购票请求。

知名博客酷壳作者、亚马逊中国技术经理陈皓从 12306.cn 的性能问题入手,介绍了一些常用的性能优化技术。虽然其中的一些东西受到了质疑,不过全文还是能让读者了解到性能优化的诸多内容。首先,从业务上分析了 12306.cn 与 QQ、网游、秒杀、奥运票务系统的区别,认为它和电子商务的订单系统比较相似,而且铁路票务中的突然放票做法非常恐怖。随后,分前端和后端两部分展开详细说明。

前端优化技术常用的有:

  • 前端负载均衡,通过 CDN 及 DNS 负载均衡器分散压力
  • 减少前端链接数,例如可以合并 CSS、JS 和图标文件
  • 减少网页大小增加带宽
  • 前端页面静态化
  • 优化查询,可以考虑使用 NoSQL 技术
  • 缓存动态页面和查询数据

后端优化技术主要是:

  • 数据冗余
  • 数据镜像,可提高可用性,便于负载均衡
  • 数据分区,比如按照火车票的信息分区存放数据
  • 后端系统负载均衡,建议由下游的计算服务器去任务服务器上拿任务
  • 异步和批量处理,比如可以使用队列进行排队
  • 限流,这是系统的一种自我保护手段

关于云风提出的排队方法,陈皓也做了一些补充,例如,如何防范攻击,队列的一致性和等待时间等等。陈皓强调

无论你怎么设计,你的系统一定要能容易地水平扩展。
上述的技术不是一朝一夕能搞定的,没有长期的积累,基本无望。

上面的一些讨论都是围绕技术展开的,在 Google+ 上,霍矩、云风和刘新生(o6z)的讨论同样精彩,o6z 指出仅从技术入手无法解决根本的问题:

做这些项目不是应该先设计,而是应该先业务,特别是应该先了解清楚他们现在的系统构件情况。[…] 这不仅仅是 Web 的问题,而是要先从业务下手。[…] 构架师不是一个技术角色,做的不是技术决策,而是业务和商业决策。

除此之外,还有一些文章也值得一读,例如这篇《建设一个靠谱的火车票网上订购系统》。不知读者您又有何想法?值此新春佳节之际,希望每位读者都能顺利买到车票,与家人共度新春。

2012-01-20 00:166132
用户头像

发布了 135 篇内容, 共 63.8 次阅读, 收获喜欢 43 次。

关注

评论

发布
暂无评论
发现更多内容

张宏江出席HICOOL 2021全球创业者峰会,阐述AI研究与创业新机遇

硬科技星球

人工智能 大模型时代 悟道2.0

为抢人才,字节架构师竟将42W字「2021大厂真题集」,上传GitHub

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

淘宝网 Java 千亿级并发系统架构设计笔记(全彩版小册开源)

Java 架构 面试 后端 高并发

阿里IM技术分享(三):闲鱼亿级IM消息系统的架构演进之路

JackJiang

架构 即时通讯 IM

吊打面试官必备-阿里内部性能优化实战手册

Java架构师迁哥

爬虫初探: 一次爬虫的编写尝试

程序员架构进阶

实战问题 个人思考 9月日更 spider 搜索结果

什么?分布式事务现在不是都在用么?你还不会?

Java 架构 分布式 后端 计算机

代理服务器转发消息时的相关头部(qbit)

qbit

正向代理与反向代理 Proxy

SpringBoot 如何进行对象复制,老鸟们都这么玩的

Java 架构 后端 计算机 框架

和阿里大牛的技术面谈,springcloud面试题汇集与答案

Java 程序员 后端

Alibaba内部713页Java程序性能优化实战手册首次开放!大受好评

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

Alibaba最新发布:2021最符合Java程序员的“学习路线”

Java架构师迁哥

突击 22 天面进腾讯,给到 32K*14 薪!全靠这份阿里面试参考指南了

Java 程序员 架构 面试 计算机

一年数十万次实验背后的架构与数据科学

百度开发者中心

人工智能 架构 最佳实践 方法论 数据科学

自定义View笔记

Changing Lin

9月日更

NoSQL数据库——Cassandra

hanaper

上云迁移之路,如何选择适合方式?

云计算

史诗级放水…字节3-2大牛分享350道Java岗真题,刷完获阿里offer

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

智慧物流可视化,能否解决购物节后的爆仓危机?

ThingJS数字孪生引擎

大前端 物联网 可视化 智慧物流 数字孪生

和腾讯大佬的技术面谈,BTAJ面试有关散列(哈希)表的面试题详解

Java 程序员 后端

和腾讯大牛的技术面谈,分布式系统中ACID和CAP有什么区别

Java 程序员 后端

马某兵VIP资料惨遭泄露,Java大厂面试手册,21年高频题版

Java架构师迁哥

字节内部进阶用的Java中高级岗技术图谱到底泄露了,和开源没区别

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

分布式事务内存数据库--MemDB

hanaper

要不要换种方式开发软件?

鲸品堂

软件开发

MDEX市值机器人系统开发功能介绍

量化系统19942438797

交易所 市值机器人 MDEX

译介:《组装一台电脑9:精简》

姬翔

9月日更

IT大厂八股文更新上线的操作系统,刚上线点击量破百万!赶紧收藏

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

非科班杀进字节跳动,全靠GitHub公认最强的数据结构与算法笔记

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

如何让项目准时上线 - 续篇

石云升

项目管理 管理 引航计划 内容合集 9月日更

中国移动5G消息开发者社区第三期直播课堂圆满结束,直播回放已上线社区!

5G消息

技术专家支招12306.cn性能优化_架构_丁雪丰_InfoQ精选文章