写点什么

技术专家支招 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:165930
用户头像

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

关注

评论

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

虎符研究院关于 Manta Network平行链解决方案的分享

区块链前沿News

虎符交易所 币圈后浪

布局说明 - 大屏云极简使用手册

shulinwu

可视化 数据可视化 大屏可视化 智慧大屏可视化 大屏

阿里云智能编码插件,更Cosy的开发体验

阿里云云效

Java 阿里云 程序员 开发 研发

ironSource 新功能发布,开发者可在同一会话中实时调整广告策略

Geek_2d6073

Nebula Graph 的 KV 存储分离原理和性能测评

NebulaGraph

图数据库 分布式图数据库

【案例】基于星环科技数据云平台TDC为富国基金建设万能的数据湖

星环科技

数据库

跨团队协作:提高团队生产力的 7 种策略

小炮

团队管理 知识管理 团队协作 办公效率

用好这28个工具,开发效率爆涨|云效工程师指北

阿里云云效

云计算 阿里云 云原生 研发工具 研发

活动预告 | DataOps + MLOps Meetup

第四范式开发者社区

人工智能 机器学习 开源 DevOps MLOps

易观分析对《关于银行业保险业数字化转型的指导意见》的解读

易观分析

银行 数字化

低代码平台设计探索,如何更好赋能开发者

雯雯写代码

低代码 开发平台 开发者,

新思科技最新报告显示97%的应用存在漏洞

InfoQ_434670063458

新思科技 应用安全

墨天轮国产数据库沙龙 | 许力:阿里云原生Lindorm TSDB数据库,驱动工业IT&OT超融合数字化系统升级

墨天轮

数据库 阿里云 tsdb

HertzBeat赫兹跳动v1.0.beta.4 发布, 易用友好的高性能监控告警系统

TanCloud探云

开源 APM 监控 监控系统 监控告警

Python 中 base64 编码与解码

AlwaysBeta

Python 程序员 编程语言 base64

C++学习网站

C语言与CPP编程

c++

数据可视化大屏 - 大屏云极简使用手册

shulinwu

可视化 数据可视化 大屏可视化 智慧大屏可视化 大屏

实践GoF的23种设计模式:SOLID原则(上)

华为云开发者联盟

设计模式 GoF SOLID SOLID原则 分布式应用系统

融云 IM 在 Electron 平台上的设计实践

融云 RongCloud

赋能金融领域,国密改造让安全合规更加牢固

电子信息发烧客

安全

数据系统提供商极道科技加入龙蜥社区

OpenAnolis小助手

Linux 开源 数据系统

应用数仓ODBC前,这些问题你需要先了解一下

华为云开发者联盟

数据库 GaussDB(DWS) 驱动 ODBC 驱动管理器

教你如何使用flask实现ajax数据入库

华为云开发者联盟

Python 数据库 flask 文件上传 ajax数据

Web 键盘输入法应用开发指南 (2) —— 键盘事件

天择

JavaScript 键盘 输入法 3月月更

“碳中和”背后的创新科技!

青云技术社区

云计算 碳中和

一文带你看懂HarmonyOS应用上架

HarmonyOS开发者

HarmonyOS 应用开发

用 python selenium 爬简书,Python自动化领域之 Selenium WebDriver 学习第2篇

梦想橡皮擦

Python 3月月更

星环科技ArgoDB 3.2正式发布,全面升级易用性、性能和安全

星环科技

数据库

组件简介 - 大屏云极简使用手册

shulinwu

数据可视化 大屏可视化 智慧大屏可视化 大屏

BFS/DFS/DP 算法案例 LeetCode题目:传递信息

OpenHacker

LeetCode 动态规划 深度优先搜索 算法解析 广度优先搜素

Android包体积优化上篇- 资源混淆优化

百度Geek说

百度 前端 后端 优化 包体积

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