百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

车联网平台百万级消息吞吐架构设计|车联网系列专题 05

liuian 2025-05-16 14:47 16 浏览

前言

车辆在行驶过程中,会持续不断产生海量的消息,每一条通过车联网上报的数据都是非常珍贵的,其背后蕴藏着巨大的业务价值。因此我们构建的车辆 TSP 平台也通常需要拥有千万级主题和百万级消息吞吐能力。

传统的互联网系统很难支撑百万量级的消息吞吐。在本文中,我们将主要介绍如何针对百万级消息吞吐这一需求进行新一代车联网平台架构设计。

车联网场景消息吞吐设计的关联因素

车联网的消息分为上行下行

上行消息一般是传感器及车辆发出的告警等消息,把设备的信息发送给云端的消息平台。下行消息一般有远程控制指令集消息和消息推送,是由云端平台给车辆发送相应的指令。

在车联网消息吞吐设计中,我们需要重点考虑以下因素:

消息频率

车在行驶过程中,GPS、车载传感器等一直不停地在收集消息,为了收到实时的反馈信息,其上报接收的消息也是非常频繁的。上报频率一般在 100ms-30s 不等,所以当车辆数量达到百万量级时,平台就需要支持每秒百万级的消息吞吐。

消息包大小

整个消息包大小一般在 500B 到几十 KB 不等。当大量消息包同时上报时,需要车联网平台拥有更强的接收、发送大消息包的能力。

消息延时

车辆在行驶过程中,消息数据只能通过无线网络来进行传输。在大部分车联网场景下,对车辆的时延要求是 ms 级别。平台在满足百万级吞吐条件下,还需要保持低延时的消息传输。

Topic 数量和层级

在考虑百万级消息吞吐场景时,还需要针对消息 Topic 数量和 Topic 树层级进行规范设计。

Payload 编解码

当消息包比较大的时候,需要重点考虑消息体的封装。单纯的 JSON 封装在消息解析时不够高效,可以考虑采用 Avro、Protobuf 等编码格式进行 Payload 格式化封装。

对于百万级消息吞吐场景,基于 MQTT 客户端共享订阅消息或通过规则引擎实时写入关系型数据库的传统架构显然无法满足。

目前主流的架构选型有两种:一种是消息接入产品/服务+消息队列(Kafka、Pulsar、RabbitMQ、RocketMQ 等),另外一种是消息接入产品/服务+时序数据库(InfluxDB、TDengine、Lindorm 等)来实现。

接下来我们将基于上述的关联因素和客户案例的最佳实践,以云原生分布式物联网消息服务器 EMQX 作为消息接入层,分别介绍这两种架构的实现方式。

EMQX+Kafka 构建百万级吞吐车联网平台

架构设计

Kafka 作为主流消息队列之一,具有持久化数据存储能力,可进行持久化操作,同时可通过将数据持久化到硬盘以及 replication 防止数据丢失。后端 TSP 平台或者大数据平台可以批量订阅想要的消息。

由于 Kafka 拥有订阅发布的能力,既可以从南向接收,把上报消息缓存起来;又可以通过北向的连接,把需要发送的指令通过接口传输给前端,用作指令下发。

我们以 Kafka 为例,构建 EMQX+Kafka 百万级吞吐车联网平台:

  • 前端车机的连接与消息可通过公有云商提供的负载均衡产品用作域名转发,如果采用了 TLS/DTLS 的安全认证,可在云上建立四台 HAProxy/Nginx 服务器作为证书卸载和负载均衡使用。
  • 采用 10 台 EMQX 组成一个大集群,把一百万的消息吞吐平均分到每个节点十万消息吞吐,同时满足高可用场景需求。
  • 如有离线离线/消息缓存需求,可选用 Redis 作为存储数据库。
  • Kafka 作为总体消息队列,EMQX 把全量消息通过规则引擎,转发给后端 Kafka 集群中。
  • 后端 TSP 平台/OTA 等应用通过订阅 Kafka 的主题接收相应的消息,业务平台的控制指令和推送消息可通过 Kafka/API 的方式下发到 EMQX。

引用或分隔线

在这一方案架构中,EMQX 作为消息中间件具有如下优势,可满足该场景下的需求:

  • 支持千万级车辆连接、百万级消息吞吐能力。
  • 分布式集群架构,稳定可靠,支持动态水平扩展。
  • 强大的规则引擎和数据桥接、持久化能力,支持百万级消息吞吐处理。
  • 拥有丰富 API 与认证等系统能顺利对接。

百万吞吐场景验证

为了验证上述架构的吞吐能力,在条件允许的情况下,我们可以通过以下配置搭建百万级消息吞吐测试场景。压测工具可以选用 Benchmark Tools、JMeter 或 XMeter 测试平台。共模拟 100 万设备,每个设备分别都有自己的主题,每个设备每秒发送一次消息,持续压测 12 小时。

压测架构图如下:

性能测试部分结果呈现:

EMQX 规则引擎中可以看到每个节点速度为 10 万/秒的处理速度,10 个节点总共 100 万/秒的速度进行。

在 Kafka 中可以看到每秒 100 万的写入速度,并且一直持续存储。

EMQX+InfluxDB 构建百万级吞吐车联网平台

架构设计

采用 EMQX+ 时序数据库的架构,同样可以构建百万级消息吞吐平台。在本文我们以 InfluxDB 时序数据库为例。

InfluxDB 是一个高性能的时序数据库,被广泛应用于存储系统的监控数据、IoT 行业的实时数据等场景。它从时间维度去记录消息,具备很强写入和存储性能,适用于大数据和数据分析。分析完的数据可以提供给后台应用系统进行数据支撑。

此架构中通过 EMQX 规则引擎进行消息转发,InfluxDB 进行消息存储,对接后端大数据和分析平台,可以更方便地服务于时序分析。

  • 前端设备的消息通过云上云厂商的负载均衡产品用作域名转发和负载均衡。
  • 本次采用 1 台 EMQX 作为测试,后续需要时可以采用多节点的方式,组成相应的集群方案(测试 100 万可以部署 10 台 EMQX 集群)。
  • 如有离线离线/消息缓存需求,可选用 Redis 作为存储数据库。
  • EMQX 把全量消息通过规则引擎转发给后端 InfluxDB 进行数据持久化存储。
  • 后端大数据平台通过 InfluxDB 接收相应的消息,对其进行大数据分析,分析后再通过 API 的方式把想要的信息传输到 EMQX。

场景验证

如测试架构图中所示,XMeter 压力机模拟 10 万 MQTT 客户端向 EMQX 发起连接,新增连接速率为每秒 10000,客户端心跳间隔(Keep Alive)300 秒。所有连接成功后每个客户端每秒发送一条 QoS 为 1、Payload 为 200B 的消息,所有消息通过 HTTP InfluxDB 规则引擎桥过滤筛选并持久化发至 InfluxDB 数据库。

测试结果呈现如下:

单台 EMQX 服务器实现了单台服务器 10 万 TPS 的消息吞吐持久化到 InfluxDB 能力。参考 EMQX+Kafka 架构的测试场景,将 EMQX 的集群节点扩展到 10 台,就可以支持 100 万的 TPS 消息吞吐能力。

结语

通过本文,我们介绍了车联网场景消息吞吐设计需要考虑的因素,同时提供了两种较为主流的百万级吞吐平台架构设计方案。面对车联网场景下日益增加的数据量,希望本文能够为相关团队和开发者在车联网平台设计与开发过程中提供参考。

相关推荐

Python 中 必须掌握的 20 个核心函数——items()函数

items()是Python字典对象的方法,用于返回字典中所有键值对的视图对象。它提供了对字典完整内容的高效访问和操作。一、items()的基本用法1.1方法签名dict.items()返回:字典键...

Python字典:键值对的艺术_python字典的用法

字典(dict)是Python的核心数据结构之一,与列表同属可变序列,但采用完全不同的存储方式:定义方式:使用花括号{}(列表使用方括号[])存储结构:以键值对(key-valuepair)...

python字典中如何添加键值对_python怎么往字典里添加键

添加键值对首先定义一个空字典1>>>dic={}直接对字典中不存在的key进行赋值来添加123>>>dic['name']='zhangsan'>>...

Spring Boot @ConfigurationProperties 详解与 Nacos 配置中心集成

本文将深入探讨SpringBoot中@ConfigurationProperties的详细用法,包括其语法细节、类型转换、复合类型处理、数据校验,以及与Nacos配置中心的集成方式。通过...

Dubbo概述_dubbo工作原理和机制

什么是RPCRPC是RemoteProcedureCall的缩写翻译为:远程过程调用目标是为了实现两台(多台)计算机\服务器,互相调用方法\通信的解决方案RPC的概念主要定义了两部分内容序列化协...

再见 Feign!推荐一款微服务间调用神器,跟 SpringCloud 绝配

在微服务项目中,如果我们想实现服务间调用,一般会选择Feign。之前介绍过一款HTTP客户端工具Retrofit,配合SpringBoot非常好用!其实Retrofit不仅支持普通的HTTP调用,还能...

SpringGateway 网关_spring 网关的作用

奈非框架简介早期(2020年前)奈非提供的微服务组件和框架受到了很多开发者的欢迎这些框架和SpringCloudAlibaba的对应关系我们要知道Nacos对应Eureka都是注册中心Dubbo...

Sentinel 限流详解-Sentinel与OpenFeign服务熔断那些事

SentinelResource我们使用到过这个注解,我们需要了解的是其中两个属性:value:资源名称,必填且唯一。@SentinelResource(value="test/get&#...

超详细MPLS学习指南 手把手带你实现IP与二层网络的无缝融合

大家晚上好,我是小老虎,今天的文章有点长,但是都是干货,耐心看下去,不会让你失望的哦!随着ASIC技术的发展,路由查找速度已经不是阻碍网络发展的瓶颈。这使得MPLS在提高转发速度方面不再具备明显的优势...

Cisco 尝试配置MPLS-V.P.N从开始到放弃

本人第一次接触这个协议,所以打算分两篇进行学习和记录,本文枯燥预警,配置命令在下一篇全为定义,其也是算我毕业设计的一个小挑战。新概念重点备注为什么选择该协议IPSecVPN都属于传统VPN传统VP...

MFC -- 网络通信编程_mfc编程教程

要买东西的时候,店家常常说,你要是真心买的,还能给你便宜,你看真心就是不怎么值钱。。。----网易云热评一、创建服务端1、新建一个控制台应用程序,添加源文件server2、添加代码框架#includ...

35W快充?2TB存储?iPhone14爆料汇总,不要再漫天吹15了

iPhone14都还没发布,关于iPhone15的消息却已经漫天飞,故加紧整理了关于iPhone14目前已爆出的消息。本文将从机型、刘海、屏幕、存储、芯片、拍照、信号、机身材质、充电口、快充、配色、价...

SpringCloud Alibaba(四) - Nacos 配置中心

1、环境搭建1.1依赖<!--nacos注册中心注解@EnableDiscoveryClient--><dependency><groupI...

Nacos注册中心最全详解(图文全面总结)

Nacos注册中心是微服务的核心组件,也是大厂经常考察的内容,下面我就重点来详解Nacos注册中心@mikechen本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。微服务注册中...

网络技术领域端口号备忘录,受益匪浅 !

你好,这里是网络技术联盟站,我是瑞哥。网络端口是计算机网络中用于区分不同应用程序和服务的标识符。每个端口号都是一个16位的数字,范围从0到65535。网络端口的主要功能是帮助网络设备(如计算机和服务器...