首页 文章 精选 留言 我的

精选列表

搜索[系统],共10000篇文章
优秀的个人博客,低调大师

TDengine 在蔚来能源系统的落地实践

一、项目背景 为了给用户提供更好的补能体验,蔚来能源在加电基础设施上进行了大量的投入,截止 2021 年底,已经在全国各地布局了换电站 777 座,超充桩 3,404 根,目充桩 3,461 根,为用户安装家充桩 96,000+ 根。 为了对设备进行更高效的管理,需要将设备采集数据上报至云端进行存储,并提供实时数据查询、历史数据查询等业务服务,用来做设备监控和分析。 现状 在业务诞生之初,我们用作数据存储的选型是 MySQL + HBase,MySQL 存储设备最新实时数据,HBase存储设备原始数据,大体架构如下: 之所以选择 HBase,有以下几个理由: HBase 在大数据领域应用较为广泛,适合存储海量数据,写入性能好 支持动态添加列,非常方便兼容数据模型变化 底层是键值对存储,数据可以比较稀疏,空数据不占存储空间 团队 HBase 技术使用相对较为成熟 痛点 初期因为设备不多,数据量不大,加上查询场景单一,HBase 表现不错,可以满足业务需求。 随着换电站和超充站等设备在全国的快速布局,设备数量持续增长,积累的数据量越来越多,长时间跨度数据查询效率出现瓶颈,再加上查询场景不断丰富,HBase 已经无法满足当前业务需要。问题主要体现在以下几点: HBase 只支持 Rowkey 索引,有很大的局限性,一些查询场景依赖 Rowkey 设计合理,如果业务调整,无法兼容 可以引入二级索引解决,单独维护查询条件与 Rowkey 关系,查询时先查到 Rowkey 再查数据,不管是引入中间件还是自己实现,都会增加整体架构和实现复杂度 HBase 单表随着数据量增大,会触发自动分区,导致写入性能下降,需要通过建表时指定预分区来解决,调整起来很麻烦,需要重新建表生效 HBase 不适用于大范围扫描查询,性能比较差 HBase 不支持聚合查询,大跨度时间范围查询数据量太大,图表无法渲染 HBase 部署需要依赖 ZooKeeper,运维成本高 二、落地方案 技术选型 为了解决这些痛点,我们将目光投向时下流行并且更适合物联网领域的时序数据库。经过调研,对比多个技术选型,最终决定使用 TDengine 代替 HBase 作为设备原始数据存储。 在选型时我们考虑过 OpenTSDB,也是一款优秀的时序数据库产品,在部门其他业务中已经有过比较成熟的使用,能解决一部分遇到的痛点: OpenTSDB 在 HBase 基础上做了优化,包括存储元数据映射和压缩机制,使数据存储占用空间大大降低 OpenTSDB 提供数据聚合查询功能,可以支持更大时间跨度查询的业务需求 但是 OpenTSDB 底层还是基于 HBase 的,HBase 存在的一些问题,OpenTSDB 依然会有,并且架构并没有变简单,没有摆脱 HBase 的依赖。 经过对比,我们决定尝试一下 TDengine,其官方给出的性能指标,单节点部署情况下可以达到 14810 k/s 读取,和 880k/s 写入,同时 TDengine 具备的一些特点能很好地解决我们遇到的痛点: 引入超级表概念对应设备类型,对每个设备创建子表继承超级表,通常相同设备类型的设备数据模型一定相同,通过超级表管理 schema 直接对子表生效很方便,同时对每个设备建表可以很好地做数据隔离,同时避免互相影响 采用多级存储,不同时间的数据使用不同存储介质,新数据经常访问存 SSD 保证效率,老数据存 HDD,节约成本 不依赖任何第三方软件,集群安装部署方便,支持灵活扩容 提供多种聚合函数,支持对数据的聚合查询 前期测试 我们使用 TDengine 做了一些简单的性能测试,评估使用 TDengine 是否能满足我们的业务需求。 测试准备 采用单节点部署 8 核 32GB,500GB 存储 采用默认配置 采用RESTful API方式写入数据 测试场景 模拟 10,000 个设备上报数据,消息并发约 4k 左右。 定义超级表如下 SQL -- 代码示例,非真实代码 CREATE STABLE device_data_point_0 (ts timestamp, d1 nchar(64), d2 nchar(64), ...) TAGS (t1 binary(64)); 最初采用每条上报消息进行一次数据写入,性能无法满足,而将单条消息写入改为批量写入,积累一批数据(100 条)后,再批量写入一次,性能可以支撑 测试结论 采用批量写入数据方式,调整合适的单批次数据量大小,使用单机部署(8 核 32 GB,500 GB 存储)默认配置的 TDengine 服务,RESTful API写入方式,在 4k 并发流量下写入没有问题,同时消费积压数据时峰值达到 7 k/s,因为单条消息包含信息量太大,实际处理中会拆分为 30 条写入 TDengine,所以实际写入 QPS 为 210 k/s,比满足同样数据流量的 HBase 集群规模要小不少,可以节省成本,再加上 TDengine 本身部署不依赖其他三方软件,也可以同时节省运维成本。 迁移方案 经过测试,我们决定先对部分设备应用 TDengine 时序数据库替代 HBase,同时需要考虑如何在不影响业务功能的情况下平滑过渡并完成迁移。 数据双写 因为目前没有现成的工具可以直接把数据从 HBase 迁移到 TDengine,如果自己开发一个工具做这件事情,开发成本太高,而且可能是一次性的。 考虑到不想浪费开发资源,同时我们需要一个过渡期,期间如果 TDengine 出现问题可以迅速切换回 HBase,不影响业务,所以不能马上把 HBase 废掉,所以我们决定先实现 TDengine 写入,并且暂时保持 HBase 和 TDengine 两个数据库双写。 写入方式 根据前期测试结果,我们选择直接采用批量方式写入数据: 并行处理不同设备类型数据 消费设备上报数据放入队列 当队列长度达到n或超过等待时间t,从队列中取出数据批量写入 经过压测,在n = 1,000,t = 500 ms 情况下,单次写入耗时基本在 10 ms 以内,意味着我们可以支持单个设备类型每秒上万的并发写入,并且还有进一步的优化提升空间。 查询切换 为了保证迁移过程顺利,并且迁移前后不会出现数据不完整的情况,我们做了一个查询开关: 配置 TDengine 功能上线时间 判断查询请求时间范围与配置时间大小,决定查 HBase 还是 TDengine 过渡期结束后,停止 HBase 服务 迁移后架构变为如下所示: 三、实际效果 目前我们已将线上部分设备的数据切换到 TDengine 集群,上线后集群表现稳定。 对比之前使用 HBase: 查询速度提升明显,从使用 HBase 查询单设备 24 小时数据的秒级返回,到使用 TDengine 查询查询相同数据的毫秒级返回 每天增量数据占用的存储空间相当于原来使用 HBase 时的 50% 集群计算资源成本相比使用 HBase 节省超过 60% 四、总结 总体上说,TDengine 读写性能表现很好,在满足我们业务需求的同时,极大地节省了计算资源和运维成本,目前尝试 TDengine 的业务场景还比较简单,只是单纯的数据写入和时间范围查询,后续可以结合 TDengine 更多进阶功能探索其他可以落地的业务场景 使用上还有一些问题待解决,比如 schema 调整在应用发版过程中对数据写入的影响,产生预期外的写入异常,以及异常定义不明确,无法快速定位问题,尤其是跟 schema 相关数据写入问题 监控方面目前支持的监控指标较少,这个问题据说会在后续版本丰富 数据迁移方面,目前官方支持工具还比较少,不能比较方便的把数据从其他存储引擎迁移到 TDengine,需要进行额外开发 关于作者 李鹏飞,蔚来汽车能源数字化产品开发部高级工程师,目前负责能源物联平台开发。

优秀的个人博客,低调大师

Grafana 8.4.4 发布,系统指标监控与分析平台

Grafana 是一个用于监控和可观察性的开源平台,可视化来自 Prometheus、Loki、Elasticsearch、InfluxDB、Postgres 等多个来源的指标、日志等。 Grafana 8.4.4 正式发布,更新内容如下: 功能和改进 Loki:将 unpack 添加到自动完成建议 (#44623)。#46573 Plugins:允许将函数和类组件用于应用程序插件。#46148 TimeSeries:为图形面板的 transform series override 添加迁移。#46577 TimeSeries:在进行负 Y 转换时保留空值/未定义值。#46584 Bug 修复 CloudWatch:使用 aws-sdk-go 的默认 http 客户端。#46370 Dashboards:修复了按行重复且不刷新的问题。#46565 Gauge:当数据链接存在且方向为水平时修复了 blank viz。#46335 Search:使用 postgres 时正确排序结果。#46466 TagsInput:修复标签删除按钮的可访问性问题。#46254 TextPanel:在 markdown 被渲染成 html 后进行清理。#46166 更新说明:https://github.com/grafana/grafana/releases/tag/v8.4.4

优秀的个人博客,低调大师

Loggie —— 云原生日志采集/处理系统

Loggie是一个基于Golang的轻量级、高性能、云原生日志采集Agent和中转处理Aggregator,支持多Pipeline和组件热插拔,提供了: 一栈式日志解决方案:同时支持日志中转、过滤、解析、切分、日志报警等 云原生的日志形态:快速便捷的容器日志采集方式,原生的Kubernetes CRD动态配置下发 生产级的特性:基于长期的大规模运维经验,形成了全方位的可观测性、快速排障、异常预警、自动化运维能力 架构 Highlights 可扩展、热插拔:配置不同的Source/Interceptor/Sink,拥有中转、过滤、解析、切分、日志报警等能力,可使用Golang快速自研插件 强隔离:多Pipeline设计,减少互相干扰,可同时发送多个不同数据源 轻量级、高性能:基于Golang,极少的资源占用,强大的吞吐性能 可靠性保障:完善的日志可观测性,原生Prometheus metrics支持,还有限流、背压等Interceptor 云原生:配置中心集成Kubernetes,创建CRD实例即可采集容器日志 不仅仅是日志:数据流基于Source/Interceptor/Sink模型,可扩展更多的可能性

优秀的个人博客,低调大师

Grafana 8.4.2 发布,系统指标监控与分析平台

Grafana 是一个用于监控和可观察性的开源平台,可视化来自 Prometheus、Loki、Elasticsearch、InfluxDB、Postgres 等多个来源的指标、日志等。 Grafana 8.4.2 正式发布,更新内容如下: 功能和改进 OAuth:增加设置以跳过外部用户的组织分配 Tracing:在 trace to logs 的设置中添加选项,将标签名称映射到日志标签名称 错误修复 Explore:修复了使用日志面板时关闭分割窗格的问题 更多详情可查看:https://github.com/grafana/grafana/releases

优秀的个人博客,低调大师

Grafana 8.4.1 发布,系统指标监控与分析平台

Grafana 8.4.1现已发布。Grafana 是一个功能丰富的指标标准仪表板和图形编辑器,用于分析和监控 Graphite、Elasticsearch、OpenTSDB、Prometheus 和 InfluxDB。 该版本具体更新内容如下: Features and enhancements Cloudwatch:添加对 AWS/PrivateLink* 指标和维度的支持。#45515 Configuration:添加自定义 okta 登录按钮名称和图标的功能。#44079 Tempo:使用 AsyncSelect 组件切换 Select 以在 Tempo Search 中获取加载状态。#45110 Bug 修复 Alerting:通过使 send_alerts_to 字段可为空来修复迁移。#45572 更新说明:https://github.com/grafana/grafana/releases/tag/v8.4.1

优秀的个人博客,低调大师

Grafana 8.4.0 发布,系统指标监控与分析平台

Grafana 8.4.0现已发布。Grafana 是一个功能丰富的指标标准仪表板和图形编辑器,用于分析和监控 Graphite、Elasticsearch、OpenTSDB、Prometheus 和 InfluxDB。 该版本具体更新内容如下: Features and enhancements API:使用 go-swagger 从源代码中提取 OpenAPI 规范。#40528 AccessControl:当用户没有权限时,禁用用户删除和用户更新角色。#43429 AccessControl:为团队提供服务。#43767 API:添加使用情况统计预览端点。#43899 Alerting:将调度程序中的慢查询移动到另一个 goroutine。#44423 Alerting:使用 time.Ticker 代替 ngalert 中的 alerting.Ticker。#44395 Alerting:向警报面板添加自定义分组。#44559 Analytics:将用户 ID 跟踪添加到谷歌分析。#42763 Angular:将 AngularJS 插件支持弃用计划添加到文档站点。#45149 Auth:为 auth.jwt 实现 auto_sign_up。#43502 Azure Monitor Logs:在资源选择器中按名称对订阅进行排序。#45228 Chore:在 Grafana 中实现 OpenTelemetry。#42674 Cloud Monitoring:将指标类型添加到指标下拉选项中。#43268 CloudWatch:添加 Data Lifecycle Manager 指标和维度。#43310 CloudWatch:添加缺少的 Elasticache 主机级指标。#43455 CloudWatch:添加所有 ElastiCache Redis 指标。#43336 CloudWatch:添加新的 AWS/ES 指标。#43034 Cloudwatch:为“Metric Search”添加语法突出显示和自动完成功能。#43985 Explore:支持 Prometheus 数据源的示例链接的自定义显示标签。#42732 Playlists:启用共享播放列表的直接链接。#44161 SQLStore:防止并发迁移。#44101 Setting:支持使用 bool 来配置功能切换,而不仅仅是传递数组。#43326 TimeSeries:添加对负 Y 和恒定变换的支持。#44774 Transformations:将“JSON”字段类型添加到 ConvertFieldTypeTransformer。#42624 Bug 修复 Auth:保证签名 SigV4 headers 的一致性。#45054 CloudWatch:修复 Namespace 变化时 MetricName resetting。#44165 Cloudwatch:修复了在 Metric Query 中更改 namespace 时重置 metric name 的问题。#44612 Instrumentation:修复验证失败的 HTTP 请求检测。#44234 LibraryPanels:防止长描述和名称遮挡删除按钮。#45190 OAuth:如果 header包含非字符串值,则修复 IDtoken的解析。#44159 Panel Edit:可视化搜索现在可以正确使用特殊字符。#45137 Provisioning:在配置多个组织时修复重复验证。#44151 QueryField:修复插入建议时撤消历史记录的问题(#28656)。#39114 TablePanel:如果有多个框架和 override active,不要在列前加上框架名称。#45174 Deprecations AngularJS 插件支持现在处于弃用状态,计划版本 10(2023 年)中进行删除。更多详细信息可查看文章。Issue#45149 详情可查看更新说明:https://github.com/grafana/grafana/releases/tag/v8.4.0

优秀的个人博客,低调大师

Grafana 8.3.6 发布,系统指标监控与分析平台

Grafana 8.3.6 现已发布。Grafana 是一个功能丰富的指标标准仪表板和图形编辑器,用于分析和监控 Graphite、Elasticsearch、OpenTSDB、Prometheus 和 InfluxDB。 该版本具体更新内容如下: 新特性&改进 Cloud Monitoring:列出标签时减少请求大小。#44365 Explore: 在表格中显示标量数据结果(此前是在图标中)。 #44362 Snapshots: 更新外部快照服务器的默认 URL。 #44563 Table: 使页脚不重叠表内容。#44210 Tempo: 向服务图数据链添加请求直方图。 #44671 Tempo: 将时间范围添加到功能标志后面的速度搜索查询 #43811 Tempo: 更改查询类型时,自动清除当前查询结果。 #44390 Tempo: 将搜索结果中的“开始时间”显示为相对时间。 #44568 Bug 修复 Cloud Monitoring: 修复查询编辑器中的资源标签. #44550 Cursor sync: 应用设置时不保存仪表板。 #44270 LibraryPanels: 修复了清理库面板时出现的错误 #45033 Logs Panel: 修复没有时区的字符串日期的时间戳解析 #44664 Prometheus: 修复一些使用 reduce/math 操作的警告查询. #44380 TablePanel: 修复临时变量无法在默认数据源上工作的问题。 #44314 Text Panel: 修复元素的对齐方式。 #44313 Variables: 修复了自引用链接中常量变量的问题。 #44631 更新公告:https://github.com/grafana/grafana/releases/tag/v8.3.6

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册