TiDB x Bolt丨超强可扩展性与弹性助力超 1 亿用户畅享出行服务

news2024/11/27 0:44:18

作者:PingCAP 封小明

通过 TiDB 连接全球极限场景和创新场景,是 PingCAP 长期坚持的国际化战略。目前,在全球已有超过 3000 家企业选择 TiDB。无论在游戏、金融、物流、互联网还是智能制造等行业,基于规模化 OLTP 扩容、实时 HTAP 分析等应用场景,PingCAP 服务用户的脚步已经从中国延伸到全球,覆盖日本、亚太、北美和欧洲等各个区域。

本文为“全球极限场景与创新场景使用 TiDB 的最佳实践”专题第二篇,分享 TiDB 如何为 Bolt 1亿用户提供超强可扩展性与弹性,保障其服务的全球化运营。

Bolt 是一家总部位于爱沙尼亚,提供城市交通和运送服务的出行互联网公司,业务领域涵盖网约车、摩托车租赁、汽车共享和餐饮外卖等,是优步在欧洲的强劲竞争者。Bolt 在 45 个国家和地区的 500 多个城市拥有超过 1 亿客户,与全球 300 万多家供应商建立了合作伙伴关系,雇佣了 3000 多名员工。

在这里插入图片描述

MySQL 方案面临的主要痛点

作为一家互联网公司,数据对于业务决策和个性化服务具有巨大的价值与作用。过去,Bolt 一直使用 MySQL 作为其主数据库方案,并在很长一段时间内运行良好,但随着 Bolt 全球业务的快速增长,MySQL 开始无法应对其不断增加的数据量。

Bolt 内部有许多产品团队,开发和管理着数千个微服务。这些微服务在 300 多个 schema 中处理着数百 TB 的数据,而且数据量还在不断增长。MySQL 很难扩展到处理如此多的数据。为了尝试解决这些挑战,Bolt 开始尝试手动分表并添加列。但这个工作非常耗时,加载 1TB 的表需要一个星期或更长时间。此外,当他们运行 ALTER(DDL)等命令或进行备份时,还会出现操作问题。

为了支持其上亿客户,Bolt 对系统的正常运行时间和灾难恢复有着非常严苛的要求。但基于 MySQL 的旧解决方案太脆弱,无法在灾难中顺利运行。即使他们在 MySQL 上部署了像 Galera 这样的多主机集群来提高系统的可用性,偶尔还是会丢失数据。

为什么选择 TiDB?

为了解决以上痛点,Bolt 花了很多时间探索包括 Vitess 在内的数据库解决方案。但 Vitess 需要对 Bolt 的应用程序进行许多更改,业务改造复杂——且它与 MySQL 有着类似的操作问题。此外,Vitess 对 MySQL 兼容性很差。最终,Bolt 选择了开源的分布式 NewSQL 数据库 TiDB。

开源

TiDB 从第一天起就是一个开源的数据库。每一行代码都是公开透明的,所以 Bolt 可以根据自己的需要改变、修改和定制代码,而 TiDB 仍然可以工作。

水平可扩展性

TiDB 具有几乎无限的水平可扩展性。只需通过自动添加或删除存储节点,就可以轻松处理高达数百 TB 的数据峰值或低谷。此外,TiDB 采用了计算、存储分离架构,因此 Bolt 可以根据其不断变化的业务需求分别扩展或缩小计算和存储资源,这有助于 Bolt 控制其数据库和运维成本。

高可用性

TiDB 使用 Raft 算法来确保数据在 Raft 组的整个存储中高度可用并安全复制。TiKV 是 TiDB 的存储节点,数据在TiKV 节点之间冗余复制,并放置在不同的可用区中,以防止机器或数据中心发生故障。TiDB 提供自动故障转移,从而确保系统正常运行时间。此外,TiDB 提供了多种灾难恢复解决方案,每种解决方案都适用于不同的场景,成本灵活。

MySQL 兼容性

TiDB 与 MySQL 高度兼容,因此 Bolt 的工程团队无需改造就可以很容易将数据迁移到 TiDB。大大节省了时间与成本。此外,TiDB 可以与 Kafka 和 Kurbenetes 等主要技术堆栈良好集成,也可以在 AWS 上完美运行。

云原生

TiDB 基于云原生架构,充分利用了云的可扩展性和弹性,并被设计成可以在云、私有环境或混合环境中工作。TiDB 的云原生能力允许用户根据需要进行扩展,以满足不断变化的业务需求,而成本始终保持在控制范围内。

此外,当将 TiDB 与 Kubernetes 结合使用时,用户还可以:

  • 确保开发和部署环境的一致性;
  • 根据需要实例化一个新的节点,无论是为了适应增长,还是为了取代一个丢失的节点。

极具成本效益

同时,TiDB 也是一个具有绝佳成本效益的解决方案:

  • 强大的数据压缩能力降低了存储成本。例如,一个 4TB 的 MySQL 表在迁移到 TiDB 后可以压缩到 2TB 以下。根据 Bolt 的经验,TiDB 的平均压缩率在 3倍左右。根据数据类型,速率可能会略有变化——有时会更多,有时会更少;
  • 具有简化的 HTAP 架构,可以同时处理事务和分析工作负载。
  • 可以根据业务需求,分别水平扩展或缩小计算和存储资源。
  • 易于操作和维护,大大降低了维护成本。
  • 具有良好的 MySQL 兼容性,迁移过程平稳轻松。
  • 支持使用 Graviton2(Arm64)在 Amazon Elastic Kubernetes 服务(EKS)上进行灵活部署,从而实现更好的性价比。

TiDB 技术支持

在部署、迁移和使用 TiDB 的过程中,Bolt 得到了 TiDB 原厂工程师的高效支持,并对 TiDB 进行了特殊定制的改造。

截至 2022 年 10 月,Bolt 已经部署了七个 TiDB 集群,存储了数十 TB 的数据和数百个架构。

  • 4个 TiDB 集群运行于生产环境中,包括余额、计费、订购和物联网(IoT)服务。
  • 2个 TiDB 集群用于开发或预生产的 alpha 和 beta 集群。
  • 1个 TiDB 集群部署在斯德哥尔摩的下游集群,用于容灾。

未来展望

未来,Bolt 计划将更多业务依赖 TiDB,包括将更多集群从 MySQL 迁移到 TiDB,使用 TiDB 的变更数据捕获工具TiCDC 在 AWS 上设置多区域集群进行故障转移,并尝试 TiDB 的列式存储 TiFlash 进行实时分析查询,获得更加实时的数据洞察。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/585550.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为什么说企业需要搭建产品手册?

企业需要搭建产品手册的原因有很多,其中包括提高产品使用体验、降低售后服务成本、促进产品销售等。本文将从这些方面来介绍企业为什么需要搭建产品手册,并探讨如何有效地搭建和管理产品手册。 一、提高产品使用体验 产品手册是一份指导用户如何正确使…

【数据结构】二叉树——链式结构的实现(代码演示)

目录 1 二叉树的链式结构 2 二叉树的创建 3 二叉树的遍历 3.1 前序遍历 3.1.1运行结果: 3.1.2代码演示图: 3.1.3 演示分析: 3.2 中序遍历 3.3 后序遍历 3.4 层序遍历 4 判断是否是完全二叉树 5 二叉树节点的个数 5.1 总个数 5.2 叶子节点…

Electron-Builder Windows系统代码签名

前言 项目打包签名是两年前做的了,使用Electron-Bulder,打包工具版本迭代较少,倒是electron版本更新飞快,目前官方推荐使用Electron Forge进行打包,后续再对两者进行对比,重新整理现在的实现方案。 签名简…

微信扫码授权到登录网页,中间究竟发生了什么?

关于我昨天突然接到神秘“面试”:微信扫码授权登录的实现逻辑是神魔?在这个扫码授权的过程中客户端、服务端、微信平台都做了些神魔?二维码里面又有哪些信息? 从手机微信扫一扫二维码到登录个人的知乎账户,中间究竟发生…

智警杯赛前学习1.2--excel统计函数

常用统计函数 count countif(区域,条件) countifs(区域,条件,区域,条件) 求和函数 sum sumif(区域,条件,[求和区域]) sumifs&#xff…

AOP日志功能实现

AOP日志功能实现 1、添加两个工具类2、新建一个接口为 LogAnnotation3、新建一个类 LogAspect4、使用自定义注解 LogAnnotation5、运行结果6、项目结构 转载自b站:码神之路 1、添加两个工具类 HttpContextUtils 用于获取当前请求的 HttpServletRequest 对象&#xf…

Pycharm中安装jupyter 以及一些会遇到的问题

1、确保电脑安装了 anaconda 和jupyter notebook 2、在命令行 启动jupyter Notebook (启动后不要关闭这个命令窗口) 命令:juputer Notebook 成功运行后的网页界面: 3、打开Pycharm 创建新的项目 (注意是Conda) 4、 创…

【微信小程序开发小白零基础入门】微信小程序入门【建议收藏】

微信小程序入门 文章目录 微信小程序入门前言一、小程序的概述1.小程序简介2.小程序诞生3.小程序功能4.小程序创建步骤 二、小程序的准备工作1.注册开发者账号2.小程序信息完善3.成员管理 三、小程序的开发工具3.其他辅助工具 四、推荐小程序(欢迎各位大佬指导&…

STM32F4_常用存储器简介

目录 1. 存储器的种类 单片机和电脑一样,其内核分别为ARM和CPU(CPU通常是不具备存储功能的),内核是用来进行数据的运算和处理的。内核处理数据的来源就是存储器。 1. 存储器的种类 RAM存储器: RAM是 “Random Access Memory”的缩写&#x…

Java 集合、数组、字符串的相互转换(关于list.toArray(new String[0])的源码分析)

在 Java 中&#xff0c;可以通过以下方式实现集合、数组和字符串之间的相互转换。 一、集合和数组的相互转化 ①、将集合转为数组&#xff1a;&#xff08;toArray 方法&#xff09; List<String> list new ArrayList<>(); list.add("apple"); lis…

异构跨库数据同步还在用Datax?来看看这几个开源的同步方案

在遇到跨库或者异库数据同步时&#xff0c;我们一般都会借助ETL工具来实现数据同步功能。比如目前大家较为熟知的Kettle和Datax。但是&#xff0c;这两个需要定时去查询数据库的数据&#xff0c;会存在一定的延迟&#xff0c;而且&#xff0c;默认采用全量同步的方式&#xff0…

Java Spring概述

文章目录 1、Spring是什么&#xff1f;2、Spring 的狭义和广义3、Spring Framework特点4、Spring模块组成5、Spring6版本要求 1、Spring是什么&#xff1f; Spring 是一款主流的 Java EE 轻量级开源框架 &#xff0c;Spring 由“Spring 之父”Rod Johnson 提出并创立&#xff…

AD原理图元器件封装绘制

元器件封装界面 1.元器件可以新建原理图库&#xff0c;然后在新建的库中添加 2.采用下图中的方式&#xff0c;随便右键某个库中的元器件&#xff0c;选择“Edit…”&#xff0c;进入到元器件封装绘制界面 元器件封装设计步骤 1.点击工具——新器件 输入新器件ID&#xff0c…

性能测试监控平台:InfluxDB+Grafana+Jmeter

前言 性能测试工具jmeter自带的监视器对性能测试结果的实时展示&#xff0c;在Windows系统下的GUI模式运行&#xff0c;渲染和效果不是太好&#xff0c;在linux环境下又无法实时可视化。 2023年最新出炉性能测试教程&#xff0c;真实企业性能压测全流程项目实战训练大合集&am…

软件测试:测试用例详解

一、通用测试用例八要素   1、用例编号&#xff1b;    2、测试项目&#xff1b;   3、测试标题&#xff1b; 4、重要级别&#xff1b;    5、预置条件&#xff1b;    6、测试输入&#xff1b;    7、操作步骤&#xff1b;    8、预期输出 二、具体分析通…

微信支付Native下单API V3接口开发详解

这几天做微信支付Native下单接口调用、签名这块&#xff0c;弄的我焦头烂额&#xff0c;翻了很多网上配置&#xff0c;各有不同&#xff0c;写的不清不楚&#xff0c;只能自己慢慢研究&#xff0c;尝试了无数种解决坑的方案&#xff0c;嚼文咬字看官方的文档调试&#xff0c;文…

从零开始学Android开发期末复习重点

目录 前言作业&#xff11;作业&#xff12;作业&#xff13;作业4作业5作业6 前言 物联网应用技术课程期末复习重点——学习通作业&#xff1a; 操作系统&#xff1a;Ubuntu22.04 作业&#xff11; 简述Android系统架构。 Android 的系统架构和它的操作系统一样&#xff…

前端开发需要学什么?零基础前端学习路线看这一篇就够了!

是的&#xff0c;自学前端可以帮助您找到工作&#xff0c;参加培训是根据个人学习能力和经济实力来自己决定的。前端开发是一个相对容易入门的领域&#xff0c;并且许多人通过自学成功地找到了前端开发的工作。以下是好程序员的一些建议&#xff0c;可以帮助您在自学前端时提高…

离线语音控制新方案,NRK3303语音识别芯片在智能风扇的应用

随着科技的不断发展&#xff0c;智能家居已经成为人们日常生活中不可或缺的一部分&#xff0c;涌现出越来越多的智能设备&#xff0c;如智能门锁、智能灯泡、智能冰箱等&#xff0c;这些设备为人们的生活带来了更多的便利和创新。其中作为常见的风扇通过添加智能语音控制功能&a…

分布式运用之Filebeat+Kafka+ELK 的服务部署

1. Kafka 架构深入了解 1.1 Kafka 工作流程及文件存储机制 Kafka 中消息是以 topic 进行分类的&#xff0c;生产者生产消息&#xff0c;消费者消费消息&#xff0c;都是面向 topic 的。 topic 是逻辑上的概念&#xff0c;而 partition 是物理上的概念&#xff0c;每个 parti…