铁路作为中国最重要的交通工具,每一年春运都要面对浩浩荡荡的返乡潮,虽然铁路蓬勃发展,但依然无法支持如此庞大的返乡人群 — 2018年全国春运旅客发送量近30亿人次,2019年预计会更多,每一年春运,一票难求都是一个热门话题。

途牛抢票监控系统成立于2016年6月,通过借助抢票系统余位监控、线下票台供应商渠道自动发起占位出票,提高用户出票成功率。

主要有一下三个部分:系统确立、系统拆分、系统重构。

系统拆分:

在数据性能方面,DTC_GRAB抢票查询系统返回数据去除出发到达等抢票弱相关字段,减少字段赋值极大的缩小缓存大value情况,改造后缓存带宽发送流量精简80%以上,大幅提升余位查询接口的响应速度,时间由原来共用DTC的4s提升至300ms左右。

在机器实例方面,将余位监控系统SGT部署到云平台实现机器实例的动态扩展,并通过定时调度中心发起调度到一台机器上,通过Tubing将订单数据分发到所有的实例上,有效降低单实例的线程池并发的压力。

系统重构:

经过查阅分析,借鉴了淘宝tbschedule开源分布式定时调度分片框架思想,对于原框架每一个分片和实例IP固定绑定弊端,无法满足抢票业务通过字母进行动态随机分片到所有实例上的问题,自行开发一套符合抢票的定时调度随机平均分片的框架,实现了将N个字母随机平均分配到所有的实例上,每个实例根据字母站站对分片从DB获取一小部分站站对数据,再通过Tubing均匀分发到所有的实例,摆脱了大量数据DB翻页查询对DB不断查询的压力,同时我们也对抓取订单数据、分片数据增加Redis缓存,进一步降低DB压力。此外在每个实例上配置定时调度模块,通过配置页面灵活进行所有实例的频率调整等。

总结:

通过抢票监控系统,将大流量、高并发、分布式、缓存、限流、降级、数据一致性等进行了项目技术落地,为后续相关高并发项目奠定基础,获得了宝贵经验。在日常系统维护中也犯过错、踩过坑,经历过痛苦绝望,但静下心来细思品味就会发现这是历史的机遇,又是不可多得的挑战,正所谓业务推动技术,技术服务业务。把握机会,再接再厉,相信一切都会迎刃而解。