TiDB 在特来电的实践

2024-04-08 03:18
文章标签 tidb 实践 来电

本文主要是介绍TiDB 在特来电的实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景介绍

特来电新能源有限公司是创业板第一股特锐德(300001)的全资子公司,主要从事新能源汽车充电网的建设、运营及互联网的增值服务。特来电颠覆了传统充电桩的模式,世界首创了电动汽车群智能充电系统,获得 336 项技术专利,以“无桩充电、无电插头、群管群控、模块结构、主动防护、柔性充电”的特点引领世界新能源汽车充电的发展,系统的鉴定结论为:“产品世界首创、技术水平国际领先。主动柔性充电对电池寿命可以延长 30% 左右,电池充电的安全性可以提升 100 倍以上。”

特来电采用互联网思维,依靠国际领先的汽车群智能充电技术和系统,创新电动汽车充电商业模式,建设全国最大的汽车充电网,通过大系统卖电、大平台卖车、大共享租车、大数据修车、大支付金融、大客户电商,打造让客户满意、政府放心的中国最大汽车充电网生态公司,引领充电网、车联网、互联网“三网融合”的新能源互联网。

为什么研究 TiDB

特来电大数据平台通过开源与自研相结合的方式,目前已经上线多套集群满足不同的业务需求。目前在大数据存储和计算方面主要使用了 HBase、Elasticsearch、Druid、Spark、Flink。大数据技术可谓是百花齐放、百家争鸣,不同的技术都有针对性的场景。结合实际情况,选择合适的技术不是一件容易的事情。

随着接入大数据平台的核心业务的增加,我们在 OLAP 上主要遇到以下痛点问题:

  • 随着基于大数据分析计算的深入应用,使用 SQL 进行分析的需求越来越旺盛,但目前已经上线的大数据集群( HBase、Elasticsearch、Druid、Spark、Flink)对 SQL 的支持度都比较弱。

  • 目前进入大数据集群的数据主要以宽表方式进行,导致在数据归集和后期基础数据放生变化时应用成本较高。

  • 数据仓库业务有些还是基于复杂的 T+1 模式的 ETL 过程,延时较高,不能实时的反映业务变化。

  • 由于每个大数据集群主要针对特定的场景,数据重复存储的情况较多,这就造成了存储成本的增加,同时也会导致数据的不一致性。

  • 目前进入 HDFS / Druid / ES 的数据,在历史数据更新时,成本较高,灵活性降低。

大数据技术发展迅速,我们也一直希望采用新的技术可以解决我们以上问题,我们关注到目前 NewSQL 技术已经有落地产品,并且不少企业在使用,所以决定在我们平台内尝试引入 NewSQL 技术解决我们的痛点问题。

我们先了解一下 NewSQL。

图 1 数据库发展史

如图 1 所示,数据库的发展经历了 RDBMS、NoSQL 以及现在的 NewSQL,每种不同的技术都有对应的产品,每种数据库的技术背后,都有典型的理论支撑。2003 年 Google GFS 开创了分布式文件系统、2006 年的 BigTable 论文催生了 Hadoop 生态,在 2012 年的 Spanner 和 2013 年的 F1 论文发表后,被业界认为指明了未来关系型数据库的发展。

随着大数据技术的发展,实际上 SQL 和 NoSQL 的界限逐渐模糊,比如现在 HBase  之上有 Phoenix,HiveSQL,SparkSQL 等,也有一些观点认为 NewSQL = SQL + NoSQL。不同的技术都有各自的最佳适应场景,Spanner 和 F1 被认为是第一个 NewSQL 在生产环境提供服务的分布式系统技术,基于该理念的开源产品主要为 CockroachDB、TiDB。结合社区活跃度以及相关案例、技术支持,我们决定 NewSQL  技术上引入 TiDB。

TiDB 介绍

TiDB 是 PingCAP 公司受 Google Spanner / F1 论文启发而设计的开源分布式 HTAP 数据库,结合了传统的 RDBMS 和 NoSQL 的最佳特性。TiDB 兼容 MySQL,支持无限的水平扩展,具备强一致性和高可用性。

图 2 TiDB 架构图

TiDB 具有以下核心特性:

  • 高度兼容 MySQL —— 无需修改代码即可从 MySQL 轻松迁移至 TiDB

  • 水平弹性扩展 —— 轻松应对高并发、海量数据场景

  • 分布式事务 —— TiDB 100% 支持标准的 ACID 事务

  • 高可用 —— 基于 Raft 的多数派选举协议可以提供金融级的 100% 数据强一致性保证

  • 一站式 HTAP 解决方案 —— 一份存储同时处理 OLTP & OLAP,无需传统繁琐的 ETL 过程

其中涉及到的分布式存储和分布式计算,大家可以参考 TiDB 的官方网站,在这里就不再进行论述。

在处理大型复杂的计算时,PingCAP 结合上图说的 TiKV 以及目前大数据生态的 Spark,提供了另外一个开源产品 TiSpark。不得不说这是一个巧妙的设计,充分利用了现在企业已有的 Spark 集群的资源,不需要另外再新建集群。TiSpark 架构以及核心原理简单描述如下:

图 3 TiSpark 架构图

TiSpark 深度整合了 Spark Catalyst 引擎, 可以对计算提供精确的控制,使 Spark 能够高效的读取 TiKV 中的数据,提供索引支持以实现高速的点查。

通过多种计算下推减少 Spark SQL 需要处理的数据大小,以加速查询;利用 TiDB 的内建的统计信息选择更优的查询计划。

从数据集群的角度看,TiSpark + TiDB 可以让用户无需进行脆弱和难以维护的 ETL,直接在同一个平台进行事务和分析两种工作,简化了系统架构和运维。

除此之外,用户借助 TiSpark 项目可以在 TiDB 上使用 Spark 生态圈提供的多种工具进行数据处理。例如使用 TiSpark 进行数据分析和 ETL;使用 TiKV 作为机器学习的数据源;借助调度系统产生定时报表等等。

目前的应用情况

由于很多用户已经部署了生产系统,我们没有在测试上再次投入比较大的精力,经过了简单的性能测试以后,搭建了我们的第一个 TiDB 集群,尝试在我们的业务上进行使用。目前主要用于我们的离线计算,以及部分即系查询场景,后续根据使用情况,逐渐调整我们的集群规模以及增加我们的线上应用。

1. 目前的集群配置

图 4 集群配置清单

2. 规划的应用架构

图 5 引入 TiDB 以后的应用架构图

基于 TiDB 我们规划了完整的数据流处理逻辑,从数据接入到数据展现,由于 TiDB 高度兼容 MySQL,因此在数据源接入和 UI 展现就有很多成熟的工具可以使用,比如 Flume、Grafana、Saiku 等。

3. 应用简介

a. 充电功率的分时统计

每个用户使用特来电的充电桩进行充电时,车辆的 BMS 数据、充电桩数据、环境温度等数据是实时的保存到大数据库中。我们基于采集的用户充电数据,需要按照一定的时间展示全国的充电功率 比如展示过去一天,全国的充电功率变化曲线,每隔 15 分钟或者 30 分钟进行一次汇总。随着我们业务规模的增加,此场景的计算也逐步进行了更新换代。

图 6 充电功率的分时统计

目前我们单表数据量接近 20 亿,每天的增量接近 800 万左右。使用 TiDB 后,在进行离线计算分析时,我们的业务逻辑转成了直接在我们的离线计算平台通过 SQL 的方式进行定义和维护,极大的提高了维护效率,同时计算速度也得到了大幅提升。

b. 充电过程分析

上面我们讲了,我们已经有了充电过程中的宝贵的海量数据,如何让数据发挥价值,我们基于充电数据进行充电过程的分析就是其中的一个方式,比如分析不同的车型在不同的环境(环境温度、电池特性)下,充电的最大电压和电流的变化情况,以及我们充电桩的需求功率满足度等。

图 7 充电过程分析

针对海量的历史数据计算我们使用了 TiSpark 进行计算,直接使用了我们现有的 Spark 集群,在使用 Spark 进行计算时,一开始由于不熟悉 TiSpark,分配的资源比较少,耗时多一些。后来和 TiDB 技术人员交流了解到最佳实践,提升配置和调整部分参数后,性能提升不少。这个场景中我们充分利用了 TiDB 和 TiSpark 进行协同工作,满足了我们的业务需求。

总结及问题

1. 最佳应用场景

结合我们的线上验证,我们认为使用 TiDB,主要有以下几个优势:

  • SQL 支持度相对于现有的集群支持度较好,灵活性和功能性大大增强。

  • 可以进行表之间的 join 运算,降低了构造宽边的复杂度以及因此带来的维护成本。

  • 历史数据方便修改。

  • 高度兼容 MySQL 生态下对应的成熟软件较多(开发工具、展现、数据接入)。

  • 基于索引的 SQL 性能在离线计算上基本可以满足我们需求,在即席查询上最适合海量数据下进行多维度的精确查询,类似与 “万里挑一” 的场景。

  • 使用 TiSpark 进行复杂的离线计算,充分利用了现有的集群,数据存储做到了一份,同时也降低了运维成本。

2. 目前的定位

结合我们的实际现状,现阶段我们主要用于进行离线计算和部分即席查询的场景,后期随着应用的深入,我们逐步考虑增加更多的应用以及部分 OLTP 场景。

作者介绍:潘博存,特来电大数据技术研发部架构师,具有 10 多年平台软件设计开发经验,现专注于大数据领域快速读写方向。

这篇关于TiDB 在特来电的实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/884423

相关文章

C++必修:模版的入门到实践

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C++学习 贝蒂的主页:Betty’s blog 1. 泛型编程 首先让我们来思考一个问题,如何实现一个交换函数? void swap(int& x, int& y){int tmp = x;x = y;y = tmp;} 相信大家很快就能写出上面这段代码,但是如果要求这个交换函数支持字符型

亮相WOT全球技术创新大会,揭秘火山引擎边缘容器技术在泛CDN场景的应用与实践

2024年6月21日-22日,51CTO“WOT全球技术创新大会2024”在北京举办。火山引擎边缘计算架构师李志明受邀参与,以“边缘容器技术在泛CDN场景的应用和实践”为主题,与多位行业资深专家,共同探讨泛CDN行业技术架构以及云原生与边缘计算的发展和展望。 火山引擎边缘计算架构师李志明表示:为更好地解决传统泛CDN类业务运行中的问题,火山引擎边缘容器团队参考行业做法,结合实践经验,打造火山

9 个 GraphQL 安全最佳实践

GraphQL 已被最大的平台采用 - Facebook、Twitter、Github、Pinterest、Walmart - 这些大公司不能在安全性上妥协。但是,尽管 GraphQL 可以成为您的 API 的非常安全的选项,但它并不是开箱即用的。事实恰恰相反:即使是最新手的黑客,所有大门都是敞开的。此外,GraphQL 有自己的一套注意事项,因此如果您来自 REST,您可能会错过一些重要步骤!

Netty ByteBuf 释放详解:内存管理与最佳实践

Netty ByteBuf 释放详解:内存管理与最佳实践 在Netty中(学习netty请参考:🔗深入浅出Netty:高性能网络应用框架的原理与实践),管理ByteBuf的内存是至关重要的(学习ByteBuf请参考:🔗Netty ByteBuf 详解:高性能数据缓冲区的全面介绍)。未能正确释放ByteBuf可能会导致内存泄漏,进而影响应用的性能和稳定性。本文将详细介绍如何正确地释放ByteB

Clickhouse 的性能优化实践总结

文章目录 前言性能优化的原则数据结构优化内存优化磁盘优化网络优化CPU优化查询优化数据迁移优化 前言 ClickHouse是一个性能很强的OLAP数据库,性能强是建立在专业运维之上的,需要专业运维人员依据不同的业务需求对ClickHouse进行有针对性的优化。同一批数据,在不同的业务下,查询性能可能出现两极分化。 性能优化的原则 在进行ClickHouse性能优化时,有几条

RabbitMQ实践——临时队列

临时队列是一种自动删除队列。当这个队列被创建后,如果没有消费者监听,则会一直存在,还可以不断向其发布消息。但是一旦的消费者开始监听,然后断开监听后,它就会被自动删除。 新建自动删除队列 我们创建一个名字叫queue.auto.delete的临时队列 绑定 我们直接使用默认交换器,所以不用创建新的交换器,也不用建立绑定关系。 实验 发布消息 我们在后台管理页面的默认交换器下向这个队列

国产AI算力训练大模型技术实践

   ChatGPT引领AI大模型热潮,国内外模型如雨后春笋,掀起新一轮科技浪潮。然而,国内大模型研发推广亦面临不小挑战。面对机遇与挑战,我们需保持清醒,持续推进技术创新与应用落地。 为应对挑战,我们需从战略高度全面规划大模型的研发与运营,利用我们的制度优势,集中资源攻坚克难。通过加强顶层设计,统一规划,并加大政策与资源的扶持,我们必将推动中国人工智能实现从追赶者到

Java日常探秘-从小疑问到实践智慧的编程之旅(1)

文章目录 前言一、Git中回滚操作的方式二、加密为第三方服务,需要rpc,怎么提高效率三、加解密需求,逻辑能够尽量收敛四、加解密优化五、加解密的rpc失败了处理机制六、优化MySQL查询总结 前言 所有分享的内容源于日常思考和实践,探讨Java编程中的小知识点和实用场景,加深自己对编程技巧和理解Java深层次的原理,期待发现妙招和解决实际问题的新思路。 一、Gi

大型企业网络DHCP服务器配置安装实践@FreeBSD

企业需求 需要为企业里的机器配置一台DHCP服务器。因为光猫提供DHCP服务的能力很差,多机器dhcp+多机器NAT拓扑方式机器一多就卡顿。使用一台路由器来进行子网络的dhcp和NAT服务,分担光猫负载,但是还有一部分机器需要放到光猫网络,这就需要再安装一台DHCP服务器。 技术选型 经过深思熟虑,这次我们选择使用isc-dhcp-server isc-dhcp-server介绍 isc

常见的后台实践

转自:http://onevcat.com/2014/03/common-background-practices/ 题外 objc.io 是一个非常棒的iOS进阶学习的网站,上面有很多超赞的学习资源和例子。最近我和 @方一雄,@answer-huang 和社区的另外几名小伙伴在主持做一个 objc.io 的译文整理汇总和后续翻译跟进的项目,我暂时略自我狂妄地把它叫做 objc中国(