软硬结合-最后的讨论
条评论本文的讨论观点会受限于本人的认知能力,毕竟我也只是个萌新。
demo2之后
demo1演示了最简的物联网系统,demo2扩展了数据库、实时显示数据、数据可视化等功能,读者学习完后就已经拥有自行搭建物联网系统的能力,至少能做出一个毕业设计级别的作品。在此之后,就是商用项目级别的作品,无非就是添加用户登陆,权限管理,以及跟具体业务相关的业务逻辑代码等等,这里我不再花费精力做例子去演示,毕竟所有关键技术都已演示完毕。
商用项目级别的作品的实现上,除了业务逻辑代码,还特别需要考虑稳定性问题。在demo2数据库相关代码里,我写入了一个TTL(time to live)索引,限定了数据只能保存一段时间,过了时间就会自动删除数据。为什么要这样做?因为时间一长,所积累的数据不断上升,直到磁盘空间用尽,导致服务器挂掉,整个系统停止工作,此时客户无法正常使用,客户就会怒气冲冲向你投诉。为了保证稳定性,需要考虑各方各面,这里简单列个表给大家一个直观的感受:
问题 | 解决办法 |
---|---|
服务器被黑客入侵,带走数据库数据以此勒索 | 【A】定时备份数据库数据,保证数据库数据能随时还原。(定时备份是需要付出代价的,根据场景选择不同的时间间隔,数据不太重要可每周备份,每天备份,像金融行业是随时热备。) |
服务器数据被傻逼运维或自己打错命令误删 | 同【A】 |
日志数据或业务数据积累过多,导致磁盘空间用尽,系统停止工作 | 1.设置合理的自动删除数据的方式(定时删除或轮转)。 2.使用监控系统,设置告警线,达到告警线时发短信通知负责人处理。 3.扩容。 |
服务器因某些原因挂掉 | 【B】1.使用第三方监控系统,当监控到服务异常时马上发送短信通知负责人,由负责人第一时间修复。(比如腾讯云的云拨测 定时调用API保证服务仍处于正常工作状态。) 2.设置备用服务器,当发生异常时自动切换到备用服务器继续工作。 |
服务器被DoS攻击 | 根据情况作DoS防御处理。 |
接入设备过多,服务器处理不过来导致的异常 | 先分析瓶颈在哪,是CPU占用过高,还是内存不足,还是带宽不足等。找到原因后再做对应处理、优化、扩容等。 |
数据库因某些原因无法正常工作 | 同【B】 |
服务应用出现异常,停止运行 | 使用部署工具自动重启(比如PM2) |
硬件设备异常,无法连接到服务器正常运行 | 1.服务器发现设备断开连接,发出告警信息进行提醒。 2.重启并查看硬件日志分析异常原因。 3.使用调试工具检测是否为网络问题。 4.替换硬件,检查是否为物理故障。 |
设备异常导致不断发送大量消息至MQTT网关,导致服务器卡顿 | MQTT网关限制消息的频率。 |
设备接收MQTT消息过多导致异常 | 要做限流算法。 |
硬件流量用完,无法继续使用网络连接服务器 | 作好流量监控,设置告警通知。 |
传输的数据被抓取利用 | 通信加密。 |
从上面表格看到,有很多原因导致服务异常,所以需要有各种方案去预防,并且需要有人负责运维服务器才能保证项目稳定运行。从demo来看,把软硬件打通并不是什么难事,但要想做到商用级别的系统,稳定起来就需要有一定的经验。做一个软件很容易,但做一个可靠稳定、可维护、易扩展的软件并不容易。另外,JavaScript这种动态语言重构起来十分痛苦,一般长期维护的中大型项目,都建议使用TypeScript以方便重构。要求不高的前端开发属于劳动密集型,前端框架推荐国内招人成本较低的Vue或者React,除非你做的是大型项目比如说像office 365这种把应用软件搬到网上的重型应用才使用Angular。使用Continuous Inspection | SonarQube以保证新人代码质量。
商用级别的物联网系统,某公司智能快递柜开发一套系统,某工厂监控开发一套系统,某机房监控开发一套系统,不同行业各自拥有自己一套系统,不同业务不同的客户需求写不同的业务逻辑代码。那么有些人就在想,能不能建立一个物联网平台,在物联网平台上能够快速开发出各行各业的性能强劲且稳定的物联网系统。在我观点里,信息化建设的过程就如果城市化建设一样,有些包工头带着几个人团队建两三层高的小房子,有些工程师开公司带几个施工队建十几高的高楼,有些大工程师在大集团里带几个大团队建设七八十层高的大厦。几个人小外包团队能开发一套小系统,十几个人的公司能开发一套大系统,几十上百人的大公司可开发一套物联网系统。
屠龙术虽强,但龙只有一条。杀鸡刀虽弱,但遍地是鸡。 大有大的好处,小有小的好处。
技术的未来发展趋势
在讨论物联网平台之前,这里先讨论一下,为了提升开发效率(社会不断向高生产力发展),人们做了哪些探索与尝试。
- 前端
由阿里出品的快速开发前端的飞冰试图复用大量UI,由设计稿一键智能生成代码的imgcook。借用这些工具,能够快速生成基本页面的代码,在此基础上做一些微调以及业务代码的编写即可,节约大量的开发成本。 - 后端
越来越流行Serverless,相关供应商:leancloud,以及开源的parse-server。它们把大部分由后端提供的功能如注册管理用户、数据库存诸、消息通知等等都做好,你直接使用,按使用量来收费。这样,基本不用为维护服务器而烦恼,不用考虑扩容所需的技术架构升级,并且一个不懂后端的开发者可以利用这些工具直接开发出一个完整的应用。
物联网平台
物联网这个概念已经炒了十几年,诞生了很多家所谓的物联网平台:机智云、中移动OneNET、百度天工、阿里Link、亚马逊AWS IoT、微软Azure IoT、腾讯云物联网平台等等。
梦想家的理想是:能让硬件公司轻松上云,能让不懂web开发的硬件工程师轻松打造出一款物联网产品。PPT架构师:只要三步,让纯硬件产品转变成物联网产品。
实际上,要考虑的问题很多:
简单代表着高度的封装,极低的灵活性,所以除非只是想把设备数据上传到物联网平台,并直接套用别人配置好的并且开发好的界面,否则基本不可能做到让硬件工程师轻松打造出一款物联网产品。所谓的物联网平台如同一个针对硬件通信而设计的Serverless,不懂web开发的人即使借用平台也难以打造出物联网产品,给你一台计算器,你至少先学会加减乘除,懂得原理,才会使用计算器。
使用物联网平台的优势跟使用Serverless服务一样,节约开发成本,不用考虑扩容所需的技术架构升级,拥有极好的安全性等等。
开发人员不使用物联网平台一大原因是 不支持私有部署 。如果哪一家物联网平台提供单机版可供免费私有部署,兼容平台版的API,那么将极利于推广。云服务商提供物联网平台因其高扩展性,高性能,高安全性,高质量技术服务保证,所以理应针对的是高端客户的大型项目,而非低成本预算的小项目。
其它有趣的物联网项目
- 开源家庭助手 home-assistant home-assistant国内中文论坛
开源智能家居平台,能接入一切智能设备。 - Node-RED
Node-RED 是构建物联网(IOT, Internet of Things)应用程序的一个强大工具,其重点是简化代码块的“连接”以执行任务。它使用可视化编程方法,允许开发人员将预定义的代码块(称为“节点”,Node)连接起来执行任务。 - 基于JAVA的开源的IOT平台
- 适合物联网 存放大量数据的开源数据库
- Mozilla IoT