写点什么

分布式数据库 TiDB 在携程的实践

  • 2023-04-12
    北京
  • 本文字数:2502 字

    阅读完需:约 8 分钟

分布式数据库 TiDB 在携程的实践

随着新冠病毒疫情的缓解和控制,全球旅游业逐渐开始重新复苏。尤其在一些度假胜地,游客数量已经恢复到疫情前的水平。

 

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

 

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

 

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

原 MySQL 架构痛点与挑战



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



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

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


分布式数据库选型


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

  • 性能:平衡性能和成本,选择通用机型,不使用高端存储或机器,并要求响应稳定;

  • 运维与社区:学习成本适中,运维复杂度低,产品需开源且社区活跃;

  • 成本:一方面,业务研发需要学习使用 SQL,特别是 MySQL 协议;另一方面,运维团队希望产品不要过于复杂,易于维护;

  • 扩展性:分布式数据库需要具有快速的扩展能力,扩缩容对业务影响小。



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,将酒店和度假结算业务从 SQL server 迁移到 TiDB 上,总数据量规模达到 8TB,并受到了开发人员的一致好评,满足了性能和扩展性的诸多要求。

 

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

 

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



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



TiDB 在携程的全球化运用



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

 

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

  • TiDB 原生支持 Prometheus + Grafana,提供了丰富的诊断数据,可以根据 TiDB 故障诊断手册快速定位问题。

  • 由于 Grafana 的数据在每个集群上单独分布,携程通过 prometheus 源生 remote write 转发性能数据到携程统一监控平台,以便在监控平台上进行性能告警和大盘监控。

 

目前,携程已经顺利完成从 SQL server 到 TiDB 的迁移,稳定应用于携程的国内、海外各业务场景中,借助 TiDB HTAP 能力,携程大幅提高了查询性能,实现海量数据的高效存储。

 

2023-04-12 10:102749
用户头像
刘燕 InfoQ高级技术编辑

发布了 1112 篇内容, 共 546.1 次阅读, 收获喜欢 1978 次。

关注

评论

发布
暂无评论
发现更多内容

如何解决跨国视频会议卡顿问题

Ogcloud

网络加速 海外网络加速 网络加速服务 视频会议加速

为什么要使用TikTok云手机

Ogcloud

云手机 海外云手机 tiktok云手机 云手机海外版 tiktok运营

真去送了外卖的程序员,来聊聊他眼中的《逆行人生》丨编码人声

声网

一段鸿蒙旅程

草原上的奔跑

鸿蒙Next 纯血鸿蒙

如何在 KubeBlocks 中配置实例模板?

小猿姐

数据库 Kubernetes 云原生

MySQL主从同步如何保证数据一致性?

王磊

Java

AI作文导师、一键搜索答疑、1秒生成手抄报,百度搜索推出开学季AI大礼包

Geek_2d6073

iPaaS丨API低代码平台适用的业务场景

RestCloud

API 低代码平台 ipaas

编程“奥斯卡”落幕,百度之星决赛中学生疯狂收割大奖!

herosunly

草图大师2023软件分享:SketchUp Pro 2023(Win&Mac) 中文特别版

你的猪会飞吗

SketchUp Pro 2023 草图大师2023下载 SketchUp Pro 2023下载 mac破解软件下载

Bonree ONE 3.0:全域可观测 运维新境界

博睿数据

机器人测试自动化智能化交流沙龙 —— 免费参与,线上线下同步进行,探索未来科技新篇章!

测吧(北京)科技有限公司

测试

如何通过观测云实现AIOps突破?

观测云

AIOPS 智能运维

RFG引领Meme新趋势——为何现在仍是投资好时机?

股市老人

解锁RFG空投:撸毛党看过来,轻松获利的机会来了!

石头财经

深入浅出python的lambda表达式

我再BUG界嘎嘎乱杀

Python 编程 后端 开发语言 Lambda表达式

在孩子成长路上,爱与智慧的陪伴是送给孩子最好的礼物

心大陆多智能体

AI大模型 心理健康 数字心理

豆瓣评分8.7!Python pandas创始人亲码的数据分析入门手册!

我再BUG界嘎嘎乱杀

Python 编程 数据分析 后端 pandas

第64期 | GPTSecurity周报

云起无垠

直播拍卖平台开发:如何利用沉浸式体验展示高价值商品

软件开发-梦幻运营部

华为云构建边缘云平台,畅享AI数字时代新体验

最新动态

云上集成时序数据库 IoTDB,海量储能数据实现高效处理与实时分析

Apache IoTDB

百度智能云计算系列产品通过电子标准院算力服务成熟度增强级评估

Baidu AICLOUD

四旋翼无人机到底是如何平稳飞行的?巧用空气动力学仿真

Altair RapidMiner

人工智能 无人机 仿真 altair 设计仿真

通过 API 集成优化货币兑换

幂简集成

API 货币兑换API

利用多Lora节省大模型部署成本|得物技术

得物技术

LoRa 大模型 企业号2024年8月PK榜

使用对比!SLS 数据加工 SPL 与旧版 DSL 场景对照

阿里巴巴云原生

阿里云 云原生 sls

讯飞星火极速超拟人交互技术:语音端到端,8 月底开放;昆仑万维发布 AI 短剧平台 SkyReels丨RTE 开发者日报

声网

通义灵码代码搜索功能的前沿性研究论文被软件工程国际顶会 FSE 录用

阿里云云效

阿里云 云原生 通义灵码

【AI 冰封挑战】搭档函数计算,“冰”封你的夏日记忆

阿里巴巴云原生

阿里云 Serverless 云原生

机器人测试自动化智能化交流沙龙 —— 免费参与,线上线下同步进行,探索未来科技新篇章!

霍格沃兹测试开发学社

分布式数据库 TiDB 在携程的实践_开源_TiDB技术团队_InfoQ精选文章