原文:
寒假老师让做一个像12306订票网站一样高并发系统解决方案的调研,经过一番辛苦调查,发现12306的工程师们并没有那么差,反而心生万分敬佩,同时这个经历也验证了老毛的那句话:没有调查就没有发言权。
一、一般高并发web系统
这里的一般指的是秒杀之类的电子商务系统,比如说小米抢购、淘宝双十一、秒杀活动等等,12306订票网站与其有本质区别,下面会有说到。
系统架构图
下图是我调查众多资料总结出的系统架构图,当然这也不能作为通用的解决方案,首先像淘宝等企业公布的资料肯定不是最先进或者是性能最好的,其次具体情况还需具体分析。
核心技术点
- 前端优化 前端优化主要包括动态内容静态化,增加前端缓存。页面静态化是指将指含有大量动态元素的动态网页,如jsp、php等,转换为html静态页面,静态页面由于不用加载动态元素,其访问速度要比动态页面快得多,可以增加访问速度,减小数据库压力;前端页面缓存在系统前端对Web服务器上的页面进行缓存。
- CDN技术 CDN即内容分发网络,其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。
- 负载均衡 负载均衡的基本思想是把高并发的访问平均分配到每一个服务器节点上,从而减小分布式数据库中每一个节点的压力。
- 中间件 数据库的中间件技术是指把应用层与数据库层分离,在中间增加一个部分,避免应用直接访问数据库。因为系统可能采用读写分离的技术,因而会使用不同的数据库,中间件可以屏蔽数据库直接的不同,提供统一的接口。中间件还负责事务的协调处理,起到数据连接管理的作用,多个客户端连接通过中间件可以共用一个数据库连接。
- memcached memcached是一个高性能的分布式内存对象缓存系统,通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度,它是基于一个存储键/值对的hashmap。
- 并发控制 数据库限流,达到数据库的最大并发数,进入行锁状态。如不进行控制,一旦其中一个连接卡住,会引发雪崩效应,从而影响整个系统
- 排队系统 锁机制导致排队
- 并行复制 采用并行复制的技术可以解决主备库复制延迟问题
- 数据库拆分 分为水平拆分和垂直拆分,垂直拆分即按列拆分,把数据按应用分离,降低单个事务的数据处理量;水平拆分即按行拆分,降低节点的并发量
- 读写分离 有些系统读操作频繁,而有些系统写操作频繁,读写分离能有效提高访问速度
二、12306网站与淘宝的不同
12306的特殊性就在于其复杂性:
- 频繁的混合读写操作
- 座位实时复用 订单之间关联度较大,每卖出一张票,都需要调整整个车次所有可能区间的余票数量
调查之前,我也很简单的认为,只要不停地增加节点数量,必然能解决抢票尖峰时刻的问题,其实不然,访问速度主要受限于两个方面,一个是CPU处理速度,另一个是磁盘I/O。而简单的增加机器并不能解决这两个瓶颈,相反,节点越多,数据同步的代价越大。为了更好的解释其特殊性,需要引入一些基本概念。
- 事务
淘宝、12306等电子商务系统都属于面向交易的处理系统,即OLTP。数据库中事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit),具有四个属性:原子性、一致性、隔离性、持久性,简称为ACID。
- 原子性(Atomicity) 一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
- 一致性(Consistency) 事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
- 隔离性(Isolation) 一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
- 持久性(Durability) 持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
并行处理的核心就是隔离性,即不同的事务不能互相影响,一个用户订票行为不能影响其他用户,否则会出现看到票却买不到票的现象。隔离要处理三个问题:脏读、不可重复读和幻读保证隔离性就要对数据加锁,而锁会导致排队,排队必然会产生时延,面对千万级别的并发,问题就产生了。所有关键的问题还是要提高单个事务的处理速度,即CPU,以及减小磁盘I/O的时间。12306从12年就开始进行技术改革,核心采用了Vmware Gemfire 内存数据库技术,即把多个X86服务器虚拟成一个具有超大内存和处理速度的机器,把数据全部放在内存中计算,由内存与磁盘的I/O速度可以看出这种技术必然能大幅度提高性能。
现在想想,自己之前一想到12306就不禁要破口大骂,还说是体制问题、内部垄断等等,真是可笑。
总之,批评人之前先做好调查吧。
相关推荐
《高并发系统设计》 高并发系统设计是Java后端开发中的重要领域,它涉及到如何在面临大量用户请求时,确保系统的稳定性和高效性。在本文中,我们将探讨三种主要的高并发系统设计方法,以及如何利用缓存来提升系统的...
阿里P9纯手打亿级高并发系统设计手册1.pdf 本篇手册主要讲解了高并发系统设计的通用设计方法,包括Scale-out、缓存和异步三种方法。高并发系统设计的魅力就在于我们能够凭借自己的聪明才智设计巧妙的方案,从而抵抗...
"P9纯手打亿级高并发系统设计手册" 高并发系统是一种能够支撑亿级流量的系统设计,通过巧妙的设计方法,可以抵抗巨大流量的冲击,带给用户更好的使用体验。高并发系统设计的魅力就在于我们能够凭借自己的聪明才智...
淘宝双11,618的京东节,滴滴打车高峰如何抗住亿级的并发量?...这一份阿里P9纯手打的高并发系统设计手册帮你解决! 这份手册分为基础篇、数据库篇、缓存篇、消息队列篇、分布式服务篇、维护篇、实战篇。
在Java领域,高并发系统设计是一项至关重要的技能,它涉及到如何构建能够同时处理大量请求的高效应用程序。在本文中,我们将深入探讨Java高并发系统设计的相关知识点,包括基础概念、核心技术以及最佳实践。 1. **...
### 高并发系统设计思路 #### 设计原则 在高并发系统的架构设计中,核心的原则是围绕着如何更合理地分配资源来进行。这不同于解决资源不足的问题,而是着重于现有资源的有效利用。以下几点是设计时需重点考虑的: ...
淘宝双11,618的京东节,滴滴打车高峰如何抗住亿级的并发量?...这一份阿里P9纯手打的高并发系统设计手册帮你解决! 这份手册分为基础篇、数据库篇、缓存篇、消息队列篇、分布式服务篇、维护篇、实战篇。
以下是对高并发系统设计的一些核心知识点的详细解释。 1. **Scale-out(横向扩展)**:这是应对高并发的常见策略,通过分布式部署,将流量分散到多个服务器,每个服务器承担部分并发。这种方式可以避免单点故障,...
"高并发秒杀系统设计" 高并发秒杀系统设计是指在电子商务平台中,设计一个能够承载高并发流量的秒杀系统,以满足用户的秒杀需求。该系统需要具备高性能、低延迟、可扩展性强等特点。 高并发秒杀系统设计的功能需求...
随着互联网技术的快速发展,高并发系统已经成为处理大规模用户请求的标准配置。《实战Java高并发程序设计》这本书正是一本专注于这一主题的资源,它旨在帮助读者深入理解如何在Java环境中构建可扩展、高效且稳定的高...
高并发架构设计
【基于Node.js的高并发电商购物系统设计与实现】 在当今互联网时代,电子商务网站面临着日益增长的并发访问压力,特别是由于直播营销和各种电商节日活动的兴起,这使得企业对高性能、高并发的系统需求更加迫切。...
《阿里巴巴P9百亿级高并发系统设计手册》是一本深入探讨大规模并发系统设计的专业书籍,旨在为读者提供在阿里巴巴这样大型互联网公司中处理高并发场景的实践经验与理论知识。本书内容丰富,涵盖三百多页,全彩印刷,...
《Java高并发程序设计》是一本深入探讨Java平台上的并发编程技术的专业书籍,由葛一鸣等人编著。这本书旨在帮助读者理解并掌握在高并发环境下编写高效、稳定且可扩展的Java应用程序的关键技巧和最佳实践。以下是该书...
《基于Linux的高并发网络聊天系统设计》 网络聊天已成为现代社会中不可或缺的沟通方式,尤其在面对大量用户的同时在线需求时,设计一个高效、稳定、能够处理高并发的网络聊天系统至关重要。本文针对这一问题,深入...
【高并发系统设计】是IT领域中至关重要的一个主题,特别是在互联网大厂中,它直接影响着服务的稳定性和用户体验。唐扬,一位有着十年社区系统研发经验的技术专家,通过他在美图秀秀社区的工作经历,深刻理解了高并发...
以下是一些针对高并发设计和集群设计的核心知识点: 1. **HTML 静态化**: - 静态HTML页面是性能最优的选择,因为它减少了服务器处理和数据库查询的需求。 - CMS(内容管理系统)能够自动生成静态页面,便于管理...
综上所述,高并发支撑设计及优化规范涵盖了一系列关键步骤和技术要点,旨在帮助开发者构建高效稳定的高并发系统。通过对业务场景的深入理解、系统的细致评估以及性能测试的有效实施,可以显著提高系统的并发处理能力...
【亿级高并发系统设计说明书】是一篇关于构建大规模并发处理系统的指导文档,适用于毕业设计或作为学习模板。本文档的核心在于介绍如何处理高流量带来的挑战,通过一系列策略确保系统的稳定性和用户体验。以下是对...