首页 > 其他分享 >携程 x TiDB丨应对全球业务海量数据增长,一栈式 HTAP 实现架构革新

携程 x TiDB丨应对全球业务海量数据增长,一栈式 HTAP 实现架构革新

时间:2023-05-03 10:32:15浏览次数:38  
标签:携程 一栈 TiDB 业务 机房 MySQL HTAP 数据库

作者: TiDB社区小助手



导读

携程作为全球领先的一站式旅行平台,旗下拥有携程旅行网、去哪儿网、Skyscanner 等品牌。携程旅行网向超过 9000 万会员提供酒店预订、酒店点评及特价酒店查询、机票预订、飞机票查询、时刻表、票价查询、航班查询等服务。

随着业务量迅速增长,携程需要更敏捷的技术架构来满足不断激增的并发与数据量,一个稳定、可靠,可以随业务增长不断扩展的数据库对于携程来说显得尤其重要。作为海内外在线旅游行业的翘楚,携程也曾面临着数据库带来的技术挑战。

本文介绍了携程数据库架构从 SQL Server 到 MySQL 再到 TiDB 的革新历程,从痛点分析、选型思考到部署实践,全面介绍了 TiDB 如何支撑携程的酒店和度假结算场景、海量数据场景以及全球化业务,以一栈式 HTAP 支持携程全球业务海量数据增长。



原 MySQL 架构痛点与挑战

携程创立于 1999 年,最初选择使用 SQL Server 数据库,在整体数据库技术栈中占比达到 99%。2012 年初,携程开始逐步关注开源技术,尤其是 MySQL,不过该阶段 MySQL 使用占比仍然很低,只有 10% 左右。从 2014 至 2019 年,携程开始加深 MySQL 的应用,并因为业务形态发生了变化,携程开始从 SQL Server 转型到 MySQL,对 MySQL 进行了深入研究,包括内核补丁、全自动故障诊断等。

携程 x TiDB丨应对全球业务海量数据增长,一栈式 HTAP 实现架构革新_MySQL

携程的应用部署在两个或多个 IDC 中,数据库也对等部署在每个 IDC 中。MySQL 部署方式采用 HA 节点,即主备节点,在同一机房部署,另一节点在不同 IDC 部署,这种方式保证了 HA 切换速度和数据的容灾。比如遇到单机房故障或者整个机房宕机,可以迅速把第二节点启动起来。携程在主备切换和第二切换时做了很多自动化工作,但这种架构也有明显缺点,由于应用的无状态化,数据库的切换会造成业务的短暂中断,因为数据库只有一个主节点。

携程 x TiDB丨应对全球业务海量数据增长,一栈式 HTAP 实现架构革新_数据库_02

在扩展方式方面,携程没有采用中间件的方式,而是采用客户端实现分片规则。客户端在上线时会确定分片规则,再根据 ID 使用取模运算定位到某个分片,这样可以更方便地进行扩展。当业务增加时实例数量从 1 变成 N ,当负载下降时也可以缩回来。

但是这种扩展方式对 DBA 运维来说还有一些挑战,随着 DBA 越来越多,聚合会比较困难,业务代码也变得复杂。



分布式数据库选型

2018 年,随着携程业务的快速发展,底层架构需要支持弹性扩展,特别是在季节性高峰期(例如春运火车票抢票等)。分布式数据库由于具有 DB 级弹性、快速扩展和混合负载(HTAP)等优势,更适合业务的发展,携程开始考虑引入分布式数据库,并进行调研选型。携程主要从以下几个维度考量分布式数据库:

  • 性能:平衡性能和成本,选择通用机型,不使用高端存储或机器,并要求响应稳定;
  • 运维与社区:学习成本适中,运维复杂度低,产品需开源且社区活跃;
  • 成本:一方面,业务研发需要学习使用 SQL,特别是 MySQL 协议;另一方面,运维团队希望产品不要过于复杂,易于维护;
  • 扩展性:分布式数据库需要具有快速的扩展能力,扩缩容对业务影响小。

携程 x TiDB丨应对全球业务海量数据增长,一栈式 HTAP 实现架构革新_MySQL_03

携程 TiDB 部署模式

2018 年,携程开始正式引入 TiDB。考虑到 TiDB 的架构和携程的 IDC 环境,携程将 TiDB 分别部署在三个 IDC 机房(IDC1、IDC2、IDC3)中,遵循同时部署的标准。TiKV、TiDB 和 PD 均匀分布在三个 IDC 机房中,业务流量可以本地感知到每个机房的 TiDB Server ,在单机房故障时可以自动重启到其它机房。因为客户端对 TiDB 进行了探活与感知,单个 TiDB 服务器故障时客户端可以重新定向。



TiDB 在酒店和度假结算场景的应用

携程作为一个大型的在线旅游平台,其酒店和度假结算场景下需要处理大量的交易数据。携程原 MySQL 架构主要采用分片(sharding)的扩展方式,对于酒店和度假结算这类业务来说,分片会变得非常困难。最初的方案是把 SQL Server 上的数据原封不动导入到 MySQL 中,但测试后发现性能不佳,扩展性也受限。如果采用分片方式部署,不论从酒店的维度、供应商的维度或者是用户维度,都很难选择合适的分片键( sharding key),这种方式也对业务代码侵入性比较大。

TiDB 的分布式架构可以将数据分散存储在多个节点上,实现数据的水平扩展,提高系统的承载能力。因此,携程最终选择了 TiDB,将酒店和度假结算业务从 SQL server 迁移到 TiDB 上,总数据量规模达到 8TB,并受到了开发人员的一致好评,满足了性能和扩展性的诸多要求,同时降低了运维成本,能够更好地支持携程业务的发展。



TiDB 在海量数据场景中的应用

携程的海量数据场景涉及到大量数据存储。原架构中由于单机存储限制,扩展必须通过 sharding 方式实现。但该解决方案对于一些业务而言过于复杂,例如在 IBU 海外业务部数据,单表数据已经超过 300 亿。应用 TiDB 可以大幅提高查询性能,实现大量数据的高效存储。TiDB 的行列混存架构( TiFlash 和 MPP 技术),使得携程部分查询性能有了 20 倍提升;在信息安全源数据标记数据时,单表数据也超过了 60 亿行,读写的响应时间都达到毫秒级,单天聚合查询秒级返回。

携程 x TiDB丨应对全球业务海量数据增长,一栈式 HTAP 实现架构革新_数据库_04

除了使用 TiDB ,携程还在使用其存储层 TiKV。引入 TiKV 是因为携程现在的业务有一些简单的 KV 存储需求,携程在使用的产品有 Redis 和 Hbase,但是 Hbase 的性能相比于 Redis 比较差,而 Redis 则存在数据不一致的风险,比如网络抖动、中断等。携程有一些业务有强一致 KV 需求,例如近期引入的酒店取消政策项目,Redis 虽然能满足业务需求,但没有强一致性能。综合考量之后,携程选择了 TiKV 解决上述挑战。TiKV 的部署与 TiDB 类似,也是在三个机房分布部署,应用可以感知到每个机房的 PD,并且 PD 也在三个机房分别部署。该架构可以确保如果出现机房级故障,或是单 PD 故障,运维团队都可以做到平滑切换。

携程 x TiDB丨应对全球业务海量数据增长,一栈式 HTAP 实现架构革新_数据_05



TiDB 在携程的全球化运用

携程 x TiDB丨应对全球业务海量数据增长,一栈式 HTAP 实现架构革新_数据库_06

携程 x TiDB丨应对全球业务海量数据增长,一栈式 HTAP 实现架构革新_MySQL_07

携程 x TiDB丨应对全球业务海量数据增长,一栈式 HTAP 实现架构革新_MySQL_08

随着携程近年来开始走向海外,海外业务呈现迅猛增长趋势。携程也将国内成熟的数据库技术直接用于海外。目前,TiDB 在携程的国内和海外业务是分开部署的,海外应用复用了国内的 schema 和代码,监控告警方式也与国内保持一致,部署方式也是相同的。

携程引入 TiDB 并完成了一系列内部生态整合,包括发布系统(如表结构发布、索引发布)、数据修改和查询等。由于 TiDB 和 MySQL 采用了相同的协议,整合过程相对简单平滑:

  • TiDB 原生支持 Prometheus + Grafana,提供了丰富的诊断数据,可以根据 TiDB 故障诊断手册快速定位问题。
  • 由于 Grafana 的数据在每个集群上单独分布,携程通过 prometheus 源生 remote write 转发性能数据到携程统一监控平台,以便在监控平台上进行性能告警和大盘监控。

目前 TiDB 稳定应用于携程的国内、海外各业务场景中,借助 TiDB HTAP 能力,携程大幅提高了查询性能,实现海量数据的高效存储。

标签:携程,一栈,TiDB,业务,机房,MySQL,HTAP,数据库
From: https://blog.51cto.com/u_15550868/6241113

相关文章

  • 基于阿里云数据库TiDB的性能压测初体验
    作者:arron基于阿里云数据库TiDB的性能压测初体验申请阿里云TiDB地址:https://market.aliyun.com/isv-pingcap的过程,申请和部署过程非常简单直观,按提示一步步来即可,这里就忽略了。本次实验,主要对该云TiDB集群进行性能测试,使用测试工具有sysbench,tpcc,CH-benCHmark参考文档:如何用......
  • 基于 TiCDC 的 TiDB 复制集群的计划内和计划外切换验证步骤
    作者:pepezzzz环境准备集群名称和版本上游tidb集群:tidb-h下游tidb集群:tidb-cdc版本:v6.5.0CDC专用用户:cdcuser注:业务负载用户应独立于CDC专用用户。业务数据库:cdcdb模拟业务应用:Sysbench、BANK。上下游创建ticdc同步用户和数据库createusercdcuseridentified......
  • TiDB与MySQL的SQL差异及执行计划简析
    作者:京东零售肖勇一、前言导读TiDB作为NewSQL,其在对MySQL(SQL92协议)的兼容上做了很多,MySQL作为当下使用较广的事务型数据库,在IT界尤其是互联网间使用广泛,那么对于开发人员来说,1)两个数据库产品在SQL开发及调优的过程中,都有哪些差异?在系统迁移前需要提前做哪些准备?2)TiDB的执行计......
  • 将TiDB各服务组件混布到物理机集群和K8S环境
    前提条件K8S集群外的服务器节点和K8S集群内的Pod网络必须保持互通(本文采用将物理机节点加入K8S集群然后打污点并驱逐该服务器里边的pod的方式来实现)K8S机器外的服务器节点必须可以通过添加解析的方式来解析K8S集群内部Pod域名(具体见第一步)待迁移集群没有开启组件间TLS加密通信......
  • TiDB单机部署
    1、安装包下载及环境说明TIDB软件包下载地址:https://cn.pingcap.com/product-community/操作系统:CentOS7.9TIDB版本:6.5.1TIDB所需安装包:tidb-community-toolkit-v6.5.1-linux-amd64.tar.gztidb-community-server-v6.5.1-linux-amd64.tar.gz2、创建系统用户#创建用......
  • TiDB × 阿里云试用体验(随迟但到)
    作者:CuteRay前言其实TiDB的阿里云试用活动其实也过去一段时间了,之前一直没有整块整块的时间慢慢地折腾,只能趁着闲暇之余慢慢体验,这篇文章也就写的很慢了,可惜错过了文章征文活动,错过好多礼物(咱们写文章是为了奖品的吗?肤浅!!!)。行话不多说,直入正题。部署部署没什么太多需要讲的,......
  • TiDB 数据库大版本升级-基于TiCDC异机升级
    作者:gary一、前言 本操作手册描述了xx用户TiDB集群基于TiCDC进行大版本升级的操作过程、操作方法与注意事项,用于指导xx用户完成TiDB集群基于TiCDC进行大版本异机升级以及回退方案。 二、升级架构图 ** **TiCDC的系统架构如上图所示:部署一套所需升级版本的下游TiDB集群......
  • 基于TiDB+Flink实现的滑动窗口实时累计指标算法
    作者:Jellybean前言在不少的支付分析场景里,大部分累计值指标可以通过T+n的方式计算得到。随着行业大环境由增量市场转为存量市场,产品的运营要求更加精细化、更快速反应,这对各项数据指标的实时性要求已经越来越高。产品如果能实时把握应用的整体运行情况或特征用户的状态,就可......
  • bytebase让你爱上tidb的开源审核神器。
    作者:tidb狂热爱好者保证tidb运行,首先要缩小数据库容量。保证每个sql只需要查询他当前需要查询的内容。尽量取更少的数据,节约单个tikv的io。使用分页、分表、分区等技术,控制单表的数据量和查询范围这种就是保证读取的少使用缓存、读写分离、集群等技术,提高并发处理能力和可用性根......
  • 基于TiDB Binlog架构的主备集群部署及数据同步操作手册
    作者:Liuhaoao最近手头有个系统,有需要搭建灾备库的需求(rto要求4小时内,根据实际情况计算)。考虑到生产系统是5版本,TiCDC存在一些兼容性问题,且TiDBBinlog已经有实践案例及经验可供参考,故选择使用TiDBBinlog来实现主集群-->灾备集群的增量数据同步。数据全量初始化采用Dumpling+Ti......