摘要:因为单杏花是中国铁道科学研究院集团有限公司首席研究员,12306 的系统设计师,她为千万人的顺畅出行做出了不可磨灭的贡献。早期使用过 12306 的朋友们一定都对它有着痛苦回忆,尤其是在过年抢票的时候……
2024 年 12 月 9 日,中央宣传部授予单杏花 “时代楷模” 称号,在了解她的事迹之后,网友们直呼她就是 12306 的“最强大脑” 。她为何能享此殊荣?
因为单杏花是中国铁道科学研究院集团有限公司首席研究员,12306 的系统设计师,她为千万人的顺畅出行做出了不可磨灭的贡献。早期使用过 12306 的朋友们一定都对它有着痛苦回忆,尤其是在过年抢票的时候……
2012 年春运,12306 互联网售票系统刚上线就在巨大的峰值访问量冲击下几近崩溃。但单杏花没有退缩,她带领团队核心骨干,白天密切跟踪系统运行状况,在夜间 23:00 系统停售后迅速对其优化并全面测试。
经过连续 50 多天超负荷工作,团队终于使系统顶住了日点击 14 亿的压力,售票量也从 60 多万张攀升到 120 万张。此后,她持续带领团队优化调整 12306 核心系统,让 12306 系统成为全球交易量领先的超大型实时票务系统,达到世界先进水平。
单杏花的付出让我们今天可以用上稳定高效、体验优异的 12306,现在我们来了解全球最大票务系统是如何炼成的。
要说单杏花有多厉害,就要知道 12306 这套系统有多复杂,在票务这一领域,它的复杂度可以说是世界之最,有以下几个主要原因:
数据处理与管理复杂:系统要在瞬间准确处理和更新大量复杂的票务数据,确保数据的准确性和实时性,避免一票多售等问题。高并发访问压力大:高峰期面临着每秒百万计的并发访问请求,这对系统的服务器承载能力、网络带宽以及数据处理速度都提出了极高的要求。业务规则多样:系统需要精确地实现票务规则,在用户购票、退票、改签等操作时进行实时的校验和处理。系统稳定性与安全性要求严苛:系统必须具备高度的稳定性和安全性,要防止数据泄露、恶意攻击等安全风险,保障用户信息和票务交易的安全。复杂的需求
上述任何一个问题单拿出来都是世界级难题,而咱们的 12306 则集齐了所有困难要素,单杏花与团队直面挑战,通过技术革新闯过道道难关,来看几项核心技术的设计与实现。
读写分离、售取分离技术:通过将数据的读取和写入操作分开处理,售取分离使得售票和取票流程各自独立优化,提高了整体的票务处理效率,避免了因集中处理售票和取票业务而产生的性能瓶颈。
异构数据同步技术:采用异构数据同步技术确保数据的一致性和实时性,通过该技术可以将这些异构数据进行有效的整合和同步,保证在任何时候用户查询到的票务信息都是准确、最新的。
弹性扩展技术:系统能够根据实时的负载情况,自动地增加或减少服务器资源。确保系统始终能够保持稳定的性能,不会因流量突发增长而崩溃,从而保障了大量用户能够同时顺畅地使用服务。
分布式内存计算技术:将数据存储在内存中,并通过分布式计算框架对数据进行快速处理。大大提高了数据的读写速度和处理效率,能够在极短的时间内响应用户的查询和购票请求。
构建出 12306 这样大规模的软件系统,还要做到稳定高效是相当不容易的。小异特别精选出七本讲解大规模、高并发软件开发的经典图书,帮助软件工程师们成为团队中的“最强大脑”。
《大规模C++软件开发 卷1:过程与架构》
大规模软件开发有何天机?本书基于 C++ 编程语言一次性讲透。
书中通过具体示例来讲解大规模 C++ 开发的核心设计思想,打下规模级软件开发的技术基础,展示实际开发所需的过程、方法、技术和工具。通过阅读本书,读者可以学会大规模软件系统的设计和开发方法。
作者手握 30 多年构建大规模、关键任务企业系统的实战经验,在书中展示了如何创建和增长软件资本,而读者则能学会如何使用熟悉的 C++ 构件来解决现实问题。
本书专为有经验的 C++ 软件开发者和系统设计师编写,从事大型软件开发工作的架构师或项目负责人等也可以通过阅读本书解决实际工作中的问题。
《C++并发编程实战(第2版)》
处理高并发问题向来是软件系统设计与开发中的难点,且看这本书如何破解高并发难题。
本书深度介绍了 C++ 并发和多线程编程方法,书中从 C++ 标准程序库的各种工具开讲,介绍线程管控、在线程间共享数据、并发操作的同步、C++内存模型和原子操作等内容。
书中还介绍了基于锁的并发数据结构、无锁数据结构、并发代码,以及高级线程管理、并行算法函数、多线程应用的测试和除错。本书资源丰富,包括附录、示例代码,以及其他补充资料,帮助读者更完整、细致地掌握 C++ 并发编程的知识脉络。
对于想要迫切深入了解 C++ 多线程开发的读者,以及使用 C++ 进行各类软件开发的开发人员、测试人员,本书都能提供宝贵的知识与经验。每一位 C++ 程序员的案头都应该放上这本书,以便随时翻阅参考。
《分布式应用系统架构设计与实践》
分布式应用系统对高性能、高可用性、可扩展性和可维护性有着极高的要求,本书就全面阐述了分布式系统架构的设计与实战。
本书可分为 3 个部分:
第一部分是分布式系统架构概述,介绍一些分布式系统架构下常见的基础概念和架构设计的目标;第二部分是核心理论及技术,介绍分布式应用系统下常见的技术中间件机制和使用场景,着重介绍分布式应用系统在高性能、高可用性、可扩展性和可维护性等方面常见的优化技术;第三部分是架构实践案例,梳理几种常见的大型分布式应用系统的架构,并结合具体问题进行分析,使读者能够真正理解设计分布式应用系统架构所面临的问题及解决问题的思路。本书内容由浅入深且案例丰富,适合各级程序员和架构师阅读学习,产品经理、项目经理也可以从本书中吸收到知识与经验。
《深入浅出Greenplum分布式数据库:原理、架构和代码分析》
Greenplum 是一款基于 PostgreSQL 改造的开源数据库,主要用来处理大规模数据分析任务。它采用了 MPP(大规模并行处理)架构,将数据分布到多个节点上来实现规模数据的存储,并通过并行查询处理来提高性能。
本书基于 Greenplum, 帮助读者深入剖析分布式技术在工业级产品内的实现细节,透彻把握分布式数据库的底层逻辑。本书内容可以分为三个部分:
第1篇主要介绍分布式数据库基础理论,包括经典的CAP理论、一致性算法相关的理论、并发控制相关的理论等;第2篇具体介绍Greenplum数据库,从分布式事务、分布式计算和分布式存储3个方面,深入代码层级,讲述分布式理论在工业上的实现;第3篇是总结和展望,介绍云原生数据库和新技术带给Greenplum和数据库管理系统的机遇和挑战。本书适合数据库专业工作者、云计算与大数据领域从业者阅读,把握云原生数据库的未来发展。
《深入理解软件性能——一种动态视角》
软件性能优化真的不能靠盲猜,大招都写在本书里。
本书能够帮助读者学会如何为软件设计观察能力、日志记录和时间戳;如何测量 CPU、内存、磁盘、网络的性能;如何设计开发低开销的监测工具;如何分析产生的性能数据。
本书作者提出,解决软件性能问题要从“软件动态”视角出发,看清硬件与软件的交互关系,看清各个进程之间还有线程之间的交互。对于一些复杂概念,作者还精心绘制了图示加以说明,使得本书内容易于理解和学习。
本书注重实战,在第四部分针对执行代码太多、等待 CPU、等待内存、等待磁盘、等待网络等各种性能异常,都给出了实例,并进行了完整的测量、观察、分析问题,解决问题的过程。
这应该是所有程序员的必读书目,无论他们使用的是什么编程语言,因为性能问题都是相通的。掌握了“测量-观察-修复”这套大法,再隐秘的性能问题也能迎刃而解。
《Kubernetes零基础实战》
云原生的核心思想,是将应用程序设计、开发、部署和管理都与云环境相适配。通过容器化技术将应用程序打包部署,从而保证环境一致性。Kubernetes 是容器编排平台,目前在业界可算是事实上的标准,它是云原生的核心技术。
零基础小白也可以通过本书轻松入门,因为本书具备以下四大特点:
不用懂 go 语言,本书不探究 Kubernetes 内部源码实现细节,一切从实战应用出发。实战导向,配套 4 大项目实战,从搭建实验环境到高级运维管理,能直接在工作中应用。系统全面,涵盖 Kubernetes 的各方面知识,包括 Kubernetes 的核心对象与运行原理,还有高级运维管理知识。知识精炼,不贪大求全,本着做减法而不是做加法的原则,力争每小节聚焦一个知识点。对于想要进入云原生领域的技术人来说,都应该先从阅读本书开始。
《软件设计的哲学(第2版)》
要从根本上解决软件系统的复杂性问题,程序员们应当掌握软件设计的底层逻辑,这本经典之作,就揭示了一系列在软件设计时应当遵循的原则,包括模块化设计原则、代码设计原则、代码维护原则、性能设计原则等。
本书提供了一系列设原则和技术解决方案,更重要的是,它强调了设计思维的重要性。书中的原则和警示信号帮助读者识别和解决设计问题,同时也鼓励读者在实践中发展自己的观点和方法。
本书作者 John Ousterhout 教授以多年教学经验为基础写成此书,教导读者如何识别软件中的复杂性,如何思考代码的设计——这种深层次的思辨能力对于任何希取得成功的软件开发者来说都是至关重要的。
本书同样极具实用性。书中的每一个原则和建议都基于实际的软件开发经验,而丰富的实战示例进一步增强了其实用价值,这意味着读者可以直接将这些原则应用到自己的工作中。
本书适合广泛的读者群体,包括软件工程师、计算机科学专业的学生、教育者、对软件设计和开发感兴趣的自学者以及技术管理者。无论是新手还是资深开发者,都能从本书中获得宝贵的知识和深刻的见
来源:小丁科技观察