NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

Vivint 大规模 IoT 部署的指标收集

  • 2018-04-18
  • 本文字数:1337 字

    阅读完需:约 4 分钟

看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!

Vivint 工程团队构建了自己的指标收集平台,用于收集和分析他们部署的设备上的指标。他们之所以编写自己的系统是希望能够只存储聚合数据,并集中精力分析这些数据,这是通过Rothko 项目实现的。

Vivint 是一家智能家居设备提供商。Rothko 的基本设计决策不同于 Graphite、OpenTSDB 等系统的地方在于,它存储聚合数据,而不是每项服务的数据点。他们这样做是因为他们有意识地对不存储每个数据点和仍然具备精准定位问题的能力进行了权衡。同时,用于统计分析的数据不能丢失此类分析所需要的任何关键特征。

Rothko 可以提供指标的总体分布并分析它们。鉴于没有存储单个的指标,团队是否遇到过单个设备需要诊断的情况?InfoQ 采访了 Vivint 软件工程师 Jeff Wendling ,了解更多情况以及 Rothko 的架构:

事实上,我们不会存储单个的数据点。这可以通过两个方法解决。一个是,我们可以简单地存储最小值和最大值以及数据来源,我们就是这样做的。那有助于我们发现最显著的异常。另一个是,考虑到每种设备大约每 30 分钟发送数据,我们有一个“数据流入口(firehose)”,让我们可以接入数据,筛选出特定的指标或设备等等。假如它还是发送,我们通常就可以找出是哪个设备。当然,这两个方法并不能保证我们可以确定问题,但是,我们只需要付出 20% 的努力就得到了一个廉价而便捷的 80% 的解决方案,这符合 Rothko 的原则。

通常,时间序列数据有类似标签这样的元数据,可以存储类似应用程序名或数据中心位置这样的额外属性,在分析过程中可以用它们进行逻辑分组。Vivint 的数据也是这样吗?Wendling 回复说:

我们只会向上发送一个随机的实例 ID,这目前只是一个非结构化的字节切片。理论上讲,你想发送什么,就可以向上发送什么。考虑到我们监控的设备大部分都是客户家居用的廉价设备,它们没有配备任何 GPS 设备,但是,可以通过 IP 得出颇为接近的定位。

Rothko 的架构中包含一个数据库实现,为每个指标分配数量可配置的平面文件,使用 mmap 写入和读取。它还包含一个基于 Graphite 有线协议的指标接收实现,一个近似的分位数略图用于聚合数据,一些 API 端点用于检索数据、渲染图像,以及一个前端 UI,方便人们使用。数据可以从设备安全地发送到Rothko 端点。

Wendling 说,“我们的设计一直保持可插拔”,因为“有许多相互矛盾的计算标准和不同的工作负载。例如,在内部,我们就有自己的插件,用于从我们自定义的有线协议中读取指标。我们的设计让插件编写很容易,而且使用一个 toml 文件即可完成配置。甚至是日志和进程内部指标收集都可以轻松替换成任何你想要的东西。”

按照设计,Rothko 用来处理大量实例的少数指标。目前,它处理大约 5 万个指标,使用 500MB 内存在大约 50 秒内完成磁盘刷新。据 Wendling 介绍,刷新每 10 分钟一次,因此“应该很容易处理 50 万个指标”。它部署在单个实例上,目前尚没有实现像横向切片这样的扩展策略的需求。

有人问,Vivint 的团队是否也使用了什么预警机制,Wendling 答复说,他们不那样做,而是要更多地关注控制面板。Rothko 是用 Go 编写的开源项目,托管在Github 上

查看英文原文: Metrics Collection from Large Scale IoT Deployments at Vivint

2018-04-18 19:00877
用户头像

发布了 1008 篇内容, 共 374.4 次阅读, 收获喜欢 341 次。

关注

评论

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

千万级学生管理系统考试试卷存储方案

Geek_36cc7c

千万级学生管理系统的考试试卷存储方案

Geek_8d5fe5

「架构实战营」

Java 中线程池的 7 种创建方式!

王磊

Java 面试

Java培训高并发之线程的6种状态

@零度

线程 JAVA开发 状态

MySQL 15条常用的SQL知识(18/100)

hackstoic

MySQL

第四课作业

浪飞

构建 Go 应用 docker 镜像的十八种姿势

万俊峰Kevin

微服务 web开发 go-zero docker image Go 语言

CNCF Serverless工作流社区携手华为云FunctionGraph,开拓Serverless编排新时代

华为云开发者联盟

json Serverless 华为云 FunctionGraph CNCF Serverless Workflow

分布式数据库排序及优化

vivo互联网技术

分布式数据库

如何在windows下成功的编译和安装python组件hyperscan

华为云开发者联盟

正则表达式 windows hyperscan python组件 正则表达式引擎

测性能,拿周边|OceanBase 3.1.2版本邀你来玩

OceanBase 数据库

oceanbase OceanBase 开源 OceanBase 社区版

3月技术专题月火热开启!快来一睹为快!

用友BIP

用友 用友iuap

峰会报名|从金融行业技术选型,看 RocketMQ 如何应对严苛挑战

阿里巴巴云原生

阿里云 RocketMQ 云原生 消息队列 峰会报名

工作想法小计(4):2/28 - 3/4

非晓为骁

个人成长 工作 细节 工作想法

强大的JSON.stringify,你真的会使用吗?

战场小包

JavaScript 前端 3月月更

列存Delta表是个什么东东

华为云开发者联盟

存储 GaussDB(DWS) 列存表 delta表

前端实现word、excel、pdf、ppt、mp4、图片、文本等文件的预览

CRMEB

模块八-作业二

hunk

云原生训练营

最佳实践:Kubernetes 集群中 DNS 故障的可观测性与根因诊断

阿里巴巴云原生

阿里云 Kubernetes 云原生 服务器 DNS

几种如何判断环境是否连上网方法!推荐最后一种

华为云开发者联盟

网络 nodejs ipv4 上网 网络接口

数据分析不能落地?快来围观,学会数据分析应用,一起升职加薪!

博文视点Broadview

ScrollView 和 RelativeLayout两个布局技巧

逆锋起笔

android xml 3月月更 android布局

为什么说程序猿也要有产品思维

慕枫技术笔记

技术思维 内容合集 3月月更

安全大讲堂 | 2022产业趋势洞察:网络安全的下一个十年

腾讯安全云鼎实验室

网络安全 未来发展

千万学生管理系统之考试模块存储架构设计

随欣所遇

架构训练营5期

在阿里巴巴,我们如何先于用户发现和定位 Kubernetes 集群问题?

阿里巴巴云原生

阿里云 云原生 分享 KubeProbe

Python二分查找,字符串模板,textwrap模块,每天写写Python自然就会了,每日Python第2天

梦想橡皮擦

3月月更

一图了解龙蜥社区 2 月运营大事件

OpenAnolis小助手

Linux 开源 操作系统 运营

【模块四】千万级学生管理系统考试试卷存储方案设计

yhjhero

#架构训练营

【BBC learningenglish】with Tango

IT蜗壳-Tango

3月月更

uni-app技术分享| uni-app常见问题(二)

anyRTC开发者

uni-app 音视频 WebRTC 移动开发 视频通话

Vivint大规模IoT部署的指标收集_DevOps & 平台工程_Hrishikesh Barua_InfoQ精选文章