干货 | 4小时上线一个接口,高效统一的携程酒店数据服务平台实践

景点信息、酒店信息等众多免费API接口整合 Android开发–API接口整合 在自己练习App的开发的时候,需要某些数据,如酒店信息、天气预报、景点信息等诸多信息,靠自己手写爬虫获取一方面花费时间较多。另外一方面数据量不全,开一篇博文来记录开发过程中碰到的免费的API接口 阅读详情

作者简介

 

小丰,携程研发总监,专注于分布式数据库研究,大数据领域实时计算和大数据应用的系统架构设计。

背景

  • 随着携程酒店数据的膨胀以及个性化需求的增多,每个数据接口个性化的排期开发,因为没有标准化,从需求讨论,数据准备、接口封装、上线调试到接口api说明,期间需要花费大量的时间。一个接口的实现到生产上线至少需要2天甚至更多时间,这个时间成本不得不依赖排期开发;

  • 随着历史接口的迭代,已对外提供的700多数据接口中,其中500多个还在使用,并且每年的增量在100多,开发和维护成本高,特别是在追溯上游离线数据逻辑的时候,过于依赖研发资源;

  • 不同研发团队技术栈不一样,算法相关的研发更多偏向于python开发,对外输出的接口也是由python实现,但公司框架对java接口有更友好的支持,不同技术栈对外输出接口的稳定性存疑,特别是人员流动,团队职责变化后,同时也影响维护成本;

  • 随着业务的发展,各个业务系统的数据需求越来越多,需求响应要求也越来越高;

  • 通过历史接口的分析归类,80%以上的数据接口其实是针对离线数据或者实时数据加上需求方的检索条件返回数据,没有过多的加工逻辑或者过于复杂的业务逻辑在接口中实现;

为了能更快速支持业务个性化需求和降低研发成本,起到降本增效的效果,同时避免烟囱式数据接口开发,提高数据复用率,避免同样数据出现同样的多个接口,也避免不同的研发团队拿到同一份数据都在做自己场景的数据接口,减少数据孤岛情况。为此,我们设计了一套符合需求的数据服务平台。

一、平台介绍

统一数据服务平台依托于公司soa服务基础之上构建,平台实现统一技术方案,降低运营成本,提升了接口稳定性,可维护性和持续性;

运维配置,降低数据接口实现成本,从个性化开发的2d+ 降低到4h甚至更快的上线,这个实现基本上可以不强依赖资源排期;

通过统一数据服务平台可视化界面配置,不依赖java开发人员介入,可由数仓团队产出hive表根据需求配置接口输出;

统一数据源,保证了数据使用的一致性;

为需求方申请接口提供标准模板,提升沟通效率以及需求方对大数据需求的满意度。

系统层面架构图:

4e14f206c960bbe956a4e063b5b125a4.png

接口的申请配置流程如下图:

aa821bda4fe340dc77619f047b6f2c63.png    

二、如何实现

2.1 平台收口

减少数据接口的输出团队和技术方案;另外随着业务量、数据量的增长,业务类型的累积,现在的接口不是完全靠mysql能支撑的,平台统一规划技术方案,调用方不用关心底层服务是用clickhouse,es,starrocks,redis等任何数据库以及相关数据库的技术特性和语法特征。在实际配置中,我们需要结合调用方的场景以及不同的olap数据库的特性和优缺点来选择;比如:

ES:核心,高并发非KV结构的搜索场景;

Redis:核心,高并发KV结构场景;

MySql:核心,千万级以内小表简单查询并且是高并发场景;

starrocks:次核心,QPS不是非常高,单表数据量在千万级,亿级场景;

ClickHouse:非核心, QPS在100以内,数据量在千万级,亿级场景;

Trocks/ Hbase:非核心的KV结构场景;同时,对于不同的数据库,更新机制上也是需要我们注意的哪些适合于全量更新,哪些适合于增量更新;

5e485cfe34ae07927a82a5490ba27f5a.png

2.2 加强数据利用

有些数据只要表同步过,下次在其他业务场景使用的时候只要配置不同的查询sql就可以对外提供使用,通过血缘关系的监控,减少离线数据的重复同步,提升一份数据的应用面,从而提升数据的可用性和一致性,让数据复用而不是复制。

2.3 接口安全验证

每个调用方appid需要提前申请对某个接口的应用权限,统一服务平台通过授权token的方式,验证appid+token的权限防止未申请接口权限的应用非法调用,其中appid是通过公司soa框架自动获取避免appid被串改的情况,保证接口数据的安全性和稳定性。

2.4 限流保护

在一个高并发系统中对流量的把控是非常重要的,特别是在统一服务平台,当某个接口因为外部爬虫原因导致流量超过设置的阀值而没有拦住,可能导致整个平台对外输出接口都不可用。

为此,我们引入Sentinel限流机制。Sentinel是面向分布式服务架构的轻量级流量控制组件,主要以流量为切入点,从限流、服务降级、系统负载保护等多个维度来帮助我们保障服务的稳定性。

实现原理是根据指定的时间内生成预先配置好的令牌数,每一个请求都会消耗一个令牌,令牌申领完后就会拒绝服务。目前每一个接口名都会有一个独立的令牌,各接口间限流互相不干扰实现对每个接口的流量控制,qps超过设置阀值接口自动熔断。

2.5 数据缓存

接口的配置信息,这些信息持久化的存入硬盘中,在接口调用时会被频繁使用,如何快速高效的获取这些配置信息,需要使用到缓存机制。通过建立主动和被动缓存,避免服务器负载过高。数据源的配置信息定时缓存,接口在使用时能快速取到基础数据,不需要初始化。

2.6 服务契约统一

通过本平台调用的接口,现在所有的请求都是由一个入口中来完成。接口收到请求后根据接口的配置信息自动的进行分流处理。请求契约中包含head和params两部分,head负责接口的基本信息,用于服务验证和业务中转。params参数为json字符串参数对象,服务会动态根据json的信息与配置信息匹配进行解析参数。response契约中包含接口成功标志和result部分,其中result为json的字符串参数对象,需要调用方收到后进行解析。

Request如下图所示:

9e8017a2943ba322ab8ec8b7336a8844.png

Response 如下图所示:

0178e758f1311d0bd5dd0171729a6281.png

2.7 数据服务配置和映射

一个服务接口由数据源、sql语句、请求参数及响应参数组成。其中sql语句中的参数使用 ?、{序号} 占位符替代,与请求参数一起使用,sql有多少个参数占位符,请求参数就需要配置多少,接口运行时会根据请求的参数自动匹配到sql参数中。响应参数为了在查询结果中映射字段,sql查询输出的结果 ,可以通过映射转换真正想要的输出参数,配置的响应参数就是接口服务返回的查询结果。如下图是配置sql的查询方式:

66988967e33fa60b389fc1b35a679210.png

2.8 契约文档自动生成

个性化接口开发,需要对接口进行解释,告知调用方如何调用。结合接口输入和输出参数都是自定义的特点,定义一套服务文档展示模板,文档中包含所有的调用该接口的详细信息。只要定义好接口后,会动态的生成契约文档,申请使用该服务的团队会通过邮件方式发送信息,节省接口解释成本。文档在线效果如下图,同时也会以邮件形式推送给申请人。

dddb64de27cd604b252a6767ab011790.png

d0cff2208c4816e45edacc6b836e1111.png

2.9 服务监控

服务接口正常运行后,借助于公司的clog和ck日志框架来监控接口调用情况。Clog监控主是要记录请求接口从开始调用到返回所有的过程记录,包含每个过程节点的调用时长,请求参数及返回参数。方便定位接口request的整条链路。ck监控主是要记录接口层请求的参数,返回的参数和响应时间。每次请求只记录一次,可以统计,监控每个时段调用的次数,接口响应的时长等信息。

22c21d77413cfecd09dc294b58df5b17.png

2.10 生产运行效果

2021年12月初上线至今,目前对接调用方appid 10个,提供100多个接口服务。请求量随着接口的增加趋势增长,目前每天的请求量达390多万次。每个接口上线周期为半天时间或更短。接口上线只需要根据需求方配置后立刻就可以在线使用,大大的减少了上线的周期。生产接口响应时间91.49%在10ms内,99.99%是在100ms以内。

三、后期展望

现在所有的接口都部署在一个集群,对于一些调用方,我们其实也可以区分高中低三个等级,将高优调用方部署在一个独立集群上,中等调用方部署在一个集群上,低优调用方部署在独立集群上,相互之间资源隔离。

实现测试环境的打通。由于大数据环境大部分只有生产环境,没有测试环境和测试数据,所以统一服务平台现在只能用于生产环境。开发环境或者测试环境无法调用联调,对于调用方只能通过mock的方式测试,这个也是后面我们需要考虑如何利用最低的成本实现测试环境的可用性,让调用方使用起来更加便捷。

【推荐阅读】

0e98016a40584f835c6f3eabb5b3a234.jpeg

 “携程技术”公众号

  分享,交流,成长

携程API接口与旅游大数据的结合 通过合理利用携程API接口获取的旅游数据,并结合旅游大数据的分析方法,企业可以深入了解市场动态和消费者需求,制定更加精准的市场策略和产品方案,提升市场竞争力和用户满意度。未来,随着技术的不断进步和应用场景的不断拓展,携程API接口与旅游大数据的结合将在旅游行业中发挥更加重要的作用。携程API接口提供的旅游数据,为旅游大数据的分析提供了有力的支持。携程API接口是携程开放平台提供的一系列应用程序接口,通过这些接口,开发者可以获取携程平台上的旅游数据,包括酒店、机票、旅游线路等各方面的信息。 阅读详情

相关推荐

第三方接入-飞猪酒店商品发布流程

酒店商品发布 前言 我们接的一个外包要求我们能够调用代理通和飞猪的接口实现将携程的数据同步到飞猪, 因此将至记录下来,以下是参考飞猪酒店商品发布部分的文档而写 商品推送步骤 新增酒店 新增房型 新增rateplan(价格计划) 新增库存 新增价格 新增库存可以分为room共享库存和rate专有库存, rate接口参数use_room_inventory,传true表示使用room共享库存, 传false表示使用rate专有库存 接口说明 使用接口概览 接口步骤 API接口 接口说明

weixin_43404791的博客 3422

携程API接口系列,酒店景点详情请求示例参考

携程API接口系列涵盖了酒店预订、机票预订、旅游度假产品预订、景点门票预订等多个领域,其中酒店和景点详情请求是较为常用的功能。

Json_18179014480的博客 4758

携程获取景点详情 API接口数据item_get_scenic(内含详细步骤)

首先,你需要在开放平台注册一个开发者账号。这个账号将用于访问API接口和管理你的应用。:在注册完成后,登录到你的开发者账号,并创建一个新的应用。创建应用时,需要填写应用的基本信息,如应用名称、描述、回调地址等。创建成功后,你将获得一组API密钥,包括App Key和App Secret,用于后续API请求的身份验证。

API_you847337137的博客 2584

携程酒店查询API

携程酒店查询API 1) 请求地址 https://hotels.ctrip.com/Domestic/Tool/AjaxHotelList.aspx 2) 调用方式:HTTP post 3) 接口描述: 接口描述详情 4) 请求参数: POST参数: 字段名称 字段说明 类型 必填 备注 __VIEWSTATEGENERATOR string Y - cityName string Y - Sta..

软件开发 7015

拼多多电商API接口详情

拼多多电商API接口详情

Anzexi123的博客 2232

酒店系统对接携程接口全流程实战:订单、房态与房价同步

在OTA分销场景中,酒店管理系统(PMS)需要与携程等渠道进行接口对接,实现订单自动推送、房态实时同步与房价批量维护。接口对接的核心是理解携程供应商API的HTTP+XML/JSON协议,掌握签名规则、回调处理与数据一致性保障机制。通过合理的接口设计,酒店可以减少人工在EBK后台的操作,避免超卖和价格滞后,提升运营效率。本文从账号申请、联调环境准备出发,梳理订单接收确认、房态房价同步的关键实现,并结合签名错误、重复推送、限流等常见问题给出排查思路,为酒店信息化和OTA分销开发提供可落地的参考。

weixin_33404102的博客 355

全国酒店预订API接口

南里科技Data4 项目南里科技Data4的接口文档 数据安全2021-05-25 17:15 接口约定2021-05-25 17:15 错误代码2021-05-28 11:13

qq5254107的博客 2669

travel:携程酒店接口sdk

##酒店预定系统相关文档和代码 ###整合携程酒店 有问题请联系 ###网站演示地址:

全球酒店详情查看API接口-基于极核数据

此接口可以根据城市名称查询全球酒店信息 1.根据城市查酒店 接口地址:http://api.data-ranking.com/booking/search 支持格式:JSON 请求方式:GET 请求示例:http://api.data-ranking.com/booking/search?appkey=APPKEY&city=广州&p=67 请求参数: ...

weixin_30448603的博客 790

C语言 函数

一、什么是函数 二、函数的相关语法 三、函数编码规范

m0_57105760的博客 1891

3GPP协议解读_NTN系列(一)_38.811_非地面网络(NTN)的背景、应用场景和信道建模

非地面网络覆盖广,对物理攻击和自然灾害有一定的抵抗性。本文根据3GPP协议对NTN网络的背景、应用场景和信道模型进行了整理。

JCMLSY的博客 4928

iOS应用下集成携程api(酒店和飞机票)

最近一个项目中要使用酒店查询和飞机票预定,我这一通折腾,好在皇天不负有心人,最后终于一一搞定。选择了携程,为什么呢?目前国内有几家规模比较大的,例如:去哪儿,艺龙旅行,和携程。了解了一圈,最后发现,携程的api免费的。所以我就选择了携程。如果你对携程api有什么疑虑,或者不清楚,不知道怎么使用的,请留言,我会尽快回复你的。目前网上的资料(ios用的)比较少,所以我就写了这篇博客让大家尽量少走些弯路

移动开发的专栏 3796

VGG16

VGG16学习笔记

一去不复返的通信er 1177

国内酒店预定接口

酒店预订,在线订房,酒店信息查询,酒店搜索,酒店详情,房型价格,实时询,创建订单,订单详情,取消订单,支付订单,关键词搜索。

showapi的博客 1848

5种主流触觉传感器对比:GelSight、DIGIT、Taxim、GelSlim和TACTO怎么选?

本文深度对比了GelSight、DIGIT、Taxim、GelSlim和TACTO五种主流触觉传感器的技术原理与应用场景。针对机器人及VR项目的选型需求,文章从光学与电子传感的技术分野出发,分析了各传感器在分辨率、响应速度、集成难度和成本上的核心差异,并提供了从需求出发的实战选型决策框架,帮助开发者找到最适合的触觉解决方案。

weixin_29268637的博客 695

opencode : 无法将“opencode”项识别为 cmdlet、函数、脚本文件或可运行程序的名称 解决方案

本文主要介绍了opencode : 无法将“opencode”项识别为 cmdlet、函数、脚本文件或可运行程序的名称解决方案,希望能对使用opencode的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 11万+

携程酒店数据爬取2020.5

携程酒店数据爬取2020.5 1. 开题 目前网上有好多爬取携程网站的教程,大多数通过xpath,beautifulsoup,正则来解析网页的源代码。然后我这个菜b贪方便,直接copy源码的xpath,直接在xpath helper改改规则,结果一出来,我就已经看到了成功的希望,xpath真香。 然而,意想不到的是,在进行测试时,却匹配不出任何结果,我手中的鸡腿(xpath)就不香了,曾一度怀疑,是我水平太菜了,没写正确,然后一直回去学xpath知识,一边学啊,一边测试,甚至中途换了beautifulsou

weixin_45730707的博客 1万+

玩转Docker | 使用Docker部署MediaCMS内容管理系统

玩转Docker | 使用Docker部署MediaCMS内容管理系统

qq_59334230的博客 2918

关于携程多玩对接-订单对接

关于携程玩乐开放平台对接订单api

沉闷萝卜的博客 2959

CycloneDDS(C++版本)开源代码在Linux(X86平台)系统上编译生成可执行文件的详细步骤

cyclonedds里面已经有现成的实例供我们参考,在根目录下的example目录下面,我们打开此目录,此目录下有CMakeLists.txt文件以及一些其他的文档,我们需要在此目录(example目录)下编译构建出。我们可以看到cyclonedds-cxx-master包下的example目录下有很多文件,包括CMakeLists.txt等,其中我们要构建的可执行文件所需要的源文件等就在。此过程会稍微慢一点。之后会报错,如下:(图片中是c版本出现的问题截图,不影响,c++也是这个影响,问题是一样的)

qq_42595610的博客 1251

借助ChatGPT完成课题申报书中框架思路写作指南

通过这篇文章的学习,我们可以让ChatGPT先为用户匹配研究理论、研究方法、研究思路、研究内容等,为申请人提供一些参考,能够帮助对拟申报课题有一个初步的认识。当申请人找到了合适的理论、方法和问题后,再借助精细化提示词模型提问,那ChatGPT回答的启发性肯定会有质的提升,更具有使用价值。

智能AI让学术科研更容易 2468

利用开放API接口一键获取携程酒店详情,旅游必备攻略

通过携程开放API,开发者可快速构建旅游服务应用,为用户提供精准、实时的酒店详情与旅游攻略,提升出行体验。

z1205338073的博客 3502

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

酒店旅游类数据采集API接口之携程数据获取地方美食品列表 获取地方美餐馆列表 景点评论

支持以下基本接口: item_local_cuisine:获取地方美食品列表。 item_local_restaurant:获取地方美餐馆列表。 item_review_scenic:获取景点评论。 item_search_scenic:获取景点列表。 item_get_scenic:获取景点详情。 item_img_scenic:获取景点图片。 item_search_hotel:获取关键词酒店列表。 item_get_app:获取酒店详情原数据。

电商数据Girl的博客 947

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

利用携程API接口一键查询酒店信息,旅游技能全掌握

【代码】利用携程API接口一键查询酒店信息,旅游技能全掌握。

z1205338073的博客 1564

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

主题酒店api,携程酒店信息查询

主题酒店api,携程酒店信息查询,在线预订和支付下单。(!注post内容是json串如{"Key":"appkey"}而不是Key=appkey,建议使用浏览器插件测试,如火狐的HttpReqeuster,谷歌的DHC) 接口名称:主题酒店api 接口平台:api开放平台 接口地址:h...

chuang5890369309的博客 1123

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

要努力去发光,而不是被照亮~ 144
上一篇: 干货 | 百亿节点,毫秒级延迟,携程金融基于nebula的大规模图应用实践
下一篇: 干货 | 携程酒店Flutter性能优化实践
携程技术
博客等级 码龄10年 3716粉丝 324原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值