原文:Should You Use Serverless Architecture for Your IoT Solution?
翻译:安翔
审校:苏宓
我们通过从零开始构建一个IoT解决方案的实验,发现了一些有价值的信息,分享如下。
当前我们生活在一个前所未有的行业中断的时代,这主要由技术的高速发展造成,特别是物联网(IoT)领域。
物联网有助于将传统行业转变为一个数据驱动的模型,同时它带来了巨大的新机遇。企业通过技术创新转变业务模式从而提供快速的IoT适应性;制造商提供成本低廉但是品质高端的物联网设备和平台,以实现设备的集成和管理。
目前市面上有很多各具优缺点的工具和框架,从中做出正确的选择不太容易。我们认为,数字物联网的应用应当朝着灵活、可靠和具有成本优势的平台方向发展,对基础设施、软件、知识和员工的投入应当尽量减少。
Serverless 架构试验
为了证明这一概念,我们决定从零开始构建一个IoT解决方案,使用近乎为零的基础设施和维护成本以及很少的操作费用。
这种构想与一些云端服务的功能不谋而合,比如即付即用、平台即服务(PaaS)、软件即服务(SaaS) 、以及serverless。
设置
我们采用 Amazon Web Services(AWS)云服务来实现这一概念。我们的项目创建设备模拟器并实时报告遥测信息,并可以通过 API 实时访问这些信息。
AWS IoT 平台是一个功能强大的 IoT 框架。它支持 MQTT - 使用最广泛的通信协议之一。此外,我们还考虑了价格和维护成本,最终才选择 AWS 服务用以对数据的持久化和处理。
通过研究多个不同的架构方法和各种服务,我们发现 AWS 包含如下组件:
- AWS IoT - 用于数据摄取和设备管理
- DynamoDB - 提供文件存储和持续数据读取
- AWS Lambda - serverless 数据处理
- S3 - 用作静态网站托管的块存储
- 网关 API - 提供 REST 方式数据访问接口
数据流向图
我们的试验项目的总体数据流程如下:
- 设备向 AWS IoT 发送少量数据(5秒发送一次)
- AWS IoT 将数据存储在 DynamoDB 表中
- Lambda 函数每分钟触发一次进行数据分析并将结果存回 DynamoDB
- API 网关通过 REST API 将数据从 DynamoDB 公开出来
- 静态 HTML 网站托管在 S3 上,通过 REST API 来显示实时数据图表和分析结果
第2点可能看起来有点傻,因为你可以认为 DynamoDB 不是存储原始时间序列数据的最佳选择。然而,它非常适合用于少量设备的演示。
我们还考虑使用 Firehose 作为 IoT 到 S3 或 Reshift 的交付流,并使用 EMR 集群进行数据处理,但是对于一个微型演示项目来说它们显得有点笨重。
AWS 架构设置了以下关键参数:
- 如果你的设备没有报告任何数据,那么 AWS 的使用则是免费的。根据 Amazon 的免费层级,少量的设备可以免费使用。
- 由于各个组件提供*选择的构建方式,因此其扩展性很高并且开箱即用。
- 傻瓜式启动。你只需使用JavaScript、Python 或 Java等主流的编程语言编写你的程序逻辑并定义规则代码即可运行,不需要对平台有太多的了解。
分析与计算
假设你的后台程序一分钟只需要处理几个请求,这意味着大部分时间 CPU 都是空闲的。如果你不想为空闲时间付费,那么 serverless 架构就很适合你,它能够确保你不会为多余的空闲时间付费。
假设你有10,000个设备,它们每15分钟上报一次数据且数据量很小,那么这些设备在一个月内(大约730小时)总共产生大约2,920万次请求。
AWS IoT 每1M数据量的请求费用为5美元,DynamoDB 一秒内每10个 put 请求或者50个 get 请求收取0.0065美元。
如果我们仅通过 AWS IoT 接收数据,每月需支付146美元;如果还需要将这些数据存储在容量最小的 DynamoDB 中,则需要再支付14美元。我们每月的总账单为160美元,相当于每个设备每月花费0.02美元,每个请求花费0.000005美元。虽然我们并没有把lambda、storage和API 网关的价格标出来,但实际上它们已经包含在账单之中,它们只占账单中非常小的一小部分,因此我们并没有详细列出它们的价格。
一个具有数千个连接设备的 IoT 解决方案每个月花费不到两百美元,这是非常划算的。但是,让我们想象一下,如果你有数千个设备,每个设备每秒钟(而不是每15分钟)报告一次关键数据,你需要为 serverless 服务支付的费用是多少呢?
实际上,一万台设备每秒发送一个消息的话 - 每月支付费用将超过13.6万美元,十万台设备则需支付136万美元。每台设备的每月成本将增加到13.61美元。
看到这里,你还会考虑为你的 IoT 解决方案构建 serverless 服务吗?
评估 IoT 方案的优缺点
上面的数据表明,优化你的请求率将几乎线性地减少你每月的帐单。
这使我们必须考虑另外一个重要指标 - 总成本。超出了一个阈值之后,serverless 服务将会变得不划算和低效。
例如,传统的架构的实施成本不会如此显着地依赖于设备数量或者每秒的请求数量,而是被其他额外的费用消耗掉。该成本可以通过开源解决方案来降低。
毫无疑问,serverless 架构也有很多优点:
- 将资本支出转化为运营支出,从而降低成本
- 你不必考虑内部系统的运维
- 降低开发和部署成本并缩短开发时间(更快的上市时间)
- 它具有可扩展性和容错性
需要考虑的第一个因素是满足你的项目需求。如果你不在乎云锁定,那么 serverless 方法将是很合适你的:
- 你正在经营一个初创公司,需要快速验证你的想法,或者需要将产品尽快推入市场。
- 你的解决方案不需要频繁地将数据从设备传输到云端,因此需要将每个设备的成本维持在较低的水平。
另一方面,如果你正在构建不确定的云平台和高度可定制的解决方案并且需要操作实时数据,那么你可以考虑定制化或者开源的 IoT 解决方案。