世界之最,超级并发抢票平台-深入解析12306购票系统(上)

admin 2024年2月10日12:47:54评论20 views字数 2409阅读8分1秒阅读模式
世界之最,超级并发抢票平台-深入解析12306购票系统(上)
世界之最,超级并发抢票平台-深入解析12306购票系统(上)

2024年春节来啦,在这里,我们祝愿每一位读者都能开开心心,过一个愉快祥和的春节。

世界之最,超级并发抢票平台-深入解析12306购票系统(上)
世界之最,超级并发抢票平台-深入解析12306购票系统(上)
世界之最,超级并发抢票平台-深入解析12306购票系统(上)

2024年春运从1月26日开始,到3月5日结束,共计40天。是疫情防控转段后的第一个常态化春运,预计全国跨区域人员流动量将达到90亿人次,铁路、公路、水路、民航等营业性客运量将超过18亿人次。

这种国民抢票系统,100w每秒的高并发,高达700张每秒的售票能力,堪称世界顶级应用系统架构,我们通过调研、向相关工作人员咨询(非保密内容)等,对整个售票系统进行一些架构上的复现。

世界之最,超级并发抢票平台-深入解析12306购票系统(上)

  12306 VS 美国Amtrak售票系统

世界之最,超级并发抢票平台-深入解析12306购票系统(上)

这一次,我们把西方的单层架构按在地上狠狠摩擦!

中国抓住了云计算的尾巴,把云原生玩得炉火纯青,当然,在12306这样的国民级应用上也运用了分布式云原生系统。

云原生系统在操作系统层面屏蔽了底层的物理硬件,包括cpu调度、gpu计算调度、优化,屏蔽了地理条件,能够根据不同的用户进行具体的负载均衡。并且将服务部署在云上、能够将系统交给统一的运营商进行管理、防止了因为电力问题导致的服务宕机问题。

美国的Amtrak使用的是老式的单集群但服务架构,传统BS架构,这种架构其实也有一定的好处,在分布式问题上能最小程度的保证事务问题,就算是多线程问题,也是比较简单的。但是这种问题在高并发高带宽场景下直接死亡!

世界之最,超级并发抢票平台-深入解析12306购票系统(上)

 抢票系统的性能瓶颈在于分布式事务

世界之最,超级并发抢票平台-深入解析12306购票系统(上)

大家都知道,分布式事务就是解决:ACID问题,最终能不能把票抢到手,卖10张票是不是真的只卖了10张,而不是卖了100张(数据并发问题),

其实将这些问题解决好已经有很好的解决方案了,各类程序设计框架都有实现,但是其实我们知道一个哲学观点:普适性和契合性不可兼得,虽然java的spring boot 或者spring cloud上都有对事务的处理和较好的实现,但是其实这些普世框架都是有一定性能瓶颈,像C++的Apache Thrift、Atomix等和Java一样会存在以下问题

世界之最,超级并发抢票平台-深入解析12306购票系统(上)

两阶段提交的开销

两阶段提交(2PC)需要在准备阶段和提交阶段进行两次网络通信,并且在准备阶段需要锁定资源,这都会增加事务处理的开销。此外,如果协调者在提交阶段失败,参与者将无法确定事务的状态,需要额外的机制来恢复。

世界之最,超级并发抢票平台-深入解析12306购票系统(上)

数据一致性检查

为了保证数据的一致性,分布式事务可能需要在提交前进行一致性检查。这可能需要读取和比较多个节点的数据,增加了事务处理的复杂性和时间。

其实上述两种阶段是非常耗费时间的,所以在具体的抢票场景中,我们可能会对某些实现进行重写或者自己完整实现一套。比如阿里巴巴在自己的电商系统上自己实现了一套分布式框架:Seata,研究Seata对12306的事务重写有重要意义,研究完Seata我们也基本知道12306如何入手重写相关框架。

世界之最,超级并发抢票平台-深入解析12306购票系统(上)

Seata框架解析

世界之最,超级并发抢票平台-深入解析12306购票系统(上)

Seata的核心思想是基于两阶段提交协议,事务处理,对于电商系统而言,Seata就能在电商交易上比自带的事务处理速度快。详细研究Seata对我们研究12306的抢票系统有指导性作用。

Seata由三个重要组件组成:
TC(Transaction Coordinator)
TM(Transaction Manager)
RM(Resource Manager)
Seata中的TC负责管理全局的分支事务的状态,TM用于开启、提交或者回滚全局事务,而RM则负责分支事务上的资源管理,向TC注册分支事务,上报分支事务的状态并接受TC的命令来提交或者回滚分支事务。

Seata的执行流程大致如下

世界之最,超级并发抢票平台-深入解析12306购票系统(上)

  1. TM向TC申请开启一个全局事务,全局事务创建成功并生成一个全局唯一的XID。
  2. XID在微服务调用链路的上下文中传播。
  3. RM向TC注册分支事务,将其纳入XID对应全局事务的管辖。
  4. TM向TC发起针对XID的全局提交或回滚决议。
  5. TC调度XID下管辖的全部分支事务完成提交或回滚请求。
世界之最,超级并发抢票平台-深入解析12306购票系统(上)

Seata与Java自带的事务框架主要区别

世界之最,超级并发抢票平台-深入解析12306购票系统(上)
世界之最,超级并发抢票平台-深入解析12306购票系统(上)

分布式事务支持

Seata是一款开源的分布式事务解决方案,而Java自带的事务框架(如Spring的事务管理)主要关注于单体应用的事务管理。Seata致力于在微服务架构下提供高性能和简单易用的分布式事务服务,支持多种分布式事务模式(如AT、TCC、SAGA和XA),而Java自带的事务框架仅支持单一数据库或单一数据源的事务管理。
世界之最,超级并发抢票平台-深入解析12306购票系统(上)

事务传播行为

Seata支持多种事务传播行为这些传播行为定义了如何在分布式环境中传播事务。而Java自带的事务框架也支持类似的事务传播行为,但其关注点在于单一事务的管理,而不是分布式事务。
世界之最,超级并发抢票平台-深入解析12306购票系统(上)

全局事务管理

Seata通过全局事务ID来管理跨多个服务或数据库的事务,确保这些事务在全局范围内的一致性和完整性。而Java自带的事务框架通常只关注于当前服务或数据库的事务管理,不具备全局事务管理能力。
世界之最,超级并发抢票平台-深入解析12306购票系统(上)

故障恢复和容错

Seata提供了丰富的故障恢复和容错机制,如自动回滚、手动回滚、补偿操作等,以确保在分布式环境中事务的可靠性和一致性。而Java自带的事务框架通常只提供基本的事务管理功能,不具备这些故障恢复和容错机制。
世界之最,超级并发抢票平台-深入解析12306购票系统(上)

透过seata看12306的基本事务结构

世界之最,超级并发抢票平台-深入解析12306购票系统(上)
阿里巴巴作为Java的主流支持者,我们在这里也使用Java进行该框架的使用,不过通过阅读seata的源码,我们也能在C++、Golang等语言上实现
阿里巴巴某仓储交易系统的使用。(后续我们会对该框架进行深入解释)
世界之最,超级并发抢票平台-深入解析12306购票系统(上)
所以其实在12306内部对于分布式事务,我们可以预感到,12306会在分布式事务的事务分组与高可用上进行重写,理想结构可能于seata一致:
假设12306要对外提供抢票接口,如携程、去哪儿等,保证高可用和事务。结构如下
世界之最,超级并发抢票平台-深入解析12306购票系统(上)
解决完分布式事务处理和其性能问题,下面我们要实现网络负载均衡问题。请关注下一篇《世界之最超并发抢票-----深入解析12306购票系统(中)》
世界之最,超级并发抢票平台-深入解析12306购票系统(上)

NEW YEAR

世界之最,超级并发抢票平台-深入解析12306购票系统(上)

点个在看你最好看

原文始发于微信公众号(代码小铺):世界之最,超级并发抢票平台-----深入解析12306购票系统(上)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月10日12:47:54
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   世界之最,超级并发抢票平台-深入解析12306购票系统(上)https://cn-sec.com/archives/2485682.html

发表评论

匿名网友 填写信息