`

12306购票系统后端优化 .

 
阅读更多

前面讨论了前端性能的优化技术,于是前端可能就不是瓶颈问题了。那么性能问题就会到后端数据上来了。下面说几个后端常见的性能优化技术。

一、数据冗余
关于数据冗余,也就是说,把我们的数据库的数据冗余处理,也就是减少表连接这样的开销比较大的操作,但这样会牺牲数据的一致性。风险比较大。很多人把NoSQL用做数据,快是快了,因为数据冗余了,但这对数据一致性有大的风险。这需要根据不同的业务进行分析和处理。(注意:用关系型数据库很容易移植到NoSQL上,但是反过来从NoSQL到关系型就难了)

二、数据镜像
几乎所有主流的数据库都支持镜像,也就是replication。数据库的镜像带来的好处就是可以做负载均衡。把一台数据库的负载均分到多台上,同时又保证了数据一致性(Oracle的SCN)。最重要的是,这样还可以有高可用性,一台废了,还有另一台在服务。
数据镜像的数据一致性可能是个复杂的问题,所以我们要在单条数据上进行数据分区,也就是说,把一个畅销商品的库存均分到不同的服务器上,如,一个畅销商品有1万的库存,我们可以设置10台服务器,每台服务器上有1000个库存,这就好像B2C的仓库一样。

三、数据分区
数据镜像不能解决的一个问题就是数据表里的记录太多,导致数据库操作太慢。所以,把数据分区。数据分区有很多种做法,一般来说有下面这几种:
1)把数据把某种逻辑来分类。比如火车票的订票系统可以按各铁路局来分,可按各种车型分,可以按始发站分,可以按目的地分……,反正就是把一张表拆成多张有一样的字段但是不同种类的表,这样,这些表就可以存在不同的机器上以达到分担负载的目的。
2)把数据按字段分,也就是坚着分表。比如把一些不经常改的数据放在一个表里,经常改的数据放在另外多个表里。把一张表变成1对1的关系,这样,你可以减少表的字段个数,同样可以提升一定的性能。另外,字段多会造成一条记录的存储会被放到不同的页表里,这对于读写性能都有问题。但这样一来会有很多复杂的控制。
3)平均分表。因为第一种方法是并不一定平均分均,可能某个种类的数据还是很多。所以,也有采用平均分配的方式,通过主键ID的范围来分表。
4)同一数据分区。这个在上面数据镜像提过。也就是把同一商品的库存值分到不同的服务器上,比如有10000个库存,可以分到10台服务器上,一台上有1000个库存。然后负载均衡。
这三种分区都有好有坏。最常用的还是第一种。数据一旦分区,你就需要有一个或是多个调度来让你的前端程序知道去哪里找数据。把火车票的数据分区,并放在各个省市,会对12306这个系统有非常有意义的质的性能的提高。

四、后端系统负载均衡
前面说了数据分区,数据分区可以在一定程度上减轻负载,但是无法减轻热销商品的负载,对于火车票来说,可以认为是大城市的某些主干线上的车票。这就需要使用数据镜像来减轻负载。使用数据镜像,你必然要使用负载均衡,在后端,我们可能很难使用像路由器上的负载均衡器,因为那是均衡流量的,因为流量并不代表服务器的繁忙程度。因此,我们需要一个任务分配系统,其还能监控各个服务器的负载情况。
我看到有很多系统都用静态的方式来分配,有的用hash,有的就简单地轮流分析。这些都不够好,一个是不能完美地负载均衡,另一个静态的方法的致命缺陷是,如果有一台计算服务器死机了,或是我们需要加入新的服务器,对于我们的分配器来说,都需要知道的。
还有一种方法是使用抢占式的方式进行负载均衡,由下游的计算服务器去任务服务器上拿任务。让这些计算服务器自己决定自己是否要任务。这样的好处是可以简化系统的复杂度,而且还可以任意实时地减少或增加计算服务器。但是唯一不好的就是,如果有一些任务只能在某种服务器上处理,这可能会引入一些复杂度。不过总体来说,这种方法可能是比较好的负载均衡。

五、异步、 throttle 和批量处理
异步、throttle(节流阀)和批量处理都需要对并发请求数做队列处理的。
异步在业务上一般来说就是收集请求,然后延时处理。在技术上就是可以把各个处理程序做成并行的,也就可以水平扩展了。但是异步的技术问题大概有这些,a)被调用方的结果返回,会涉及进程线程间通信的问题。b)如果程序需要回滚,回滚会有点复杂。c)异步通常都会伴随多线程多进程,并发的控制也相对麻烦一些。d)很多异步系统都用消息机制,消息的丢失和乱序也会是比较复杂的问题。
throttle 技术其实并不提升性能,这个技术主要是防止系统被超过自己不能处理的流量给搞垮了,这其实是个保护机制。使用throttle技术一般来说是对于一些自己无法控制的系统,比如,和你网站对接的银行系统。
批量处理的技术,是把一堆基本相同的请求批量处理。比如,大家同时购买同一个商品,没有必要你买一个我就写一次数据库,完全可以收集到一定数量的请求,一次操作。这个技术可以用作很多方面。比如节省网络带宽,我们都知道网络上的MTU(最大传输单元),以态网是1500字节,光纤可以达到4000多个字节,如果你的一个网络包没有放满这个MTU,那就是在浪费网络带宽,因为网卡的驱动程序只有一块一块地读效率才会高。因此,网络发包时,我们需要收集到足够多的信息后再做网络I/O,这也是一种批量处理的方式。批量处理的敌人是流量低,所以,批量处理的系统一般都会设置上两个阀值,一个是作业量,另一个是timeout,只要有一个条件满足,就会开始提交处理。

http://blog.csdn.net/lifuxiangcaohui/article/details/8051652

分享到:
评论

相关推荐

    【Java+JSP+MySql】12306购票系统 源码包含在了里面的文件夹内,sql源码和java源码都在.zip

    【Java+JSP+MySQL】12306购票系统是一个基于Web的票务预订平台,采用Java作为后端开发语言,JSP作为视图层技术,MySQL作为数据库存储数据。这个项目旨在模拟中国铁路客户服务中心12306网站的功能,让学生或开发者...

    12306互联网售票系统的架构优化及演进.ppt

    12306互联网售票系统的架构优化及演进 12306互联网售票系统的架构优化及演进是指对12306互联网售票系统的架构进行优化和演进,以提高系统的性能和可扩展性。该系统的架构优化是为了解决系统在高峰期的访问量超出...

    模仿12306火车票APP(微信小程序源代码),铁路12306小程序,C,C++

    12306系统可能使用C/C++编写高性能的服务器端程序,如数据处理、算法优化等。不过,微信小程序本身并不直接使用C/C++,因此这部分可能是与后端服务器交互的部分。 5. **模拟火车票**: 这个标签可能是指该小程序...

    Java—Demo仿12306窗口实现购买火车票<MySQL>myticket.zip

    【描述】"Java—Demo仿12306窗口实现购买火车票<MySQL>"描述了一个基于Java的模拟购票系统,它可能包括用户登录、查询车次、选择座位、下单支付等核心功能。利用MySQL作为数据存储,处理火车班次、座位、订单等...

    12306网站性能优化

    ### 12306网站性能优化...综上所述,12306网站性能优化需要综合考虑业务特性、前端与后端技术、以及指令级与CPU级等多个层面。只有全方位地实施优化措施,才能有效应对高并发挑战,保障系统的稳定运行和良好用户体验。

    购票信息-测试下积分系统

    在12306Bypass的上下文中,我们可能会关注如何模拟购票请求,理解系统的验证机制,以及如何优化购票流程。这可能涉及到网络编程、爬虫技术、自动化测试工具等知识。不过,值得注意的是,任何未经授权的绕过行为都...

    12306.html

    12306系统的后端还涉及到数据库管理,可能使用了MySQL或Oracle等关系型数据库来存储火车班次、座位类型、价格等信息。Java可以通过JDBC(Java Database Connectivity)接口与数据库进行交互,执行查询和更新操作。 ...

    12306_火车票订票系统项目

    12306火车票订票系统是中国铁路客户服务中心推出的在线购票平台,以其便捷高效的服务,成为广大旅客出行的重要工具。这个项目涉及到的技术和知识面广泛,涵盖了互联网应用开发、数据库管理、服务器架构等多个领域。...

    仿12306汽车售票系统

    仿12306汽车售票系统是一个模仿中国铁路12306官方购票平台的项目,旨在实现汽车票的在线预订、查询、支付等功能。这个系统可能包括前端用户界面、后端服务器处理逻辑以及配套的数据库设计。由于描述中提到"一些小的...

    JAVA学生火车票订票系统

    系统集成了后台管理和前台购票功能,满足了学生群体的特殊需求,如寒暑假半价优惠等。 **核心技术与框架** 1. **JAVAEE技术栈**:JAVAEE(Java Platform, Enterprise Edition)是用于构建企业级Web应用的标准平台,...

    新建文件夹_简易的12306系统_

    这个系统可能涵盖基本的购票、退票、查询和修改订单等功能,以模拟实际12306网站的操作流程。 在开发这样一个系统时,我们需要考虑以下几个关键知识点: 1. **数据库设计**:首先,我们需要设计一个数据库来存储...

    微信小程序开发仿智行火车票12306.zip

    开发微信小程序"仿智行火车票12306"旨在模仿12306官方铁路订票系统,为用户提供火车票查询和预订功能。这个项目包含了后端服务和数据库设计,通过Java的SSM(Spring、SpringMVC、MyBatis)框架和MySQL数据库实现,...

    基于Android的铁路售票管理系统设计与实现.pdf

    系统需要与12306官网进行集成,共享车票信息和处理购票请求。同时,系统还需要与电子支付平台进行对接,确保支付流程的安全性。 【优化与改进】 1. 性能优化:为了应对高并发场景,系统需要进行性能优化,包括...

    12306余票查询

    12306余票查询是中国铁路客户服务...总结来说,12306余票查询是一个复杂而关键的系统,它融合了分布式计算、数据库管理、网络安全、算法优化和用户体验设计等多种IT技术,是现代信息技术在公共服务领域的一个典型应用。

    12306网页制作

    考虑到12306的特殊性,可能还需要考虑到高峰期的负载平衡和用户体验优化。 接下来,我们深入到JavaScript技术。JavaScript是一种广泛用于网页动态交互的编程语言,它可以增强网页的用户体验,实现如表单验证、页面...

    基于android平台的移动景点票务系统(源码+论文)

    移动景点票务系统是现代科技与旅游业结合的产物,尤其在Android平台上,它为游客提供了便捷的购票体验。本文将详细解析基于Android平台的移动景点票务系统的实现,包括其核心功能、技术栈以及实现过程。 一、系统...

    乘客网上订票系统MVC

    【乘客网上订票系统MVC】是一个基于MVC(Model-View-Controller)设计模式开发的项目,旨在模仿12306中国铁路客票预订系统。MVC模式是软件工程中的一种架构模式,用于将应用程序的数据处理、业务逻辑与用户界面分离...

Global site tag (gtag.js) - Google Analytics