作者简介

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

背景

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

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

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

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

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

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

一、平台介绍

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

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

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

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

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

系统层面架构图:

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

二、如何实现

2.1 平台收口

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

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

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

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

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

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

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

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如下图所示:

Response 如下图所示:

2.7 数据服务配置和映射

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

2.8 契约文档自动生成

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

2.9 服务监控

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

2.10 生产运行效果

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

三、后期展望

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

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

【推荐阅读】

  • 携程度假数据治理之数据标准管理实践

  • StarRocks在携程大住宿智能数据平台的应用

  • 携程国际业务动态实时标签处理平台实践

  • 携程数据血缘构建及应用

 “携程技术”公众号

  分享,交流,成长

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

  1. 干货 | 节省55%测试时间,携程酒店比对平台介绍

    作者简介 黄文杰,携程酒店研发部高级测试经理,主要从事测试框架和平台的研发,现在负责自动化与工具平台,热衷于研究技术提升测试工作效率. 一.前言 当初我们为什么想到要开发比对平台,主要遇到以下几个问题 ...

  2. 干货 | 实现一个属于你的“语言”-携程Kotlin DSL开发与实践

    作者简介 刘媛,携程金融高级开发工程师,主要负责中文版.国际版支付Android端的开发及维护工作. 每一个DSL,都是一定意义上专有的语言,这篇文章希望能够用浅显易懂的方式,将Kotlin DSL的 ...

  3. 干货 | 携程酒店安卓地图开发实践

    作者简介 亦枫,携程资深软件工程师,负责酒店业务 Android 客户端的相关研发工作. 当前大多数移动互联网 App 都会存在地图相关功能,尤其是 LBS(基于位置服务)相关的业务,依赖性更强,携程 ...

  4. 干货 | 携程酒店MOCK全链路实践

    作者简介 刘晓攀,携程酒店性能测试负责人,专注性能测试分析和辅助测试工具的开发. 一.前言 Mock在整个软件开发测试周期中已经非常普遍,我们也会经常有意无意地使用它.譬如开发了一段代码,这段代码强依 ...

  5. 干货 | 携程酒店Flutter性能优化实践

    作者简介 Qifan,携程高级工程师,专注移动端开发:Yinuo,携程高级工程师,专注移动端开发:popeye,携程软件技术专家,关注移动端跨端技术,致力于快速,高性能地支撑业务开发. 一 .前言 携 ...

  6. 干货 | 携程酒店实时数仓架构和案例

    作者简介 秋石,携程数据仓库专家,关注大数据.数据仓库.数据治理等领域: 九号,携程数据技术专家,关注数据仓库架构.数据湖.数据治理: 魁伟,携程资深数据工程师,关注实时&离线大数据产品及技术 ...

  7. 干货 | 数据治理落地难?携程度假数据治理需求设计实践

    作者简介 Leon Gu,携程数据仓库专家,负责度假数据中台和数据仓库等工作,专注于大数据.数据仓库.数据治理等领域. 一.前言 携程度假包含跟团游.自由行.玩乐.门票.用车等十多条业务线,业务涵盖线 ...

  8. 干货 | 携程酒店小程序开发背后的“黑科技”

    作者简介 崔广宇,携程酒店研发部小程序开发经理,曾负责过反爬虫开发以及H5开发. 本文将分享携程酒店小程序的一些开发经验, 和一些非技术的经验.这里的小程序包括微信小程序,支付宝,百度,头条.快应用因 ...

  9. 干货 | 信息图谱在携程酒店的应用

    作者简介 Kuan.Pengfei,主要从事携程酒店知识图谱.问一问智能查询助手.内容信息挖掘平台的建设运维工作,热衷于各类大数据和分布式相关技术的研究和实践. "对于用户的每一次查询,都能 ...

  10. 干货 | 强化学习在携程酒店推荐排序中的应用探索

    宣云儿,携程酒店排序算法工程师,主要负责酒店排序相关的算法逻辑方案设计实施.目前主要的兴趣在于排序学习.强化学习等领域的理论与应用. 前言 目前携程酒店绝大部分排序业务中所涉及的问题,基本可以通过应用 ...

最新文章

  1. 周记 2016.4.5
  2. c语言单片机4*4键盘程序,求51单片机矩阵4*4键盘程序,P0口接一个数码管,P3口接矩阵键盘,C语言的...
  3. python 动态规划 数塔_数塔问题,简单的动态规划算法
  4. 基于MaxCompute的数仓数据质量管理
  5. android 缓存头像,android 实现类似微信缓存和即时更新好友头像示例
  6. 导航栏iframe公共样式_中秋节微信公众号推文样式素材推荐
  7. Java VisualVM无法检测到本地java程序 的 解决办法
  8. WordPress 5.0禁用古滕堡编辑器的方法
  9. java图片工具类_Java 下载图片下载文件 工具类
  10. 瑞星个人防火墙万能序列号ID号
  11. 图像和像素(Images and Pixels)
  12. 有没有测试牙齿需不需要修正的软件,三步图测法,就能知道自己牙齿是否需要矫正...
  13. 分享Silverlight/Windows8/WPF/WP7/HTML5周学习导读(6月11日-6月17日)
  14. 波澜不惊 波澜不惊波澜不惊
  15. CSS---按住录音提示框制作
  16. dolphin scheduler(一)
  17. TYVJ账号大公布!
  18. 一个屌丝程序猿的人生(一百二十一)
  19. Android端实现多人视频语音聊天|音视频开发
  20. Proxmox VE 6.0管理指南——8. Proxmox VE存储

热门文章

  1. SIMPLE ONLINE AND REALTIME TRACKING
  2. 【MATLAB】进阶绘图 ( Stairs 阶梯图 | stairs 函数 | Stem 离散序列数据图 | stem 函数 | 正弦函数采样 )
  3. 高数_第2章多元函数微分学__偏导数的几何应用_空间曲线的切线与法平面
  4. 探测器类的电路设计流程框图
  5. 详解Linux系统CPU的内部架构和工作原理
  6. 台达plc接线图实物_台达PLC dvp-14es 外部电路怎么接线
  7. 关于Arcgis中的裁剪说明
  8. python爬虫实践-B站弹幕分析
  9. 华为全球发布AI-Native数据库;微信公众号功能升级,一次可改20个错字;腾讯天幕:“3+2+N”助力政企云网络安全治理……...
  10. 计算机IP名词解释,IP地址的名词解释