AWS IoT 物联网系列博客
当前物联网环境中,设备类型多种多样,连接方式不一而足。为了帮助读者更好的理解并运用 AWS IoT 相关服务,我们提供了一个完整的 IoT 起步指南,包含设备的注册及上线、设备管理、用户身份及权限管理以及成本控制,通过这一系列的起步指南,也可以快速了解到 AWS IoT 服务如何与 Amazon Alexa 语音助手进行集成。AWS IoT 物联网系列共 8 篇,本篇是该系列的第一篇,其他篇链接请在本文结尾处查看。
背景介绍
在进行物联网设备连接时,每个设备都需要通过消息的形式与 IoT Core 进行数据交互。随着消息交互数量的增加,如果不对整体架构进行优化,很容易造成消息成本的指数增长,甚至是不必要的浪费。本文结合 AWS IoT Core 的相关计费方式,探讨潜在的成本优化模型,从而更好的帮助在有限预算下提升产业性能及使用体验。
AWS IoT Core 物联网服务计费模型:
AWS IoT Core 服务的计费模型主要包括四个部分,每个部分独立计费,使得成本优化的颗粒度更细。以下计费报价参考 AWS 美国东部区域的报价,详细点这里。
1. 连接性:
设备网关负责维护 IoT 解决方案中的所有互联设备的会话。AWS IoT 设备网关支持通过 MQTT、MQTT Over WebSockets 和 HTTP 实现的互联设备与 AWS 平台之间的安全、双向通信。MQTT 和 HTTP 等通信协议使公司能够利用行业标准协议,而不必使用会限制将来的互操作性的专属协议。其中连接费用与描述如下:
$0.08 每 1 百万个设备/每分钟
每个设备以全年每时每刻连接计算共 525,600 分钟(60 分钟 24 小时 365 天)计算,每个设备的连接一年的总费用为 $0.042
PING 消息包括 MQTT PINGREQ,MQTT PING RSP 消息没有费用。
2. 收发消息:
物联网设备连接时,设备的状态需要通过消息的形式与 IoT 平台进行数据交互。AWS IoT 消息代理就是这么一项发布/订阅消息的代理服务,可是与 IoT 设备相互发送和接收消息。在与 AWS IoT 通信时,客户端(设备)将经过编址的消息发送到 Sensor/temp/room1 之类的主题。进而,消息代理将消息发送到已注册接收该主题消息的所有客户端。发送消息的操作被称为发布。已注册接收该主题筛选消息的操作被称为订阅。其中消息类型包含:
设备发到 AWS IoT 服务的消息数量
AWS IoT 发到设备的消息数量
col 1 | col 2
:--------------:|:------:
每月消息数总计 | 计费
小于****10 亿条 | $1.00
10 亿条到 50 亿条 | $0.80
多于****50 亿条 | $0.70
每条消息以 5KB 长度计费,多于 5KB,等价到多个 5KB 进行费用收取,例如 8KB 的消息,按照 2 条 5KB 消息收取费用。每条消息长度最大 128KB
3. 设备影子与设备注册:
Device Shadow 服务可以为您连接到 AWS IoT 的每台设备在云中保留一个“影子”。无论该设备是否连接到 Internet,您都可以使用该影子通过 MQTT 或 HTTP 获取和设置设备的状态(调用 AWS IOT API 中的 GetThingShadow 或者 UpdateThingShadow)。每台设备的影子都由相应事物的名称唯一标识。具体请参考“适用于 AWS IoT 的 Device Shadow 服务”
设备注册的过程请参考“在 Registry 中注册设备”,注册过程使用的 API 收费详情,请参考“注册过程API与收费(REGISTRY一节)”
设备影子与设备注册费用如下:
$1.25 每 1 百万个设备影子操作
$1.25 每 1 百万个设备注册操作
数据大小以 1KB 为单位进行收费
4. 规则引擎:
收到 IoT 设备的消息之后,AWS 将对消息进行数据存储,分析等操作。这个操作由规则引擎来触发。
AWS IoT 规则由 SQL SELECT 语句、主题筛选条件和规则操作组成。设备通过将消息发布到 MQTT 主题来向 AWS IoT 发送信息。利用 SQL SELECT 语句,您可以从传入的 MQTT 消息提取数据。AWS IoT 规则的主题筛选条件用于指定一个或多个 MQTT 主题。当与主题筛选条件匹配的主题收到 MQTT 消息时,规则将被触发。借助规则操作,您可以获取从 MQTT 消息提取的信息并将其发送到其他 AWS 服务做存储与分析等。规则操作是针对 Amazon DynamoDB、AWS Lambda、Amazon SNS 和 Amazon S3 等 AWS 服务定义的。使用 Lambda 规则,您可以调用其他 AWS 服务或第三方 Web 服务。有关规则操作的完整列表,请参阅 AWS IoT 规则操作。规则引擎的触发与执行费用如下:
$0.15 每 1 百万次规划引擎触发
$0.15 每 1 百万次规划引擎执行
每条触发的消息以 5KB 为单位收取费用,多于 5KB,以多条 5KB 进行计费
费用计算案例:
1. 如下以 10,000 台设备为例,来计算 AWS IoT 服务收费,例子中每台设备操作包括:
每 5 分钟 Ping 主服务一次,全年保持活跃
约每 30 分钟发送 1 条消息,每天共发送 50 条消息,每条消息 1KB
约每 30 分钟收到 1 条消息,每天共收到 50 条消息,每条消息 1KB
每天设备影子 100 次更新,消息容量 1KB
每天触发规则引擎 100 次,执行 100 次
a. 每个设备计算过程如下:
连接时长:
全年保持活跃,连接时间共 525,600 分钟(60 分钟 24 小时 365 天)
消息数:
发 50 条,收 50 条,共 100 条,每条 1KB,按 5KB 计算
设备影子与设备注册消息:
每条消息都更新设备影子,共 100 条,每条 1KB
消息引擎触发数:
共触发 100 次,执行 100 次
b. 10,000(1 万)台设备,每台设备每月费用,每年费用,设备总年费用按表格统计如下:
由下图可以看出连接方面的费用比较固定,消息,设备影子,引擎在收费项目中所占比例比较大。那么在使用当中,如何调整这 3 个项目,来优化费用比较?
费用优化:
下面只是给出一个优化思路,真正优化方案的前提,还是以用户实际需求出发
思路 1:调整消息数据与内容:
假设设备状态在 30 分钟内改变非常少,如夜间的家用 IoT 设备如净水器、扫地机器人等。可以调整(减少)信息发送间隔,聚合信息长度,比如上例中,可以每隔 60 分钟发送一次信息,或者转为终端触发式(启动或者关闭前发送)。减少发送次数。如在设备启动后与关闭前发送消息。
丰富发送内容,对于例行消息,可以在触发式,一起发送到平台,比如过去 3 条聚合在一起,成为 1 条 3KB 信息,发送总数减少,每条容量 5KB 内不额外收费。如 IoT 设备净水器在开启时连接 3 条消息发送开水时间,滤芯状态,是否漏水等,可以合并为一条一起发送。
由于 IoT 消息多与设备相关,有一些与设备应用相关的信息数据,如设备采集的图像与视频等,可以由设备其它通道传入到云端存储进行保存,如文件保存到 AWS S3,流式数据可以通过 AWS Kinesis 客户端保存。
思路 2:关于设备影子
设备影子的主要目的是方便云端在设备离线时进行管理。所以有关此类状态信息会发给设备影子,相应的,不需要此功能的,可以不发送给影子消息主题。以节省费用。比如家用电器接入 WIFI 之后网络畅通场景。可以减少设备影子使用。
举例而言,对 100 条消息进行分类,以其中 50 条不需要设备影子为例。
思路 3:细化规则引擎逻辑,消除消息引发的规则引擎的重复判断与执行。
合并规则引擎执行,比如具有 IoT 功能的家用电器发消息到 IoT 规则引擎后,对某个符合条件消息的规则进行以下动作
本条消息保存到 AWS S3 对象级存储中
本条消息保存到 AWS DynamoDB 方便展现
本条消息触 AWS SNS 进行通知或者报警
本条消息激活 AWS Lambda 进行复杂逻辑判断,比如是否触发购买提醒等
对于上述动作,可以由最后一条 AWS Lambda 执行逻辑代码中写入前 4 条逻辑,由 Lambda 来完成消息保存到 S3,写到 DynamoDB,判断是否 SNS 通知报警等。这样触发由过去 5 条转为 1 条,节约成本。AWS Lambda 相关文档点击这里,关于 Lambda 的限制文档参考这里
以此思路优化之后,费用减少近 54%(用户请以实际使用为准)如下:
参考文档:
作者介绍:
原文链接:
评论