H001083完整的描述前半段是通用的:
获取产品信息失败,可能酒店、房型和RatePlan无效或未关联,也可能无对应库存或房价。
在一次迭代后,我们对这个错误描述进行了细分,其具体原因会在这段描述的小括号中出现,比如常见的携程不可订、去哪儿不可订、直连失败等等。
这里我们对一些常见的错误进行说明以及提供一些解决方案。
1.关于获取不到RatePlan错误
这个错误分两种情况,一种是百分百有分销商自己操作引起的,即需要检查HotelId、RoomTypeId和RatePlanId对应关系是否正确(HotelId不要传HotelCode,RoomTypeId不要传RoomId),关于这几个概念的说明,请查看常见问题中的http://open.elong.com/faq/detail?id=157&plt=2,这里的第一大节详细介绍了艺龙开放接口的五个重要对象的概念。
第二种情况,即该RatePlan节点对应的HotelId、HotelCode、RoomId、RoomTypeId、RatePlanId中有一个或多个状态失效了,但是分销商并未感知到引起的,需要注意的是,只有这个错误一天超过5次才需要关注,因为这种无法完全避免,分布式系统总是存在一致性问题的。
如果分销商有将艺龙的酒店数据缓存到本地,那么则需要查看是否跟上艺龙的增量,简单讲,就是分销商的数据和艺龙的数据有延迟,导致这个数据在艺龙侧已经变更,但是分销商没有跟着变化导致的。
如果分销商没有缓存艺龙的数据,只是单纯的使用hotel.detail接口来获取产品,那么也是有可能出现这种错误,常见于用户查询后过了不少时间后才去下单,这时有可能存在产品下架之类的操作。
不过这个错误无论在哪种场景下都不会出现太多,所以1天超过5次再关注就好了。
2.关于携程不可订、去哪儿不可订、直连满房、直连失败、房量不够错误
这些是分销商在成单或者校验时遇到最多的错误,这种错误的原因比较难以排查,系统的各级都有可能出现,所以这里分级去说明。
分销商系统:这里说明的是分销商层面出现这种问题应该如何确认问题和如何排查。首先我们给出一个指标,如果可订接口和成单接口报错占比小于总请求数的10%,那么可以不再关注这些错误了,这些都是正常的,原因最后说明。如果超过了这个指标,那么缓存了艺龙酒店数据的分销商就需要关注另一个指标,即增量接口的延迟时间。关于增量接口的逻辑在http://open.elong.com/faq/detail?id=157&plt=2中有说明,此处不再赘述。增量接口的延迟时间,指的是分销商最后调用增量接口(一般是库存增量和价格增量这两个)获取到的变化时间Time最大的时间,与当前时间的差值,排除空查询的情况后,如果这个时间差过大,一般我们认为超过5分钟是有些超标的,超过半小时可以确定超标了。这个时间差越大,则出现H001083错误的概率越大,需要按照上述链接中的方法去追赶增量。另外还有一些其他的可能性,比如虽然分销商缓存的数据和艺龙并没有太大延迟,但是分销商缓存的数据和对外提供搜索的数据之间有延迟,也会出现这种情况。如果分销商确定自己的系统没有上述问题,而且H001083错误率依然超过10%,那么请确定是否是艺龙分销系统的原因。
艺龙分销系统:艺龙分销系统即分销商直接对接艺龙的系统,H001083问题的出现主要还是增量延迟问题。艺龙分销系统会将艺龙底层收到的变化信息转化成开放接口中的增量信息格式,此时艺龙分销系统有可能会出现丢失增量,增量丢失也分为两种,一种是偶发性的丢失,导致小部分产品出现可订、成单错误,这种对可订通过率和成单通过率影响不大,这种不需要关注,忽略就好。另一种就是由于艺龙分销系统故障引起的,比如超过1小时没有收到增量,或者是增量接口报错这样的,这个就需要联系艺龙的开发人员排查了。
艺龙直连系统:艺龙直连系统是和供应商系统对接的系统,主要是获取供应商一侧的产品、库存、价格变化,将这些变化写入艺龙本地缓存中,分销商调用艺龙分销系统接口,其中hotel.data.rp、hotel.data.inventory、hotel.data.rate、hotel.list、hotel.detail这些接口都是从艺龙本地缓存获取数据的,而由于分布式系统的特点(数据一致性和系统可用性无法同时满足),艺龙侧的缓存和供应商实际的数据也有可能存在延迟,目前艺龙可以保证大多数数据的延迟在5分钟以内,所以如果分销商发现,可订和成单无法通过,但是通过其他接口还是能够查询到该产品可售,那么请等待5分钟后再查看接口返回的数据是什么,如果5分钟后该产品不可售了,那么这种问题在艺龙侧不被认为是问题,所以分销商反馈这种问题我们不会予以排查。这也是之前所说的,为什么保证可订、成单通过率保持在90%即可的原因。只有在超过5分钟后产品依然有效,分销这里才会反馈给直连,让直连的同事排查问题。