使用无服务器函数将 IoT 数据流式传输到 Autonomous Database
利用 Internet of Things (IoT) 设备的工作负载需要实时高效扩展。随着您部署更多的设备和传感器,流式数据的数量和种类必然会增加。在 Oracle Cloud 中使用无服务器函数和自治数据库来自动处理和扩展流式 IoT 数据。
体系结构
在此体系结构中,IoT 设备的数据通过 API 网关流入无服务器功能,这些功能使用流式处理服务将数据上载到 Oracle Cloud 中的自治数据库。云外部的用户可以通过在 Oracle Cloud Infrastructure 计算实例上运行的基于 Flask 的 Web 服务器访问数据。
下图说明了此体系结构。
oci-arch-iot-streaming-oracle.zip
体系结构包含以下组件:
- 区域
Oracle Cloud Infrastructure 区域是一个本地化地理区域,包含一个或多个数据中心,称为可用性域。区域独立于其他区域,其距离很大(跨越国家或甚至大陆)可以分开。
- 虚拟云网络 (VCN) 和子网
VCN 是在 Oracle Cloud Infrastructure 区域中设置的可自定义、软件定义的网络。与传统的数据中心网络一样,VCN 为您提供了对网络环境的完全控制。VCN 可以有多个非重叠 CIDR 块,您可以在创建 VCN 后更改这些块。您可以将 VCN 细分为子网,子网可以被限定为区域或可用性域。每个子网包含一系列与 VCN 中的其他子网不重叠的地址。您可以在创建后更改子网的大小。子网可以是公共的或专用的。
在此体系结构中,自治数据库和用于设置数据库的函数将附加到专用子网。承载 Web 服务器的计算实例和处理流的函数部署在公共子网中。
- 网络安全组 (NSG)
NSG 充当云资源的虚拟防火墙。使用 Oracle Cloud Infrastructure 的零信任安全模型时,所有通信都将被拒绝,您可以控制 VCN 中的网络通信。NSG 包含一组入站和出站安全规则,这些规则仅适用于单个 VCN 中的一组指定 VNIC。
此体系结构中对数据库和 Web 服务器的访问通过单独的 NSG 进行控制。
- API 网关
利用 Oracle API Gateway,您可以发布具有专用端点的 API,这些端点可以从您的网络访问,并且可以在需要时向公共互联网公开。端点支持 API 验证、请求和响应转换、CORS、验证和授权以及请求限制。
- 流
Oracle Cloud Infrastructure Streaming 提供了一个完全托管、可扩展、持久的存储解决方案,可用于获取可实时使用和处理的连续、高容量数据流。您可以使用流式传输来获取高容量数据,例如应用程序日志、操作遥测、Web 点击流数据;或者用于在发布订阅消息传送模型中连续生成和处理数据的其他用例。
- 函数
Oracle Functions 是一个完全托管的多租户、高度可扩展、按需使用函数即服务 (FaaS) 平台。它由 Fn 项目开源引擎提供支持。使用函数可以部署代码,也可以直接调用代码,或者在响应事件时触发代码。Oracle Functions 使用 Oracle Cloud Infrastructure Registry 中托管的 Docker 容器。
- 自治数据库
此体系结构使用具有专用端点的自治数据库(Oracle Autonomous Data Warehouse 或 Oracle Autonomous Transaction Processing)。
Oracle Autonomous Data Warehouse 是一种自主驱动、自我安全、自我修复的数据库服务,针对数据仓库工作负载进行了优化。您无需配置或管理任何硬件,也不需要安装任何软件。Oracle Cloud Infrastructure 处理创建数据库以及备份、打补丁、升级和优化数据库。
Oracle Autonomous Transaction Processing 是一种自主驱动、自我安全、自我修复的数据库服务,针对事务处理工作负载进行了优化。您无需配置或管理任何硬件,也不需要安装任何软件。Oracle Cloud Infrastructure 处理创建数据库以及备份、打补丁、升级和优化数据库。
- Web 服务器
在此体系结构中,在计算实例上部署 Flask 微型工作端点。基于 Flask 的应用程序可以将自治数据库中的数据公开为动态 Web 内容。
建议
使用以下建议案作为起点。您的要求可能有所不同。
- VCN 大小调整
创建 VCN 时,根据计划附加到 VCN 中子网的资源数确定所需的 CIDR 块数和每个块的大小。使用标准专用 IP 地址空间内的 CIDR 块。
选择不与您要设置专用连接的任何其他网络(在 Oracle Cloud Infrastructure、内部部署数据中心或其他云提供商中)重叠的 CIDR 块。
创建 VCN 后,可以更改、添加和删除其 CIDR 块。
- 计算配置
在此体系结构中,Oracle Linux 7 .8 映像和 VM.Standard2.1 配置用于基于 Flash 的 Web 服务器。选择适合应用程序资源需求的配置。
- API 网关功能
API 网关端点支持 API 验证、请求和响应转换、CORS、验证和授权以及请求限制。选择适合您的业务和 IT 需求的功能。
- 流分区
流服务为您提供了一个已分区且仅附加的消息日志:流。分区是流的一部分。分区允许您通过在多个节点之间拆分消息来分发流。可以将每个分区放置在单独的计算机上,以使多个使用者能够并行从流中读取。对于大型工作负载和计算机密集型工作负载,请考虑增加分区数。
- 自治数据库版本
使用自治数据库的最新可用版本。
考虑事项
实施此体系结构时,请考虑您对以下参数的要求:
- 请求限制
创建 API 网关并部署一个或多个 API 后,您可能希望限制前端客户机向后端服务发送请求的速率。通过保护后端资源免受太多请求的压缩,根据您维护高可用性和公平使用的要求确定请求率限制。您还可能需要防止拒绝服务 (DoS) 攻击或控制并限制资源消耗。归根结底,您可以对 API 部署规范中的所有路由全局应用费率限制。
- 服务限制
设计体系结构时,请考虑流处理和函数服务的服务限制。请参阅“浏览更多”部分中列出的服务限制文档。
- 可扩展性
- 数据库
您可以随时手动向上或向下扩展数据库的 CPU 核心数。自治数据库的自动缩放功能允许数据库在任何时候最多使用当前 CPU 核心数三倍。随着需求的增加,自动缩放会自动增加正在使用的核心数。自治数据库允许您在不影响可用性或性能的情况下随时扩展存储容量。
- 应用程序
您可以使用实例池和自动缩放功能来缩放 Flask 应用程序。
使用实例池可以根据同一区域中的相同配置预配和创建多个计算实例。
使用自动缩放可以基于性能度量(例如 CPU 占用率)自动调整实例池中的计算实例数。自动扩展可帮助您在需求较高的期间为用户提供一致的性能,并在需求较低时降低成本。
- 函数
Oracle Functions 根据请求加载自动创建和删除函数容器。仅当调用函数及其运行的持续时间时,才需支付费用。
- 数据库
- 应用程序可用性
故障域提供可用性域中的最佳弹性。如果需要更高的可用性,请在可行的情况下考虑使用多个可用性域或多个区域。
- 备份
- 数据库
Oracle Cloud Infrastructure 自动备份自治数据库并将备份保留 60 天。可以在保留期内将数据库还原和恢复到任意时间点。您还可以创建手动备份以补充自动备份。手动备份存储在您创建的 Oracle Cloud Infrastructure Object Storage 存储桶中,并保留 60 天。
- 应用程序
使用 Oracle Cloud Infrastructure Block Volumes 服务可以在块存储卷上创建数据的时间点备份。您可以随时将这些备份还原到新卷。
您还可以使用该服务对引导卷进行时间点、崩溃兼容的备份,而无需应用程序中断或停机。引导卷和块卷具有相同的备份功能。
- 数据库
- 安全性
- 访问控制
使用策略可以限制谁可以访问云中的资源以及他们可以执行的操作。
- 网络安全
网络服务提供了两个虚拟防火墙功能,这些功能使用安全规则来控制包级别的通信:安全列表和网络安全组 (Network Security Group, NSG)。NSG 包含一组入站和出站安全规则,这些规则仅适用于您在单个 VCN 中选择的一组 VNIC。例如,您可以选择在 VCN 的多层应用程序的 Web 层中充当 Web 服务器的所有计算实例。
NSG 安全规则的功能与安全列表规则相同。但是,对于 NSG 安全规则的源或目标,可以指定 NSG 而不是 CIDR 块。因此,您可以轻松地编写安全规则来控制同一 VCN 中的两个 NSG 之间的通信或单个 NSG 内的通信。创建数据库系统时,可以指定一个或多个 NSG。您还可以更新现有数据库系统以使用一个或多个 NSG。
- 访问控制
部署
GitHub 中提供了此引用体系结构的 Terraform 代码。单击一次即可将代码拉入 Oracle Cloud Infrastructure Resource Manager,创建堆栈并部署该堆栈。或者,也可以使用 Terraform CLI 将代码从 GitHub 下载到计算机,定制代码并部署体系结构。
- 使用 Oracle Cloud Infrastructure Resource Manager 进行部署:
- 使用 Terraform CLI 进行部署:
- 转到 GitHub。
- 将代码下载或克隆到本地计算机。
- 按照自述文件中的说明操作。
