写点什么

服务器数量从 21 台降至 3 台,TDengine 在跨越速运集团的落地实践

  • 2022-01-05
  • 本文字数:2374 字

    阅读完需:约 8 分钟

服务器数量从21台降至3台,TDengine在跨越速运集团的落地实践

跨越速运集团有限公司创建于 2007 年。拥有“国家 AAAAA 级物流企业”、“国家级高新技术企业”、“中国物流行业 30 强优秀品牌”、“中国电商物流行业知名品牌”、“广东省诚信物流企业”等荣誉称号。在胡润研究院发布的《2018 Q3 胡润大中华区独角兽指数》《2019 一季度胡润大中华区独角兽指数》榜单中,跨越速运两次上榜,估值约 200 亿元,与菜鸟网络、京东物流、达达-京东到家等企业入选中国物流服务行业独角兽企业。作为一家物流企业,如何高效地记录和处理车辆的轨迹信息,对于整体的交付效率至关重要。

项目背景


数年前车辆轨迹定位存储引擎项目成立,跨越速运集团购置的数万台车辆经过车载定位设备上报信息到 GPS-AGENT 网关,服务解析报文下发到 Apache Kafka 消息中间件,再通过应用将历史位置定位信息写入 Apache HBase,最新车辆位置信息写入 Redis,以此提供给业务服务进行对车辆的实时监控与分析。


原来的业务架构如下图所示:



在原有系统的实际运行过程中,我们也遇到了很多痛点。比如说,因为数据保存在 HBase 中,当我们需要查询较大跨度的时间内的数据时,系统的性能会显著下降。


具体可以总结如下:



于是我们开始思考,该如何改进系统来解决这些痛点呢?

项目演化


在开始新的技术选型之前,我们重新对业务场景进行了梳理,可以用下面这张图来概括。



我们依次来看一下:


(1)数据不更新不删除:轨迹信息是按照车辆实际信息的时间戳上报,不存在更新和删除的需求。只需要按照某个时限来保存。


(2)无需传统数据库的事务处理:因为数据不需要更新,也就不需要像传统数据库那样用事务来保证更新安全。


(3)流量平稳,一段时间内车辆的数量和上报的频率都可以确定。


(4)数据的查询分析基于时间段和空间区域,这跟业务需求有关。


(5)除存储、查询操作外,还需要根据业务的实际需求进行各种统计和实时计算等操作。


(6)数据量巨大,一天采集的数据超过 5000 万条,并且会随业务规模的不断增长而增长。

技术选型


通过以上分析可以看到,车辆轨迹是典型的时间序列数据,所以用专门的时序数据库来处理会比较高效。在调研阶段,我们对比了几款比较有代表性的时序数据库产品。



综合对比后的结果如下:


  • InfluxDB 集群版本收费,硬件成本也相对较高;

  • CTSDB 腾讯云时序数据库,内存用量高,费用成本相对较高;

  • OpenTSDB 底层基座还是 HBase ,引入并不能使架构变得简单;

  • TDengine 集群功能开源,具有典型的分布式数据库特征,压缩比例也非常高。


通过对比,我们认为 TDengine 的很多优秀特性能够满足我们的业务场景。



于是我们基于 TDengine 进行了前期调研和演练。具体包括如下几个方面:



我们从多个方面对 TDengine 的功能和性能进行了全方位的测试,功能完全能够满足我们的需求,性能、压缩率给我们带来了很大的惊喜。


在完成基本的功能和性能测试之后,我们又结合业务进行了场景测试和演练,主要包含如下几方面的工作:


  • 数据在写入时候对集群扩缩容

  • cacheLast 的应用是否有效

  • 统计聚合分析 interval,interp 的一些业务场景应用

  • update 参数的覆盖场景

  • 常用业务的查询语句,同等查询范围的数据对比

深入理解 TDengine


在实际落地 TDengine 之前,我们也深入研究了这个系统的架构、设计等各方面特性。这里也简单分享一下 TDengine 的核心概念。

TDengine 架构


如果是第一次接触 TDengine,可以看一下如下这张图,其中的 dnode 就是实际存储数据的物理节点,dnode 框中的 V2、V7 等小框叫 vnode,也就是虚拟节点,m0、m1 就是元数据管理节点,存储一些集群信息与表信息,熟悉分布式中间件的朋友肯定能直观地感受到 TDengine 具有非常典型的分布式数据库特征。

超级表



TDengine 有个超级表的概念,例如在跨越速运集团业务场景下,所有的车辆变成一张张子表,所有的子表会继承一张叫超级表的父表,超级表定义子表的结构规范,不存储实际物理数据,我们可以通过只查超级表做数据的统计分析查询,而不用一个个子表去汇总。

高压缩特点


TDengine 采用了二阶段压缩策略,一阶段压缩会使用 delta-delta 编码、simple 8B 方法、zig-zag 编码、LZ4 等算法,二阶段压缩会采用 LZ4 算法。一阶段压缩会针对每个数据类型做特定的算法压缩,二阶段再做一次通用压缩,前提是在建库的时候将参数 comp 设置为 2 。

引入 TDengine 之后的架构


在进行了充分的测试和验证之后,我们将 TDengine 引入到了我们的系统之中。新的系统架构如下图所示:


从架构图中可以看到,车载数据依然通过 GPS-AGENT 网关进行报文解析后发送到 Apache Kafka 中,再通过应用多开启一个 Kafka group 同时消费消息,以此达到两端数据的一致。


业务系统最新车辆位置信息不再通过 Redis 读取,这样就简化了架构。查询只读取 TDengine,HBase 在一定的时间后会下线。

优化效果


引入 TDengine 之后,从各项指标来看,数据非常亮眼。

压缩率


如图我们看到一个 5 万行的表,每行在 600 字节以上,压缩后的磁盘 size 是 1665KB,压缩率高达 1%。接下来我们看个百万行的子表。



它实际占用磁盘大小为 7839KB。我们的压缩效果比 TDengine 官方的各种测试还要好很多,这应该与我们业务数据重复度相对较高有一定关系。

日增量


我们现在的业务日写入量超过 5000 万,对 TDengine 来说日增的磁盘大小基本维持在单台 1.4G 左右。

各项指标的整体对比


下图是我们实际落地前后各项指标的对比。



下图是数据增量的对比。



从对比可以看出,TDengine 确实极大降低了我们的各项成本。

问题和建议


一个相对较新的系统,在使用过程中难免会遇到一些问题,我们也和 TDengine 的研发团队一起去定位、解决。


比如下面这个就是我们在使用 JDBC 过程中遇到的问题。我们也给官方提 PR 修复了。这就是开源的魅力吧,大家都可以参与进来。



有两个地方,我们也希望 TDengine 能进一步优化:


  1. 2.3.0.x 以下的监控功能还比较简单,我们期待后期的版本能提供更强更细致的监控。我们注意到新发布的版本引入了一个叫 TDinsight 的监控工具,我们也会尽快尝试一下。

  2. 目前的 interval 函数还不支持按业务列 group by 普通列,后续希望也能够得到支持。

2022-01-05 11:073416

评论

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

SpringCloudRPC远程调用核心原理:Feign远程调用的执行流程

Java 程序员 后端

Spring事务与事务抽象,java多线程面试总结

Java 程序员 后端

Spring全家桶+高并发编程+Netty(1),Java者升职加薪的8项技能

Java 程序员 后端

Spring常用注解(绝对经典),非科班面试之旅

Java 程序员 后端

Spring框架底层原理-IoC,java架构师指南pdf下载

Java 程序员 后端

低代码开发平台是什么意思?低代码开发平台优势!

低代码小观

低代码 开发 开发工具 开发平台 企业开发系统

OpenHarmony LiteOS C-SKY指令集移植指南

华为云开发者联盟

LiteOS 指令集 OpenHarmony C-SKY 移植

SpringDataJPA的Audit功能,审计数据库的变更,springmvc源码分析pdf百度云

Java 程序员 后端

Spring之防止连接泄露的处理办法,Java开发必会技术

Java 程序员 后端

Spring源码解析(二)AOP,java基础课程百度云

Java 程序员 后端

Spring的XML解析原理,这一次全搞懂再走!,springmybatis整合原理

Java 程序员 后端

Spring框架(四)SpringMVC基础,2021最新大厂Java面经

Java 程序员 后端

Spring注解驱动,java面试项目中遇到的问题

Java 程序员 后端

谈谈对Dapr的一些感想

LLLLimbo

架构 分布式 微服务 云原生 dapr

Spring学习--面向抽象编程(模拟Spring的简单实现),java架构师教学视频全百度云

Java 程序员 后端

使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数

汪子熙

云平台 SAP abap 11月日更

SpringSecurity安全控件使用指南,建议细读

Java 程序员 后端

Spring中使用的设计模式,mybatis自动映射原理

Java 程序员 后端

最佳实践|Apache Pulsar 在华为云物联网之旅

Apache Pulsar

云原生 消息中间件 Apache Pulsar 消息系统 用户案例 华为云物联网

SpringCloudRPC调用核心原理:RxJava响应式编程框架,聚合操作符

Java 程序员 后端

SpringDataJPA之快速入门,arm架构v8和V9区别

Java 程序员 后端

从挣扎突破到英雄联盟!中国SaaS头部企业阵营渐显

海比研究院

SaaS平台

springcloud 高可用的服务注册中心及更高可用,java面试设计题

Java 程序员 后端

springcloud(三)网关zuul,2021Java进阶学习资料

Java 程序员 后端

SpringIOC中复杂属性如何“巧妙”赋值,java五年工作经验面试题

Java 程序员 后端

Spring全家桶+高并发编程+Netty,mybatis面试题大全

Java 程序员 后端

Spring事务传播属性(面试),分布式中间件技术实战钟林森

Java 程序员 后端

云图说|玩转华为HiLens之端云协同AI开发

华为云开发者联盟

华为云 云图说 华为HiLens 端云协同

Spring常用API:Spring类及相关面试点,rabbitmq分布式事务实现原理

Java 程序员 后端

Spring核心——Bean的定义与控制,linuxshell脚本教程

Java 程序员 后端

Spring源码学习~循环依赖(面试必问系列,java最新框架技术

Java 程序员 后端

服务器数量从21台降至3台,TDengine在跨越速运集团的落地实践_大数据_周美华_InfoQ精选文章