简单的原型实现设备,与支持上亿软硬件都不同的设备之间存在巨大差异。一些故障并不会直接影响收入和用户的体验,因此可能会在早期的应用和敏捷开发迭代中被忽略。物联网的持续发展也带来了进一步的风险。一旦物联网启动了,你就一刻也不能关闭它,因此日常维护将很困难,大幅度的架构变革几乎不可能实现。
一个难以理解的事实是,你可以“cool”,也可以“unreliable”(意思是你可以使用最先进的技术服务客户,但是最先进的技术往往不成熟,也就意味着不可靠;如果使用成熟的技术,一般来说这个技术就不够新了)。所以你无法得到又新又稳定的技术,你可以让你的客户失望几次,而不能总让他们失望。以下是可能会导致物联网失败的五种情况:
我还需要说什么吗?
物联网的成功比我们以前见过的任何事物都更成功、更迅速。这意味着物联网系统必须无缝地扩展到大规模。扩展的比率不是一年增加50%或100% - 而可能是几年内从1,000台扩展到100,000,000台。
几乎所有的云供应商都声称能够支持巨大的工作负载,NoSQL供应商和open source projects也这样说。
我不会质疑这些说法,但有三个因素需要考虑,如果你打算像乐高那样(通过组装大量不同的技术来组建大规模系统)处理问题:
传统软件和物联网系统之间的一个根本区别是缺乏对部署环境的控制。现实世界是一个奇怪,混乱和不稳定的地方,而这个奇怪的地方会强加给你的系统。可笑的是,一次性事件会频繁发生。假设你部署了100,000,000个设备,每两周就会发生一次一百万分之一的事件。为了应对这种情况,许多开发人员需要改变思维方式。有微小不足的软件将允许错误进入系统并传播混乱。混乱将导致糟糕的用户体验,这反过来会导致负面影响 - 或者更糟。
物联网系统的初始部署通常将重点放在某种形式的最小可行产品上,随着时间的推移,将增加更多功能。除此之外,经营有方的大公司将收购竞争对手,与拥有不同世界观、经营理念的人建立技术合作伙伴关系,以及随着时间推移会产生不可避免的技术债务。(技术债务是现在增加的任何代码,都将在以后,花费更多的时间,来处理它带来的问题。--通常是为了实现快速收益。)
在传统的企业环境中,我们可以替换老化的组件,但在物联网领域,实际的东西并非由您拥有 - 它们归您的客户所有,客户不能被强迫停止使用他们的设备,而是希望他们能够继续工作,直到设备坏损。这意味着,一旦您发布设备,这些设备就得用几十年,除非您愿意“堵塞”设备并和您的客户对抗(即对老旧设备不再支持,强制更新)。
随着您的物理环境变得更加复杂,软件堆叠问题将会随之而来。随着时间的推移,好的、整洁的部署将变得陈旧和混乱,随着代码的过时和日益复杂的数据路径,当你不得不试图去修改代码时,你无法理解这些复杂的逻辑。
你的JSON杂乱吗?
文档数据存储在这种也是一个大问题。因为他们没有强制规定存储的内容,所以你拥有的每一个数据库交互代码都需要能够理解它遇到的每一个记录结构。比如在SQL数据库中,创建新列用于存储新数据。
你将如何协调需要保留的需求和需要升级的需求?
高可用(HA)应用程序就意味着笨拙(不灵活)。创建和部署真正的高可用性应用程序是一项重大的技术挑战。从长远来看,这是一个大问题。
你所有的开源组件都会得到十几年的维护吗?
比废弃一个购物中心更加令人人悲伤的是废弃一个开源项目,尤其是在你使用它的时候被废弃了。虽然现在很容易通过组装一堆开源项目来构建复杂的应用程序,但随着时间的推移,维护是否不中断很难预测。一个或多个项目组建可能无人维护。这时,你必须选择变更架构或是做一些与盈利无关的Bug修复。至少,这意味着您需要保留编译整个项目的能力(因为替换组建要重新编译整个项目,而编译整个项目也不是一件简单的事情)。
所有物联网议程网站的贡献者均对其帖子的内容和准确性负责。作者的意见并不一定表达物联网议程的想法。