当前位置: 首页 > 科技观察

线上效率提升8倍,携程票务活动直连平台实践

时间:2023-03-19 13:09:57 科技观察

作者|Harry,携程高级后端开发工程师,负责直连平台建设,专注于高系统可用性和数据驱动领域。一、前言携程票务活动供应商直连平台(以下简称“直连平台”)通过API连接多个供应商的订单和商品系统,实现信息自动同步和状态传递。随着业务的快速发展,对供应商的需求与日俱增。这不仅对直连平台接入供应商的在线效率提出了更高的要求,而且供应商系统的物理网络限制和稳定性参差不齐。给直连平台带来了很多挑战。本文将从提高供应商准入效率和增强系统稳定性两个方面分享直连平台的实践经验。2.背景2.1系统介绍直连平台作为供应商与携程内部系统的适配层,主要支持两个通道:一是将供应商的商品信息同步到商品系统,如价格、库存、内容等;二是同步订单信息,如订单状态、凭证信息等。直连平台为不同的供应商提供相应的适配逻辑,以匹配订单系统和商品系统的接口。开放平台为供应商提供方便快捷的OpenApi和沙盒工具接入。图1直连平台系统简介2.2挑战随着供应商准入需求越来越多,不同供应商系统之间的差异性越来越明显,这给供应商上线效率和系统稳定性带来了新的挑战。2.2.1效率大量供应商通过OpenApi接入平台。每个供应商上线前,平台需要投入约2个工日进行联调验收。当对接的供应商越来越多时,直连平台需要按照排程对供应商进行逐一处理,延长了供应商的上线周期,影响上线效率。2.2.2稳定性不同供应商系统的物理网络和系统软件往往存在差异,承载能力也不同。当直连平台的订单流量超过供应商系统的承载能力时,会导致其系统不稳定,甚至造成系统长期故障,影响平台出票。对于有限流策略的供应商,如果直连平台的QPS过大,请求会被直连平台直接拦截,所以平台需要适配不同供应商的承载能力。当供应商系统升级、宕机、网络异常停机时,平台会产生大量异常或超时订单,导致大量客户付款后取消订阅,严重影响订单成功率放置。供应商系统出现异常后,人工干预可以在一定程度上缓解问题,但仍会存在工作量大、干预不及时等问题。由于各供应商返回的错误信息不一致,平台难以根据故障原因进行预警或系统干预。3、直连平台实践借鉴业界通用方案,结合平台实际情况,在提升效率和稳定性方面做了如下实践。3.1提高效率在OpenApi的测试过程中,供应商和直连平台都有提高效率和降低成本的需求。直连平台希望提供一个方便供应商自测的工具,并能保证测试质量。3.1.1解决方案沙盒可以为供应商提供自助测试支持,可以节省人力,提高供应商上线效率。同时也可以保护直连平台的正式环境不受干扰,是开放平台的首选。在网络安全中,沙箱是指用于在隔离环境中测试不受信任的文件或应用程序的行为的工具。未知程序允许其在沙箱内运行,该程序无权修改沙箱外的程序和系统设置,保证系统不被恶意软件和病毒篡改和入侵。一般开放平台的沙箱只能测试单个接口,显示接口日志。与同行业其他沙箱相比,本文介绍的沙箱(以下简称“平台沙箱”)还支持测试业务场景、上线自动验收等功能,在提高对接质量的同时提升发射效率。图2平台沙箱对比其他沙箱3.1.2平台沙箱介绍为了给供应商提供灵活易用的自助测试工具,平台沙箱支持供应商根据自身的系统参数和业务类型配置相关系统.供应商提交测试任务后,平台沙箱结合供应商配置和测试用例匹配策略,从测试用例池中匹配需要的测试用例。测试用例的处理支持自动化。即使对于需要供应商主动推送通知的用例,平台沙箱也支持断点执行。平台沙箱收到供应商推送的正确消息后,继续完成后续的测试任务,整个过程不需要平台人工干预。所有用例执行成功后,满足平台沙箱验收标准,系统自动上线。图3平台沙箱处理流程为实现平台沙箱的全自动化,直连平台需要重点关注以下四个核心环节:图4平台沙箱核心环节3.1.3用例定义为供应商编写不同的测试用例接口类型和业务场景。用例的类型通常包括功能测试、异常测试和边界测试。这种基于业务场景的测试用例可以保证测试质量。平台在调研其他公司的沙盒后发现,大部分沙盒只能为用户提供单一界面的测试页面。部分页面虽然可以组装消息或查看接口日志,但由于没有业务场景和验证的约束,因此测试质量参差不齐,给上线后的连接质量带来隐患。平台沙盒通过将一个或多个接口组织在一个具有明确测试目的的场景中,使供应商的测试过程更加清晰,更容易掌握检查点。图5单接口测试vs场景化测试3.1.4用例匹配不同供应商的产品形态和接口处理方式不同,需要的测试用例集也不同。为了实现供应商和测试用例的自动匹配,平台在维护测试用例时,会为每个测试用例设置不同的匹配规则。匹配规则包括供应商是否接入指定接口,指定接口是同步处理还是异步处理,以及具体的业务参数,如:是否查底价,是否查库存,是否需要凭证,图6用例匹配流程3.1.5用例执行匹配得到测试用例集合后,平台沙箱会自动执行每个测试用例。每个测试用例包含多个接口,可能是平台调用供应商的接口(如订单接口),也可能是供应商调用平台的接口(如订单确认通知接口)。以“用例定义”章节中的case#1和case#3为例,分别介绍正常执行流程和断点执行流程,如下图所示:图7用例执行流程(正常执行流程,断点执行流程执行流程)3.1.6自动验收。每个测试用例都是独立的和可重复的,因此供应商可以重复测试直到执行成功。平台沙箱自动统计测试用例的结果。测试用例几乎涵盖了所有业务场景,如果所有测试用例执行成功,则认为供应商基于直连平台OpenApi开发的对接系统满足验收标准。达标后,供应商需要在平台沙箱上主动通知直连平台。平台将为供应商自动配置上线,完成从平台沙盒测试到验收上线的全过程。3.1.7成就平台沙盒上线后,供应商测试验收不再受制于平台人力。与上线前相比,平均每月接入OpenApi的供应商数量增加了8倍以上,供应商的平均总接入成本从平均23人日增加到6人日。图8沙盒上线前后对比3.2提高稳定性系统稳定性是指系统要素在外界影响下的某种稳定状态。在节假日或营销活动期间,订单量会是平时的几倍、几十倍,这会给供应商系统的稳定性带来很大的风险。直连平台需要控制流量,提高供应商系统的稳定性。3.2.1解决方案对于承载能力低于直连平台的供应商系统,直连平台需要控制请求流向供应商的速度,一般通过限流机制实现。限流的作用是控制单位时间内提交的请求数不超过一定的阈值,即利用削峰填谷的思想来解决突发流量问题,保证整体直连平台购票成功率。图9限流策略(削峰填谷)当供应商系统的指标持续异常时,为了减少或阻断持续的冲击,通常的做法是采用熔断机制。如果系统检测到发生熔断,一般会进行降级处理。在直连平台中,熔断器分系统熔断器和业务熔断器。系统熔断是指当直连平台检测到供应商系统持续异常时,通过一定时间的禁售等降级操作,减少出票失败次数;而业务熔断器则是对供应商接口返回的错误信息进行分析和标准化,并据此进行降级。图10电路降级3.2.2限流常见的限流算法常见的限流算法有计数器算法、令牌桶算法和漏桶算法。计数器算法是限流算法中最简单、最容易实现的算法,通过控制一段时间内的请求总数来实现限流;令牌桶算法使用存储固定容量令牌的桶,并以固定速率执行向桶中添加令牌,是否处理请求取决于桶中是否有足够的令牌;漏桶算法始终以固定速率处理请求。计数器算法和令牌桶算法控制处理请求的平均速度,会出现一定程度的突发流量,而漏桶算法是固定速度的,所以直连平台采用漏桶算法来解决不同供应商的限流需求。漏桶限流用户订单生成后,直连平台需要从队列中批量读取数据,批量分发给供应商。瞬时流量往往会影响对方系统的稳定性。通过漏桶限流方案,实现均匀分配,保证供应商系统的顺利处理。图11漏桶限流前后对比具体步骤:根据限流策略,从数据队列中获取指定数量的订单,根据间隔时间计算提交时间,最后进行分时提交。图12漏桶限流实现逻辑平台有上千家订单对接供应商。配置限速策略时,不需要为每个公司都配置限速策略。平台的做法是只对流量需求有限的供应商、订单量大的供应商、有临时营销活动的供应商进行配置,其他供应商可以采用适度限速的公共限流策略。这可以确保关键供应商系统的稳定性,并减少维护限流策略的工作量。效果展示下图是流量请求节流后的结果。从图中可以明显看出,支持限流的直连平台可以平滑控制处理请求的速度。图13限流效果3.2.3系统熔断器熔断监控系统熔断器监控采用30分钟长监控和5分钟短监控相结合的方式。长监控用于计算熔断的持续时间,短监控的目的是补充长监控的不足,防止已经恢复系统的供应商再次被熔断。熔断时间以基础时间为准,考虑异常或超时率和连续熔断次数。对供应商历史异常时长进行统计后发现,平均异常时长在30分钟左右,因此平台设置的单次熔断最长时长不超过60分钟。熔断时长的计算公式为:t:基本时间(5分钟)。p:最近30分钟异常或超时率。L(p):由p计算的熔断持续时间水平。异常或超时率越高,熔断持续时间级别越高。n:连续熔断次数,第一次熔断n=1。资源上线时间超过24小时,n将被重置为0。3.2.4业务失败错误信息的多样性直连平台接入的供应商众多,不同的接口合同、连接流程和错误描述供应商也不同。对于因“库存不足”而失败的订单响应消息,直连平台可能会根据供应商返回的不同代码进行区分,也可能需要通过错误描述来区分,如“库存不足”、“剩余”门票不足”、“缺货”、“剩余0张”、“售罄”等。图14供应商错误信息对应的“InsufficientInventory”接口的错误信息有很多用途,比如监控供应商系统的稳定性,总结客户故障,反映产品设置错误,反映用户错误输入,提醒补充库存,以及关闭Schedule或线下资源等。基于供应商接口对错误信息进行分析处理,对于产品实力、系统监控、用户体验等都非常重要。错误分类直连平台将业务错误分为6类,分别是系统问题、游客信息问题、限购问题、库存问题、产品设置问题和账户余额问题。每个大类又分为若干子类,可以在子类上配置通知接收者、通知方式、资源操作方式等。与客户代码交互等。比如订单接口,只需要将不同供应商订单接口报错信息中的关键词关联到对应的二级分类,平台就可以根据分类进行统一操作。图15错误分类演示为了更准确地通过关键字识别指定供应商的错误信息,必须手动配置关键字。同一个错误描述对于不同的供应商可能有不同的含义,例如:“处理错误”或者具体的错误码等。直连平台会监控关键词匹配率,每天拉取增量供应商错误信息不匹配的关键词,并运营将其补充到供应商的关键词策略中。降级方式目前降级方式仅支持销售禁令,包括关闭时间表和线下资源。当供应商返回“库存不足”、“不可售日期”等错误时,平台将关闭调度资源操作,供应商将返回“预订金不足”、“价格设置错误”等错误,平台将下线资源。3.2.5成果通过系统熔断和业务熔断,有效避免了因供应商系统异常、库存不足、账户余额不足等问题导致出票失败。异常或超时故障率从0.34%下降到0.05%。图16系统融合效果4.结语引入沙箱后,接入OpenApi的供应商不再受制于直连平台的人力,上线效率显着提升。但由于目前的沙盒文档对沙盒页面的使用过程和常见问题描述不够详细,仍然需要平台人力为供应商解答很多类似的问题,因此有待进一步完善。熔断监控可以有效降低出票失败率,但熔断监控只依赖于订单接口的状态。由于一些供应商可以访问订单检查或预购等实时接口,因此增加监控更多的接口数据可以更有效地提高监控的实时性。并且熔断策略除了禁售外,还可以补充其他操作,比如更改确认方式。此外,随着供应商数量的增加和业务逻辑的复杂化,现有的监控预警机制也需要进一步完善。目前的预警方式仍然依赖于邮件,告警邮件数量的增加会增加告警到达率低和响应不及时的风险。因此,需要在平台现有逻辑埋点的基础上,通过公司一系列成熟完备的组件,进一步升级监控预警。最后希望本文提到的解决方案能给大家带来帮助和启发。