第1章 物联网模式简介---独特要求和体系结构原则

物联网用例的独特要求

物联网用例往往在功耗、带宽、分析等方面具有非常独特的要求。此外,物联网实施的固有复杂性(一端的现场设备在计算上受到挑战,另一端的云容量几乎无限)迫使架构师做出艰难的架构决策和实施选择。可用实现技术的多样性和缺乏完善的标准是额外的挑战,使体系结构决策变得困难。

本书试图通过识别可以支持这些用例的架构之间的共性,来缓解与构建物联网用例相关的一些挑战。重要的是不要被用例的多样性所蒙蔽,并认识到多样性存在于表层和底层。

本书旨在通过展示如何将不同物联网用例的实现追溯到少数架构模式,弥合当前理解中的这一差距。 在介绍各种物联网模式之前,值得一提的是,物联网架构不同于非物联网架构的独特期望: 感知事件和驱动命令具有广泛的延迟预期——从实时到激发和忘记 数据分析结果需要在各种消费设备上报告/可视化/消费——手机、台式机、平板电脑等。同样,数据消费者有不同的背景、数据需求和应用程序角色(人物角色)。

人们经常被迫与传统以及尖端设备和/或外部系统集成——很少有琐碎的用例具有独立/独立的架构。从遗留系统和非遗留系统中提取数据的方式有很大的不同——遗留系统可能会在内部整理数据,然后将其推送到外部端口(文件传输),而较新的系统可能会以连续的流(时间序列数据)推送数据。这种可变性是选择特定物联网架构模式时的关键考虑因素之一。 不同的部署需求—边缘、内部部署、混合、云等等。 遵守严格的监管规定,尤其是在医疗和航空领域。 有人期望立即获得回报,投资回报率(ROI)、业务成果和新的服务业务模式。 持续创新,产生新的服务或产品(尤其是云供应商),迫使物联网架构与这些新产品或服务保持持续同步。 缺乏能够制定端到端物联网解决方案的熟练架构师——尽管可能有特定技能的人(设备架构师、连接架构师和云架构师);然而,很少有端到端的物联网架构师。 设备、设备连接、物联网协议或消息传输层没有通用标准,导致设备管理复杂。 通常,物联网堆栈不会孤立运行,任何非琐碎的部署物联网解决方案都需要与其他外部系统(ERP、AMDB、MES等)集成。即使在这里,也没有关于如何无缝集成这些系统的标准。外部系统通常比物联网部署早几十年,并且在没有考虑集成需求的情况下进行了大量定制。 从一个角度来看,物联网实施是一项流程自动化举措。一般来说,该过程是存在的,但是手动执行的,物联网有望部分或完全自动化该过程。

这些现有的工作流程没有记录在案,并且是流程从业者部落知识的一部分,这给物联网架构师带来了挑战,因为他们对流程和工作流程不清楚。因此,他们面临着一个两难的问题,即哪些子流程应该自动化以最大限度地提高ROI——他们必须决定是否满足于微小的改进(局部优化),并放弃通过考虑全局优化可以积累的好处。

设备生命周期管理在有氧医疗设备等领域是一个挑战,因为它们无法承受停机时间,但仍需要及时的固件更新(尤其是与安全修复相关的补丁,不能推迟到某个时间点之后)。 需要定期校准现场传感器是一个挑战。漂移速率因传感器而异,也因环境而异。有一种趋势是通过在边缘或云中应用AI/ML模型来补偿这种漂移,但这些步骤远非理想,因为它们缺乏准确性,并且可能没有充分考虑局部或环境条件。 依赖于位置信息的用例往往具有有限的可接受性,因为所有的位置传感器(室内或室外)具有有限的精度。 大量边缘处理的历史数据(几十年来积累的)迁移到云是另一个关键的架构挑战,在许多机器到机器(M2M)到物联网的转型计划中都看到了这一挑战。 所需的非功能性需求(NFR)(可扩展性、可用性、安全性、数据驻留/隐私等)值因用例而异,并增加了另一层复杂性。 物联网数据的消费者有不同的背景(例如,家庭自动化用户的信息需求与想要监测工厂正常运行时间的工业用户有很大不同,而工业用户的信息需要又与使用物联网进行自动化临床试验的辅助医疗人员的需求不同),因此他们有不同的操作和利用物联网系统的方式。尽管这似乎对设备UI设计有更大的影响,但它也会以微妙的方式影响解决方案架构。 在下一节中,我们将列出有助于您解决实施物联网解决方案的独特需求的架构原则或注意事项。

建议的体系结构原则和注意事项

确保体系结构一旦实现,即具有可扩展性、可修改性、鲁棒性和容错性的某些原则与物联网体系结构尤其相关。让我们来看看其中的一些: 基于开放通信协议构建,以支持不同的设备通信需求:因为物联网是真实(硬件)和虚拟(软件)领域的融合,每一个领域都以自己独立的速度发展。稳健的物联网架构应该足够灵活,以支持这两个领域当前和未来可能的增强功能——例如,一方面,设备/硬件方面的连接/电源功能不断进步,而另一方面,中央服务器方面在分析和AI/ML能力方面取得了进步。

        因此,现实世界和虚拟世界之间存在固有的阻抗失配(涉及这些增强的速率和性质)。物联网架构师不仅应该意识到这种不匹配,还应该纳入所需的考虑因素,以在更长的时间内支持用例需求。这些要求部分是通过遵循分层架构来处理的,通过分层架构,特定层中的组件可以插入或插入,对整体架构的影响最小。

        专为“端到端”安全设计:安全性是任何软件系统的重要考虑因素,尤其是在数据或命令通过公共通信信道进行通信的情况下。然而,就物联网而言,安全需要更深入的考虑,主要有两个原因:与虚拟/软件世界中的行动不同,在现实/物理世界中发起的行动是不能取消的:在有人检测到异常并采取纠正行动之前,一台灌溉泵被(恶意)指示开始在农田中抽水,它会泵出相当多的水。这与软件世界中的场景形成了鲜明对比,在软件世界中,一条简单的更新指令就足以撤消/滚动回溯数据库的更改。在医疗保健等领域,物联网系统通常控制人类生活(例如,由物联网系统控制的氧气呼吸机),情况可能更具灾难性。 与纯软件系统相比,攻击向量要广泛得多:这是因为需要保护完整的数据管道(终端设备>网关>通信通道>中央服务器>应用程序),并且数据管道中的每个实体都有不同的适用安全要求——终端设备(其固有的受限计算/存储能力)无法支持中央服务器所能支持的严格安全性,因此需要独立分析每个组件的安全漏洞和相关安全防护措施。 同样,数据在传输过程中以及在任何时候都应受到保护。

        通过“API-first”方法实现的企业集成:任何生产级物联网系统通常都会与其他外部系统集成,以提供全部价值。物联网系统整理的真实世界数据被输入(数据推送)到外部系统,以实现更丰富的用例。类似地,来自外部系统的数据(数据拉取)用于丰富整理后的数据。这种类型的集成是不可能的,除非物联网系统已经使用API-first作为核心架构租户之一进行架构设计,企业应用程序可以使用物联网数据。这些API还支持跨物联网和非物联网(即外部系统)的工作流。 满足不同的数据需求:物联网系统由不同的用户使用,每个用户都有不同的背景和信息需求。因此,重要的是要捕捉所有(当前和未来)利益相关者的原始数据需求,并以一种易于被不同利益相关者(人物角色)同化的方式呈现数据。

        基于角色的访问控制(RBAC)是一种向利益相关者显示所需信息,同时掩盖非相关信息的机制。此外,一些利益相关者将有实时数据需求(希望紧急警报实时通知的运营商),而其他利益相关者则希望从合并数据中获得见解(批量处理)。将数据摄取与数据处理解耦是使我们能够满足这一需求的一个原则。以下列出了一些其他数据整理/操作要求:来自制造执行系统(MES)和实验室信息管理系统(LIMS)等源的各种(结构化、半结构化和非结构化)操作数据应整合在边缘、云或两者的通用数据存储(数据湖)中。 出于可扩展性、效率和成本优化考虑,分离流式、批处理和正确的时间数据管道。数据生产者与消费者的解耦确保了强健的体系结构以及技术和实现选择的灵活性。 提供部署灵活性的技术中立架构:物联网系统可以部署在不同的配置中,如内部部署、公有云、私有云和/或混合多云配置,这取决于客户对安全的敏感性以及治理和监管需求。考虑到这一点,体系结构应该足够通用,可以满足不同的部署需求,并可以由多个技术堆栈支持。这通常是通过创建物联网参考体系结构(没有特定的技术选择),然后过渡到技术体系结构(其中通用体系结构组件被特定的技术组件取代)来实现的。 高可用性设计:尽管不同的物联网用例对高可用性的需求差异很大,但一些用例被归类为任务关键型用例,几乎没有停机预期,而另一些用例可以适应相当长的停机时间。中央服务器体系结构应该模仿正常运行时间的预期,因为通常情况下,停机时间越少,成本越高。在物联网的背景下,必须从整体系统的角度考虑高可用性。例如,在可以接受更长的中央服务器停机时间的情况下,终端设备需要具有更高的数据缓冲能力(即更大的存储空间),以最大限度地减少数据丢失。 支持“无限可扩展性”:物联网部署从少量终端设备开始,但往往在短时间内扩展到大量。因此,通常,在物联网解决方案中,水平可扩展性优先于垂直可扩展性 设备通信注意事项:数据通过网关和中央服务器之间的双向通信信道进行通信。该信道可以由多种通信技术支持(其中一些常见的技术是蜂窝、Wi-Fi、LoRa和SigFox)。范围(与中央服务器的物理距离)、有效载荷大小、电池寿命和环境噪声等因素在最终确定特定物联网实现的理想通信技术方面发挥着作用。设备侧的一些其他考虑因素包括在与中央服务器的连接丢失的情况下存储/缓冲数据的能力、用于节省电池电量的睡眠/唤醒逻辑以及数据聚合/过滤需求。 下图总结了本节中讨论的关键体系结构原则/注意事项:

图1.4-开发物联网解决方案的体系结构考虑因素

总结

本介绍性章节帮助您了解在开发或部署物联网解决方案时需要考虑的架构考虑因素。此外,本章提供了上下文知识,将帮助您理解本书中列出的模式。讨论了物联网解决方案与其他传统软件系统或IT解决方案不同的特征,以及关于物联网参考体系结构不同层的信息。在接下来的两章中,我们将深入探讨物联网架构模式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/362601.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[AIGC] Doris:一款高效的MPP数据仓库引擎

在大数据处理的领域中,Apache Doris(原百度 Palo)是一个高效的MPP(大规模并行处理)数据仓库,最初由百度开发,现在已经成为Apache的孵化项目。 (图片取自百度) – 文章目录 1. Doris的基础知识…

AI自动生成角色和情节连续的漫画,中山大学联想提出AutoStudio,可以多轮交互式连续生成并保持主题一致性。

中山大学和联想研究院提出AutoStudio: 是一种无需训练的多代理框架,用于多轮交互式图像生成,能够在生成多样化图像的同时保持主体一致性。 AutoStudio 采用三个基于 LLM 的智能体来解释人类意图并为 SD 模型生成适当的布局指导。此外,还引入…

代码随想录——跳跃游戏Ⅱ(Leetcode 45)

题目链接 贪心 class Solution {public int jump(int[] nums) {if(nums.length 1){return 0;}int count 0;// 当前覆盖最远距离下标int curDistance 0;// 下一步覆盖距离最远下标int nextDistance 0;for(int i 0; i < nums.length; i){nextDistance Math.max(nums[…

送物机器人电子方案定制

这是一款集娱乐、教育和互动于一身的高科技产品。 一、它的主要功能包括&#xff1a; 1. 智能对话&#xff1a;机器人可以进行简单的对话&#xff0c;回答用户的问题&#xff0c;提供有趣的互动体验。 2. 前进、后退、左转、右转、滑行&#xff1a;机器人可以通过遥控器或AP…

mysql学习——SQL中的DDL和DML

SQL中的DDL和DML DDL数据库操作&#xff1a;表操作 DML添加数据修改数据删除数据 学习黑马MySQL课程&#xff0c;记录笔记&#xff0c;用于复习。 DDL DDL&#xff1a;Data Definition Language&#xff0c;数据定义语言&#xff0c;用来定义数据库对象(数据库&#xff0c;表&…

【介绍下SCSS的基本使用】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

SpringCloud Alibaba Sentinel中@SentinelResource使用实践总结

Sentinel 提供了 SentinelResource 注解用于定义资源&#xff0c;并提供了 AspectJ 的扩展用于自动定义资源、处理 BlockException 等。 注意&#xff1a;注解方式埋点不支持 private 方法。 官网地址&#xff1a;注解埋点支持 【1】资源名称限流 ① controller方法 GetMapp…

数据库使用笔记

1.mysql数据库频繁访问导致连接超时 解决办法一&#xff1a; 优化查询&#xff1a;检查并优化SQL查询语句&#xff0c;减少不必要的数据库调用。增加连接池大小&#xff1a;如果应用程序使用连接池&#xff0c;可以考虑增加连接池的最大连接数。&#xff08;注&#xff1a;不能…

Linux线程互斥锁

目录 &#x1f6a9;看现象&#xff0c;说原因 &#x1f6a9;解决方案 &#x1f6a9;互斥锁 &#x1f680;关于互斥锁的理解 &#x1f680;关于原子性的理解 &#x1f680;如何理解加锁和解锁是原子的 &#x1f6a9;对互斥锁的简单封装 引言 大家有任何疑问&#xff0c;可…

Unity踩坑记录

1. 如果同时在父物体和子物体上挂载BoxCollider&#xff0c;那么当使用&#xff1a; private void OnTriggerEnter2D(Collider2D collision){if (collision.CompareTag("CardGroup")){_intersectCardGroups.Add(collision.GetComponent<CardGroup>());}} 来判…

掌握SEO:如何优化用ChatGPT生成的文章以提升搜索排名

在数字化时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;已经成为网站流量的重要来源。随着人工智能技术的进步&#xff0c;越来越多的人开始使用ChatGPT等AI工具来生成文章。然而&#xff0c;虽然这些工具可以快速生成内容&#xff0c;但要确保这些内容在搜索引擎中…

World of Warcraft [CLASSIC] Level 70 Dire Maul (DM)

[月牙钥匙] [大型爆盐炸弹] World of Warcraft [CLASSIC] Level 70 厄运之槌&#xff0c;完美贡品&#xff0c;Dire Maul &#xff08;DM&#xff09; Foror‘s Compendium of Dragon Slaying 佛洛尔的屠龙技术纲要 因为不是兽王宝宝&#xff0c;而且开始位置放的不对&am…

WPF文本绑定显示格式StringFormat设置-特殊格式时间日期和多数据绑定

WPF文本绑定显示格式StringFormat设置 特殊格式设置日期/时间使用系统默认样式自定义格式&#xff1a; 绑定多个属性&#xff08;多重绑定&#xff09;多重绑定中的特殊字符示例&#xff1a; 特殊格式设置 在Textblock等文本控件中&#xff0c;我们经常要显示一些日期和时间&a…

【C++:list】

list概念 list是一个带头的双向循环链表&#xff0c;双向循环链表的特色&#xff1a;每一个节点拥有两 个指针进行维护&#xff0c;俩指针分别为prev和next,prev指该节点的前一个节点&#xff0c;next为该节点的后一个节点 list的底层实现中为什么对迭代器单独写一个结构体进行…

浏览器扩展V3开发系列之 chrome.contextMenus 右键菜单的用法和案例

【作者主页】&#xff1a;小鱼神1024 【擅长领域】&#xff1a;JS逆向、小程序逆向、AST还原、验证码突防、Python开发、浏览器插件开发、React前端开发、NestJS后端开发等等 chrome.contextMenus 允许开发者向浏览器的右键菜单添加自定义项。 在使用 chrome.contextMenus 之前…

使用命令行创建uniapp+TS项目,使用vscode编辑器

一:如果没有pnpm,先安装pnpm 二:使用npx工具和degit工具从 GitHub 上的 dcloudio/uni-preset-vue 仓库克隆一个名为 vite-ts 的分支,到项目中. 执行完上面命令后,去manifest.json添加appid(自己微信小程序的Id),也可不执行直接下一步,执行pnpm install ,再执行pnpm:dev:mp-weix…

【技巧】如何检查多个GPU之间是否支持P2P通信

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 需要用到cuda_samples&#xff1a;GitHub - NVIDIA/cuda-samples 该工具的详细解释可以看这个&#xff1a; 【知识】详细介绍 CUDA Samples 示例工程…

利用Python控制终端打印字体的颜色和格式

利用Python控制终端打印字体的颜色和格式—操作详解&#xff08;ANSI转义序列&#xff09; 一、问题描述二、ANSI转义序列三、具体代码和显示效果&#xff08;看懂这段代码&#xff0c;以后可随心控制字体的打印格式&#xff09; 欢迎学习交流&#xff01; 邮箱&#xff1a; z……

Redis-使用 jedis 操作数据

文章目录 1、Jedis简介2、环境准备3、创建maven普通项目,导入如下依赖4、测试JAVA程序和Redis之间的通信 1、Jedis简介 "Jedis" 通常是作为 "Java Redis" 的缩写或简称来理解的。Java Embedded Data Structures Interface 表示 Java嵌入式数据结构接口 2、…

9.二维数组的遍历和存储

二维数组的遍历和存储 二维数组的遍历 二维数组a[3][4],可分解为三个一维数组,其数组名分别为: 这三个一维数组都有4个元素,例如:一维数组a[0]的 元素为a[0][0],a[0][1],a[0][2],a[0][3]。所以遍历二维数组无非就是先取出二维数组中得一维数组, 然后再从一维数组中取出每个元…