新疆自驾游价格联盟

京东机票系统航班查询优化实践

京东虚拟平台2020-05-17 13:07:29

京东机票系统

航班查询优化实践

        京东商城机票业务,于2011年6月正式上线,提供国内、国际机票查询预订服务。目前覆盖国内多家航空公司、全球大部分城市近万条航线,提供实时查询、预定、免费邮寄行程单等服务。京东机票正在以迅猛的速度发展,提供企业购票,散客购票等多维服务,成为行业内可靠、优质的机票预订服务平台。 

背景

        随着京东机票业务的发展,接入的商家越来越多,商家接口性能参差不齐,要保证商家产品有足够的露出率,必须增加用户等待时间,而过长的响应时间严重影响了用户体验。缓存是解决性能问题的有效方案,但航班仓位、价格等信息变动频繁,因此对缓存时效性有较高要求,通过定时刷新缓存的措施,可以有效解决性能和时效问题,但各航空公司对查询预定比例都有严格要求,频繁刷新缓存会导致查订比无法满足航司要求。


        综上所诉,响应时间、查订比和商品露出率是航班查询中三个互相制约的因素,并且很难同时满足以上3个目标。针对行业现状,为了提高用户体验,京东机票系统对航班查询各个环节进行了精细优化,使航班查询平均响应时间大幅降低,并且提高了查订比。


1.  查询结果异步加载

同步加载方式:


异步加载方式:


       很明显异步加载、多次返回的方式,可以让用户在最短时间内查询到航班信息,并通过进度条反馈查询进程,提高用户体验.

2.分布式锁减少并发查询

        当多个用户同时查询相同航班信息时,如果没有命中缓存,则需要并发调用供应商接口进行查询,这样既增加响应时间,又不利于提高查订比。通过分布式锁的方式,当相同航班查询正在等待供应商接口响应时,后面的查询进入等待,直到前面查询返回结果,写入缓存,然后直接从缓存获取查询结果,这样减少了一次接口调用,既保证了响应速度,又提高了查订比。查询流程如下图所示:


3.防止缓存击穿

        供应商大多不会售卖全部航线机票,当用户所查航线商家不售卖,则会返回空结果。空结果若不加入缓存,遇到用户再次查询时则会击穿缓存,再次调用商家接口,形成无效查询。因此可以将空结果同正常结果一样加入缓存,防止缓存击穿,并提高查询效率。


4.建立动态航线库提高效率

        缓存击穿问题产生的根本原因是没有建立每个商家可售卖的航线库,建立航线库将会大大提高查询效率,彻底解决无效查询问题。但是商家售卖的航线是动态变化的,人工维护工作量大,准确性难以保证。为此机票系统根据用户查询结果,结合黑白名单机制,建立了动态的航线库,将用户多次查询无果的航线加入对应商家的黑名单中,一定时间内再次遇到用户查询该航线,则直接跳过黑名单的商家,这样就降低了查询响应时间,提高了查询效率。


 5.预加载热门航线数据

        数据预加载是解决查询性能的有效方法,但是预加载成本较高,只要当查询达到足够的密度,才能起到较好的优化效果,因此机票系统针对热门航线实行了缓存预加载机制,取得了不错的优化效果,很大程度上解决了热门航线查询性能问题。预加载机制仅针对热门航线进行,并且根据用户预订习惯,大多数用户会在航班起飞前几天进行预订,因此只需要预加载航班起飞前几天的数据,这样可以降低预加载成本。同时根据机票系统访问量统计, 只在每天的高峰时段进行预加载,进一步降低成本,提高效率。


6.加强风控过滤爬虫抓取

        机票系统每天都会有大量爬虫抓取航班数据,针对这种情况,基于航线、IP地址、用户等多个维度配置了风控规则,最大限度过滤爬虫抓取,减少无效查询,提高查订比。


再不点蓝字关注,机会就要飞走了哦

Copyright © 新疆自驾游价格联盟@2017