转载自:http://blog.csdn.net/qq_26562641/article/details/53170913php
1、通常高并发web系统
这里的通常指的是秒杀之类的电子商务系统,好比说小米抢购、淘宝双11、秒杀活动等等,12306订票网站与其有本质区别,下面会有说到。
系统架构图
下图是我调查众多资料总结出的系统架构图,固然这也不能做为通用的解决方案,首先像淘宝等企业公布的资料确定不是最早进或者是性能最好的,其次具体状况还需具体分析。

核心技术点
html
- 前端优化 前端优化主要包括动态内容静态化,增长前端缓存。页面静态化是指将指含有大量动态元素的动态网页,如jsp、php等,转换为html静态页面,静态页面因为不用加载动态元素,其访问速度要比动态页面快得多,能够增长访问速度,减少数据库压力;前端页面缓存在系统前端对Web服务器上的页面进行缓存。
- CDN技术 CDN即内容分发网络,其基本思路是尽量避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。经过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统可以实时地根据网络流量和各节点的链接、负载情况以及到用户的距离和响应时间等综合信息将用户的请求从新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的情况,提升用户访问网站的响应速度。
- 负载均衡 负载均衡的基本思想是把高并发的访问平均分配到每个服务器节点上,从而减少分布式数据库中每个节点的压力。
- 中间件 数据库的中间件技术是指把应用层与数据库层分离,在中间增长一个部分,避免应用直接访问数据库。由于系统可能采用读写分离的技术,于是会使用不一样的数据库,中间件能够屏蔽数据库直接的不一样,提供统一的接口。中间件还负责事务的协调处理,起到数据链接管理的做用,多个客户端链接经过中间件能够共用一个数据库链接。
- memcached memcached是一个高性能的分布式内存对象缓存系统,经过在内存中缓存数据和对象来减小读取数据库的次数,从而提升动态、数据库驱动网站的速度,它是基于一个存储键/值对的hashmap。
- 并发控制 数据库限流,达到数据库的最大并发数,进入行锁状态。如不进行控制,一旦其中一个链接卡住,会引起雪崩效应,从而影响整个系统
- 排队系统 锁机制致使排队
- 并行复制 采用并行复制的技术能够解决主备库复制延迟问题
- 数据库拆分 分为水平拆分和垂直拆分,垂直拆分即按列拆分,把数据按应用分离,下降单个事务的数据处理量;水平拆分即按行拆分,下降节点的并发量
- 读写分离 有些系统读操做频繁,而有些系统写操做频繁,读写分离能有效提升访问速度
2、12306网站与淘宝的不一样
12306的特殊性就在于其复杂性:
前端
- 频繁的混合读写操做
- 座位实时复用 订单之间关联度较大,每卖出一张票,都须要调整整个车次全部可能区间的余票数量
调查以前,我也很简单的认为,只要不停地增长节点数量,必然能解决抢票尖峰时刻的问题,其实否则,访问速度主要受限于两个方面,一个是CPU处理速度,另外一个是磁盘I/O。而简单的增长机器并不能解决这两个瓶颈,相反,节点越多,数据同步的代价越大。为了更好的解释其特殊性,须要引入一些基本概念。
web
淘宝、12306等电子商务系统都属于面向交易的处理系统,即OLTP。数据库中事务(Transaction)是访问并可能更新数据库中各类数据项的一个程序执行单元(unit),具备四个属性:原子性、一致性、隔离性、持久性,简称为ACID。
数据库
- 原子性(Atomicity) 一个事务是一个不可分割的工做单位,事务中包括的诸操做要么都作,要么都不作。
- 一致性(Consistency) 事务必须是使数据库从一个一致性状态变到另外一个一致性状态。一致性与原子性是密切相关的。
- 隔离性(Isolation) 一个事务的执行不能被其余事务干扰。即一个事务内部的操做及使用的数据对并发的其余事务是隔离的,并发执行的各个事务之间不能互相干扰。
- 持久性(Durability) 持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其余操做或故障不该该对其有任何影响。
并行处理的核心就是隔离性,即不一样的事务不能互相影响,一个用户订票行为不能影响其余用户,不然会出现看到票却买不到票的现象。隔离要处理三个问题:脏读、不可重复读和幻读保证隔离性就要对数据加锁,而锁会致使排队,排队必然会产生时延,面对千万级别的并发,问题就产生了。全部关键的问题仍是要提升单个事务的处理速度,即CPU,以及减少磁盘I/O的时间。12306从12年就开始进行技术改革,核心采用了Vmware Gemfire 内存数据库技术,即把多个X86服务器虚拟成一个具备超大内存和处理速度的机器,把数据所有放在内存中计算,由内存与磁盘的I/O速度能够看出这种技术必然能大幅度提升性能。缓存