现在物联网服务平台比较多,也有一些比较好的或开源或商业化的物联网平台,这其中以MQTT为主,但不是所有的物联网设备都是需要双向通信的,考虑到MQTT的协议实现问题,目前基于传感器数据采集类的设备,尤其是已有的老设备还没有全部实现MQTT协议,因此这里分享的是一个小型化的基于TCP/UDP协议的物联网服务平台架构,这里的TCP/UDP是同时支持两种协议。

一、架构介绍

这里分享的是一个已经上线的一个实际案例,目前这个架构所支撑的关端设备在2000台左右,其中1600台左右的设备是采用的UDP,每天上传6次数据,每次上传3条,其余为TCP协议的设备,为双向通信,每5分钟上传一次数据,每次一条,就规模上来说,算是比较小型的服务平台。

系统逻辑架构图

交互层:系统的前端有PC端管理、手机APP管理端(普通用户)、手机APP实施端(这里是可设备安装的工人使用的APP)、第三方系统接口(设备数据透传接口)。

代理层:这里主要是通过Nginx对TCP、UDP、Http进行代理,后端所代理的关键服务至少部署两个以上的服务,这样做的好处不只是提高系统的可靠性和性能,最主要的还可以在应用升级时先停掉其中一个服务,升级完成后,再停掉另一个服务并完成升级,这样可以简单的实现不停止服务进行系统升级。

滚动升级示意图

应用层:这里的应用层实际上是分了两层,前置服务(IoT Service)主要是接收前端设备上传的数据,自身在ES里存一份原始数据,然后通过消息中间件分发出去,再由后端的各种消费服务对数据进行处理,这里的消息中间件主起到流量消峰作用,考虑到消费比生产要慢,所以一个生产者对应两个后端消费者,这里采用的竞争消费模型。

数据层:首先是数据存储服务,这里用了ES存储原始数据,用CitusData存储解析后的数据和业务数据,理论上来讲,存储设备上传的数据采用时序数据库更为合适,在测试了多个时序数据库后,最终还是放弃了时序数据库,主要有几方面的原因,一是现在的时序数据库开源的功能阉割的很严重,随着数据量上升,扩容更是没有办法,Apache上有几个比较新的时序数据库,但出来不久有各种问题,不敢用于生产环境。CitusData是基于PgSqL的,其本身比较成熟。

二、架构选型及实施落地

架构技术选型:

代理服务:Nginx

数据存储服务:Elasticsearch、CitusData

消息中间件:RabbitMQ

缓存及定时任务:Redis

前置服务:Jetty

服务基础架构:SpringBoot

在架构实施落地上主要考虑关键服务部署两个以上,前期以经济为主,主要在存储服务节点上前期部署较少,另外根据业务特点,不太关心两个月以前的数据,因此这里对设备数据先按设备类型分表,再按时间月分表。

架构部署逻辑结构图

这里Nginx只部署了一个实例,对后端的UDP、TCP、Http分别进行代理,ES只部署了一个实例,这里只是将原始数据先存起来,后期可以基于该数据进行分析。

IoT Service这里为设备数据的前置服务,主要是和设备进行数据通信,共部署了两个实例,每个实例上行的消息中间件是独立的,主要是为了增加吞吐量和稳定性,下行是共用一个消息中间件,这个平台下行数据非常少,且通信频率比较低。

DataService共部署了四个实例,每两个实例消费一个前置服务生产的消息,在这个平台中,IoTService和DataService都是关键服务,线上不停机,因此多个服务还以后的滚动升级做准备。

AppService服务主要平台的基础管理和设备指令的手工下发,操作不多,线上允许停机,因此只部署了一个实例。

这里有几个后关键服务没有画出来,一个是接口服务,这个是对第三方系统的,它从DataService中获取解析之后的数据透传到第三方系统中去,部署两个实例。

对于UDP和TCP设备都统一采用了通过心跳数据来判断设备是否在线,这里采用的Redis的数据过期通知来完成的,对于不同的设备,过期时间不同。

总结:

这个架构就目前的规模运行进还比较好,数据规模大概在20万条记录/每天,经过CitusData分表(总和最大的近1000万,每个分表在30万左右)后业务上数据的平均响应在1秒以下,比较理想。

这里有几个问题有待升级,一是Nginx的单点故障,二是后续对新设备的MQTT协议支持,三是后面或许有比CitusData更合适的数据存储服务可以考虑升级。CitusData对大表的切分比较考究,切分的纬度不好,会直接影响数据查询性能,但对写入不影响。

架构本身是一个不断演进的过程,好的架构是不断迭代出来的,不是搭建出来的,能满足自身应用就好,总体上来讲这个平台架构复杂,一般公司也能很好的运维下去,再大一点的应用需要考虑自动化运维。

springboot 物联网_物联网架构实例分享相关推荐

  1. java程序员转物联网_物联网时代到来,Java程序员躺赢!

    物联网需要管理大量的数据流,这就是Java可以发挥作用的地方.互联网自成立以来,逐步帮助技术达到了新的高度,同时把世界各地的人们连接起来.所以,人们可以想象,一种技术给所有无生命设备独特的身份:一种技 ...

  2. iot物联网_物联网(IoT)简介

    iot物联网 Smart Homes 智能家居 How our life in the future may look like? Let us look at one possible scenar ...

  3. java三层架构项目事例_三层架构实例

    一.概要 在我的上一篇博客中,我们谈了谈分层,到底为什么分层(http://blog.csdn.net/shan9liang/article/details/6836300) 这篇博客,准备用一个小D ...

  4. 图论 物联网_物联网工程题目 物联网在医疗领域的应用

    我儿子考上宿迁学院物联网工程专业,学费17000是复读还是去上学? 其实,问别人这个问题是没用的.我相信你已经做出了判断,但你还有以下建议. 1.能够支持,建议去.这所学校不是很好,但现在属于本科序列 ...

  5. 深入解析物联网操作系统(架构/功能/实例分析)

    深入解析物联网操作系统(架构/功能/实例分析)  物联网的主要特点 i. 连接 所谓连接,指的是各种各样的终端设备,都能够通过某种网络技术,连接到一个统一的网络上.任何终端之间都可以相互访问.下一 ...

  6. IOT(29)---深入解析物联网操作系统(架构/功能/实例分析)

    深入解析物联网操作系统(架构/功能/实例分析)  1.       物联网的主要特点 i.             连接 所谓连接,指的是各种各样的终端设备,都能够通过某种网络技术,连接到一个统一 ...

  7. IOT物联网技术架构_物联网平台架构设计

    现在网上讨论的有关物联网的帖子非常之多,但大部分都是介绍理论或者有关硬件,通讯相关的问题,比如物联网模块,物联网通讯协议MQTT.XMPP.NB_IOT等,个人认为这些只是物联网中一部分,而涉及到物联 ...

  8. IOT---(3)深入解析物联网操作系统(架构、功能与实例分析)

    物联网(IoT)是目前最新最热的技术热点之一,也是这个信息化时代的重要发展节点.相对于互联网而言,物联网的本质在于"万物相连".物联网的核心和基础仍然是互联网,是在互联网基础上延伸 ...

  9. 移动应用开发实例_物联网改变移动应用开发的4种方式

    图片来源:pixabay.com 来源:物联之家网(iothome.com) 转载请注明来源! 物联网改变了移动应用程序的开发格局.那么,为物联网开发移动应用程序有何不同? 物联网与移动应用程序开发齐 ...

最新文章

  1. ora-01653表空间扩展失败产生的场景和处理方法
  2. Redis进阶 - 因异常断电导致的Redis Cluster Fail故障处理
  3. AliOS Things 硬件抽象层(HAL)对接系列2 — SPI driver porting
  4. Linux学习记录-----《快乐的Linux命令行》.
  5. 使用 Kafka 和 Spark Streaming 构建实时数据处理系统
  6. java jar包图片_jar包的图片不显示 求解
  7. Scala学习之特殊符号,及函数
  8. python db文件_python中查看.db文件中表格的名字及表格中的字段操作
  9. 在HTML标签中 lt h5 gt 表示,HTML lt;blockquotegt; 标签
  10. 问题 J: 十进制整数转二进制
  11. java AST 表达式_Atitti.java exp ast java表达式语法ast构造器
  12. Rem实现自适应初体验
  13. 专利写作-如何填写技术交底书
  14. python怎么实现分数形式_python实现将将输入的可约分数化简为不可约分数
  15. 史上最强!PC时代的20位英雄(组图)
  16. springmvc+vue ssm 医院预约挂号系统#毕业设计
  17. Netsuite设置中文多语言
  18. 简单5步,从0开始搭建你的第一款小程序
  19. 百度云同步盘登录失败,报错155010的问题解决
  20. UVa 11121 - Base -2

热门文章

  1. 使用两个ThreadPool
  2. 同步手绘板——将View的内容映射成Bitmap转图片导出
  3. 【TCP/IP详解 卷一:协议】第十二章 广播和多播
  4. 在Win7的IIS上搭建FTP服务及用户授权
  5. Knockout 新版应用开发教程之visible绑定
  6. fedora,linux mint 命令行(终端)打开目录
  7. c#链接操作mysql数据库代码_c#连接mysql数据库 代码
  8. 36岁的it一线运维是不是废了_IT外包人员职业人生的漂泊,何为归处?
  9. css图片悬停边框,CSS悬停边框使内联元素稍微调整
  10. angular 如何在index html 页面包含子页面_Webpack4.0各个击破(1)html篇