日均20亿流量:携程机票查询系统的架构升级 (6)

A:我要做一个小的澄清,用户有时候会奇怪:为什么我的运价跟别人的运价不一致,是不是有杀熟或者其他的情况?我可以负责任的告诉大家,我们不利用大数据杀熟!那为什么同样的查询返回的结果不一样?有一定的比例是因为我们缓存数据出现了问题,比如前面缓存的到后面票卖光了,然后又推给了不幸的用户。另外一点是,我们有很多的引擎,比如说国外的供应商,特别是联航,他们的系统带宽不够宽,可用性没有那么高,延时也高,所以有一部分这种低价的票不能够及时返回到我们最终结果里边,就会出现这种情况,这不是我们算法特意去做的,只不过是我们系统的局限性。

Q:Pooling 为什么使用 Redis?

A:Redis是为了追求更高的读写速度,其他中间件,比如说内存队列是很难用在我们这种分布式的调度当中。我们如果用message queue的话,由于它存在很明显的顺序性,不能够基于键值去读到你所写的,比如你发送了一个子任务,这时候你要定时去拿这个结果,但是你基于其他的消息队列或者内存队列是没法拿到的,这也是我们的一个限制。

Q:多级缓存预热如何保证MySQL不崩?

A:冷启动的问题更多是作用在是本地缓存,因为本地缓存发布有其他的情况,需要有一个预热的环节,在这之间是不能接受生产流量的。对于多级缓存、分布式缓存、预热问题很小,因为本来它就是一个分布式的,可能有一小部分节点,比如要下线或者什么,但是对整个缓存机制来说影响很小,然后这一部分请求又分散到我们的多个服务器上,几乎不会产生太大的抖动的。但是还要重复一点,如果整个缓存机制失效,比如缓存集群由于某种情况完全下掉了,这个时候还是要通过熔断或者限流来对我们的实时系统作过载保护。

Q:Redis对集合类的QPS并不高,这个怎么解决。

A:其实你Redis多加一些节点,然后减少它的存储使用率,把整体的throughput提上去就可以了。如果你对云业务有了解的话,就会知道每一个节点,它都是有throughput的限制的。如果就单节点的throughput成为瓶颈的话,就降低节点它的使用率。

讲师简介

宋涛,携程集团机票业务技术总监。北京大学计算机系毕业,加州大学计算机博士。先后从事微软公司Windows团队,智能搜索团队的架构和技术管理工作,Amazon公司云服务部门云存储管理服务技术主管。拥有多年大型项目架构经验,是携程技术领军人物。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsfxww.html