一 静态资源的压缩优化及CDN分发策略
12306上涉及的图片及js、css等静态资源应进行压缩后传输,设置expires属性,在浏览器端缓存,减少对静态资源访问,提高页面访问速度。
同时高效使用CDN分发策略,像北上广等一线城市应尽量分流,减轻服务器压力,防止服务器因压力过大宕机或IO低效 崩溃。
二 缓存车次信息及余票
用户登上网站后,除了登录操作流程外最火的两个操作流程应该是购票和余票查询。余票查询应及时给用户返回查询信息。所以需要优化缓存结构。车次票价等信息因为不会发生经常性的变化,所以应常驻内存,结合cdn分发策略,将用户引导至最近服务器,返回查询信息。余票数据因为涉及到需要和当前售票情况相关,所以应在每卖出一张票后同步更新缓存数据.这里需要注意的是查询余票只需要读缓存即可,在缓存存在情况下不需要去访问数据库,同步缓存在买票阶段再说明。如果缓存没有可以直接访问数据库,如果访问分流设计到位,相信缓存穿透情况会比较少,也不会对数据库带来很大压力.
三 按车次进行购票队列设计
因为国内火车票热度关系,同时并发购票情况会非常突出,目前没有看到12306有队列的排队机制,难道网站设计者想让用户立即购买票么?!这个有些疯狂,这就导致很多人上去点购票,却打不开等等。
我的想法是按照车次进行队列设计,并在缓存中维护这些请求队列.一个用户过来比如买K51车次,系统应从后端缓存中获取该车次缓存信息,并将该用户id加入队列末端,设置时间戳,并返回给用户前面有多少人等信息。维护该队列的服务器应作为后端的一层进行设计,防止一个服务器崩溃导致用户无法访问或者直接穿透到下一层。用户浏览器可以1s为单位像这些缓存层访问,缓存队列接收到后同步更新队列中该用户时间戳。对于长久没有请求的id有过期清除机制.目前一般火车车厢15-20节左右。YW25G(硬卧)定员一般66人左右,YZ25G(硬座)定员118人,RZ25C(软座)定员80人,RW25(软卧)定员36人。所以每辆火车人数在1000-2000左右.当然买票的人数可能会超过这个数值,每天买同一车次人数也不会是一个天文数字。
四 售票逻辑
售票处理只负责从前面的队列中获取买票的用户id,并发卖多少张票视情况处理。这里涉及到铁道部以前的票务系统接口,很多业内人士也反映压力最大的就是该接口调用。假设并发处理可以容纳20个(这个值因为不是内部人士,无法确认,仅是假设),则取队列中20个id,进行并发处理。就像火车站开通了20个窗口一样,对来的20个人进行售票服务,直至完成.可能这个过程可以有优化的地方,因为毕竟每个用户花在真正买票的时间不一定,有的短,有的长。买票流程应尽可能优化,尽量缩短用户购票需要的时间,提高购票速度。
售票处理得到票务处接口返回后,即同步更新该车次余票缓存,返回给用户购票信息。
五 票数据库设计
火车票数据库层应该是使用铁道部以前的票务系统,这种底层的数据库就像银行一样不会随便变更,要知道很多银行系统等数据库设计基本是90年代由IBM等那时设计的,猜测铁道部可能也会类似这样。所以作为12306等这样的外层服务,只能调用其底层的接口做一些操作。
再回到上面谈到的票务系统接口,个人觉得应尽量减少该接口的调用。目前火车购票主要有三种渠道,售票窗口(火车站及各售票点)、电话购票、12306。下面设想可能不是合理,只供大家讨论。如果这三种渠道购票比例为40%,20%,40%(这个比例可能会调整),则完全可以确定网上购票每个车次票数。
如果确定,则可以根据车次进行分库。数据库层包含一些列数据库,每个数据库可能负责多个车次信息,具体车次数量由测试压力确定。售票操作由之前调用统一的票务接口转为了在各车次数据库操作。当然票务接口也会去访问后端数据库,貌似没有不同,但是这样处理后数据库压力已经分流,网站购票只要关心分配好的这些车次数据库就好。像热点车次也应该考虑请求会比其他普通车次要高很多情况,采用更高端的服务器进行处理,相信硬件在铁道部应该不缺.
售票层次应处理好对车次票额的同步机制。任何情况下,只允许同一车次同一个人来买,保证票数的稳定.
最后,总结一下自己的思想,主要是靠架构分层思想,将12306层次分为CDN分发层、静态资源处理层、动态资源的缓存层、排队缓存层、售票层及底层按照车次水平划分设计的数据库层,最终思想要靠分流、有效排队机制及车次水平划分设计数据库等减少对系统服务器的压力,同时保证购票的准确性。
分享到:
相关推荐
12306互联网售票系统的架构优化及演进是指对12306互联网售票系统的架构进行优化和演进,以提高系统的性能和可扩展性。该系统的架构优化是为了解决系统在高峰期的访问量超出设计预期、页面打开缓慢、查询和下单报错、...
《2021 Java互联网架构师...以上知识点构成了一条完整的Java互联网架构师学习路径,通过深入理解和实践这些内容,开发者可以提升在分布式系统设计、性能优化和高并发处理等方面的能力,从而胜任互联网架构师的角色。
系统改造中的困局表现在架构师需要不断“缝缝补补”,架构的包袱问题以及对架构师而言长期的约束和挑战。 造成这种状况的原因之一是架构师们通常面对需求驱动的项目,往往只能做到最小化修改,而无法从全局的角度...
《2014大数据架构师峰会》是一次聚焦大数据领域的重要会议,汇聚了业界的顶尖专家和架构师,共同探讨大数据技术的最新进展和实际应用。本次峰会的议题广泛,涵盖了大数据的各个方面,包括但不限于数据分析、存储解决...
### 架构师2013年2月刊...通过以上分析可以看出,《架构师》2013年2月刊不仅关注软件开发过程中的效率提升和资源优化,同时也聚焦于新兴技术(如Go语言)的应用和发展趋势,为读者提供了丰富的技术知识和实践经验分享。
秒杀系统之所以难以设计和实现,主要是因为其特殊的需求特性:在短时间内,大量用户会同时尝试获取极其有限的商品库存。例如,小米手机的秒杀活动,可能仅有1万部手机,但却会有数百甚至上千万的用户在同一时间涌入...
从描述“12306.zip”来看,我们可以推测这个压缩包可能包含了与12306网站设计或开发相关的文件。 标签为空,这意味着我们没有额外的信息来指导对压缩包内容的理解,我们将基于文件名来推测其内容。 文件名称列表...
而架构师和开发人员则会关注更深层次的性能因素,如应用架构合理性、代码效率、内存管理、线程同步和锁机制等。运维工程师则需要监控服务器资源利用率、数据库性能、SQL执行效率以及系统的稳定性和高可用性。 性能...
总的来说,2013年中国数据库大会-11的演讲中,童家旺深入探讨了CAP定理的理论和实践,分析了其在不同场景下的应用,并提出了分布式系统设计时的重要考量因素,为数据库开发者和架构师提供了宝贵的参考。
而Java的学习路径,从初级到高级,涵盖了前端开发、后端接口对接、数据库操作、网络编程、设计模式、微服务、大数据处理等多个层面,使得学习者能够逐步成长为精通Java的架构师。 云和数据的Java大数据课程,特别...
以上内容涉及了旅游市场分析、投资建议、数据分析、行业动态和风险管理等多方面的知识点,不仅为行业分析师和投资者提供了信息参考,也对社会服务行业的整体市场环境和具体公司的表现进行了深入探讨。