2019独角兽企业重金招聘Python工程师标准>>>

1、前情概要

看这篇文章之前,强烈建议先阅读《物联网设备网关系统架构设计》,该篇文章从四个层次详细介绍了我司设备网关的系统架构。

其实做架构设计离不开三个方面:业务架构,系统架构,以及技术架构。它们彼此之间不需要遵循一定的顺序,但必须以实际业务作为出发点,这样做出来的架构才有落脚点,否则就沦为了一个纸上谈兵的花架子了。从这个角度考虑,对于以盈利为目的的组织来说,还是以业务驱动为导向会比较靠谱,技术驱动也未尝不可,在B2B的领域也可以大展拳脚。

在设备网关的架构设计中,对于业务架构的设计,我没有单独写一篇文章阐述之,而是融合在系统架构设计中,对其做了一定的介绍。

为了方便阐述,我将系统架构设计图先贴出来。

图1 设备网关系统架构

接下来的技术架构设计无非就是将系统架构的四个部分在技术层面进行剖析。

个人以为,Device Group,Center Controller,以及Biz Processor,这三个部分的技术含量较高,由于单片机设备并非我司开发和生产的,将这部分工作委托给了第三方公司,故对此不做介绍,重点剖析Center Controller和Biz Processor。

2、从Netty说起

这部分内容属于知识科普篇,因为Netty在整个技术架构中有着举足轻重的作用,如果读者对此比较熟悉,可以选择性跳过。

下面先看一段来自Netty官网的介绍:

Netty is a NIO client server framework which enables quick and easy development of network applications such as protocol servers and clients. It greatly simplifies and streamlines network programming such as TCP and UDP socket server.

说得直接一点就是:Netty是一套基于NIO而封装的易用性较高的API,使用它可以简单快速地开发网络应用程序。

Netty拥有诸多特性,比如设计良好,支持多种协议的非阻塞式API,高吞吐量,低延迟,资源占用率低等。此外,Netty的社区较为活跃,文档资料较多也成为了我选择它的关键原因之一。以下是Netty组件图,大家可以感受一下:

图2 Netty组件图

可能大家比较关心Netty究竟能干些啥。限于篇幅,我不能慢条斯理地给大家解释,只能从感性上对Netty的应用领域进行认知。

  • 高性能RPC框架。这是Netty的一个典型应用场景,著名的分布式服务框架 Dubbo 远程调用使用的底层通信框架就是Netty,Dubbo是久经考验的出色的开发框架,其默认使用的通信框架Netty自然是非常靠谱的。除了 Dubbo 之外,淘宝的消息中间件 RocketMQ 的消息生产者和消息消费者之间,也采用 Netty 进行高性能、异步通信。

  • 大数据处理。分布式大数据处理框架 Hadoop 的高性能通信和序列化组件 Avro 的 RPC 框架,默认采用 Netty 进行跨节点通信,它的 Netty Service 基于 Netty 框架二次封装实现。

  • Web容器定制和开发,这个算是比较高阶的应用。像Tomcat,JBoss这类Web容器是基于HTTP协议的,而Netty比这些运行容器还要更底层,毕竟HTTP协议是基于TCP/IP的,对于HTTP请求,还是需要像Netty这样的通信框架处理底层协议。因此,如果愿意的话,你也可以基于Netty开发一款Web运行容器。

综上所述,看过我的设备网关系统架构后,也不难想到我为什么会选择Netty了。

下面正式开始介绍设备网关的技术架构设计。

3、中控平台技术架构

这部分的技术架构与前面介绍的Netty是紧密相关的,中控平台的底层通信框架便是Netty。

如下这张图基本上可以表达我对中控平台技术架构的设计思想:

图3 中控平台技术架构

不难看出,整个架构风格采用的是以Spring Cloud构造的微服务。因为中控服务实例可以有多个,用以应对设备数据增加所带来的横向扩展。

系统架构中提到了中控平台的REST API组件,可以对应到中控服务器的REST Service。这部分功能用Feign进行实现,Feign可以认为是一个带有负载均衡特性的简单易用的HTTP请求中间件,其中集成了请求组件RestTemplate,以及负载均衡器Ribbon。REST Service组件可以提供诸如设备信息,连接通道状态,设备连接数,指令集维护之类的API,用于与业务相关的系统层进行调用。

MQ Service是系统架构中消息队列服务组件的实现。理论上来讲,物联网行业的消息服务协议首选MQTT,它是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议。但是也不阻止你选择其他协议,比如AMQP,STOMP等。当然,各大厂商都有对消息队列服务协议的实现,支持的协议最全面的就是Apache ActiveMQ,STOMP是基于纯文本的消息传输协议,不用考虑,MQTT协议实现的代表是出自国人之手的EMQ,AMQP协议实现的代表则是RabbitMQ。

接下来的Logger Service没什么好解释的了,因为只负责记录日志,使用logback,或者log4j之类的日志框架即可。

最后的Netty Service涵盖了很多组件的实现,其内核都是基于Netty的服务,很多设计和实现也就显而易见了。整个中控平台与设备组的数据传输载体就靠连接通道(Connect Tunnel),这里借助一个通讯行业专业术语「全双工」,它表示命令的收发可以同时在通道里发生,所以基于连接通道这个载体,我们可以进一步实现协议解析引擎,命令执行引擎,数据收集器等组件。

4、业务处理器技术架构

因为我采用了微服务的架构风格,所以业务处理器的技术架构和Spring Cloud脱不了干系。先看一张技术架构图:

图4 业务处理器技术架构

上面一部分是各式各样的客户端,也包括了系统架构中提到的管理系统(Management System),这一部分不再展开叙述了。

下面一部分就是业务处理器的核心技术架构了,鉴于Spring Cloud在国内普及程度不是很高,我先对架构图周边的5个Spring Cloud组件进行简单介绍。

① Zuul Gateway,就是一个API网关的角色,根据事先配置好的路由规则,将客户端请求转发到相应的微服务中进行处理;

② Config Server,这里指代的是Spring Cloud Config,用于充当统一配置中心的角色,里面存放了几乎全部的微服务相关的配置信息;

③ Eureka Server,服务的注册与发现中心,管理着众多微服务的元数据信息;

④ Ribbon,是一个基于软件层面的负载均衡器,当一个微服务部署了多个实例的时候,可以通过Ribbon进行负载均衡;

⑤ Hystrix,即微服务熔断器,为了避免分布式系统产生“雪崩效应”。当一个微服务长时间无法到达时,就会触发该链路上的熔断器,防止大量的无效请求拖垮整个系统。

对于新手来说,上述的Spring Cloud组件介绍可能过于简单了,如果感兴趣,可以搜索相关学习资料,或者关注我的专栏,我会不定期的进行微服务领域的相关分享。

接下来介绍5个核心的业务模块。

① Log Analysis,日志分析。主要是收集来自中控平台的日志,以及业务层自身的相关日志,可以用来分析,排查和追踪问题,进而起到一定的监控作用。这部分使用的ELK技术栈,也算是日志分析功能的一个最佳实践,因为日志分析业务没有其他特殊的业务需求,所以其他的技术我也没有再去考虑了;

② Data Analysis,数据分析。这个话题太大了,我只能结合业务来谈。这部分功能主要体现在了数据可视化,以及结合监控服务对设备进行预警,所以,就目前而言,数据分析的功能就是对一些业务规则的识别和整合,让无形的数据变成有形的资产。目前只考虑数据的离线分析,至于实时分析的功能,现在还不是这么迫切,所以只用到了Hadoop生态里的相关技术;

③ Data Persistence,数据持久化。 这部分功能就是为数据分析,以及客户端提供相关数据。数据持久化有两个地方:MongoDB,MySQL。MySQL存储的是一些结构化的业务数据,因为这些数据比较重要,所以MySQL会使用主-从结构进行部署,遵循“主写,从读”的原则。MongoDB存储的是除业务数据的其他数据,暂不考虑集群部署;

④ Monitor Dashboard,监控平台。这个部分是设备运维的核心功能,而这个监控功能要分两个层面理解:第一个是业务层面,目的是监控设备,中控以及业务的健康状况,通过一定的指标展示出来;第二个是技术层面,也就是技术架构图中提到的Turbine,其实结合了上面提到的Hystrix,对各个微服务的状态进行监控;

⑤ Notification Service,通知服务。管理整个设备网关的通知业务,手机推送使用的是个推平台,此外还结合了邮件通知,我们可以直接使用Spring Boot自带的一个mail组件。

5、总结

承接上一篇的系统架构设计文章,这篇文章详细介绍了物联网设备网关的技术架构设计及其所用到的核心通信框架Netty。然而,对于各个技术的实现,本文没有做太具体的介绍,因为涉及到了代码层面的详细设计环节了,后续会出具体实现的文章。

-END-

转载于:https://my.oschina.net/java1314/blog/1600362

技术汇之物联网设备网关技术架构设计相关推荐

  1. 物联网设备网关系统架构设计

    0.写在前面的话 坦白来讲,我对物联网行业沉淀较少. 做软件出身的我,之前也学过一些单片机的知识,还有射频,ZigBee诸如此类的无线传输协议,因为那段时间"智能家居"火了,年少无 ...

  2. IoT 物联网设备端 SDK 架构设计参考

    IoT设备端SDK架构挑战 IoT物联网设备应用场景不同导致配置千差万别,在硬件端SDK设计过程中,既要满足多场景快速适配,又要用尽量少的硬件资源,还要满足能力定制化的需求,实现低消耗.易移植.易使用 ...

  3. 腾讯云十亿级 Node.js 网关的架构设计与工程实践

    作者|王伟嘉 编辑|孙瑞瑞 本文由 InfoQ 整理自腾讯云 CloudBase 前端负责人王伟嘉在 GMTC 全球大前端技术大会(深圳站)2021 上的演讲<十亿级 Node.js 网关的架构 ...

  4. 西门子SIMATIC IOT2050与钡铼技术BL102工业物联网智能网关的区别

    工业物联网智能网关是工业物联网技术不断发展的必然产物,是融合IT与OT的纽带.不管是工业控制领域的国际大品牌玩家,还是国内的小精专企业,都根据市场需求推出了自己的产品.这些工业物联网智能网关广泛应用于 ...

  5. drools规则引擎技术指南_物联网规则引擎技术

    物联网应用程序设计与典型的IT解决方案大不相同,因为它将物理操作技术(OT)与传感器.致动器和通信设备连接起来,并将数字信息技术(IT)与数据.分析和工作流连接起来. 在企业环境中,物联网非常复杂,这 ...

  6. 百分点大数据技术团队:可插拔OSS架构设计和实战经验

    编者按:随着互联网.大数据和人工智能等技术的发展,信息资源得到最大程度的共享,但随之而来的海量文件存取的功能和性能问题也日渐突出.在政务领域解决方案中,对象存储往往扮演着非常重要的角色,如全国各地的健 ...

  7. 云平台编程与开发(六):物联网云平台的架构设计设想(基于X5Cloud云平台)

    1. 物联网概述 根据现在较通用的定义,物联网是指通过射频识别(RFID).红外感应器.全球定位系统.激光扫描器等信息传感设备,按约定的协议,把任何物品与互联网连接起来,进行信息交换和通信,以实现智能 ...

  8. Android APP物联网设备无网模式设计

    1APP缓存 APP缓存是为了支持APP和设备在没有网络的情况下任然可以使用,APP在启动时如果有网络会从平台缓存当前用户的所有数据,包括家庭,房间,设备,设备控制信息,场景信息等 2双mqtt模式 ...

  9. OpenUPF 的设备形态与架构设计

    目录 文章目录 目录 OpenUPF 的设备形态 服务器形态 IaaS 层 PaaS 层 交换机形态 UPF 的 P4 方案 UPF as SDN APP UPF SwitchOS UPF + Swi ...

最新文章

  1. 顺序表-顺序表的基本操作(初始化+指定位置元素值 + 用元素值求下标)
  2. 高可用高并发的 9 种技术架构
  3. C# ref与out关键字解析
  4. iOS中几种定时器 - 控制了时间,就控制了一切
  5. css 右上角 翻开动画_css制作电闪雷鸣的天气图标
  6. 3dmax shift用来复制对象
  7. 用‘slay’干掉某个用户的所有进程
  8. VirtualBox Failed to open/create the internal network 错误处理
  9. 深度学习TF—1.TensorFlow2基本操作
  10. java yuv 裁剪480480_对android录制的NV21视频数据进行旋转(90,180,270)与剪切
  11. C语言怎样将一个字符串逆序,C语言,求一个字符串的逆序
  12. 六、面向对象编程——类和对象
  13. PLC程序的组成结构
  14. Java面向对象练习题之定义交通工具类型,控制速度
  15. 非参数估计:核密度估计KDE
  16. 增量Lint检测实现原理
  17. 歌单详情内容-图标列表 (音乐app项目-第7步)
  18. AspectJ介绍(一)
  19. 【300+精选大厂面试题持续分享】大数据运维尖刀面试题专栏(八)
  20. 输入若干用户的用户名和密码

热门文章

  1. 阿里技术实战:一些云上资源调度的经验谈
  2. 【Elixir】 bcrypt_elixir 在 windows 中的 Compile 错误
  3. ORALC 抛出ORA-12154的错误
  4. 经济学人:谷歌、亚马逊等巨头有数据技术优势,会接管麦肯锡、波士顿咨询手中业务
  5. 浅写策略模式,及map、枚举结合小例子
  6. 【DataBase】数据库连接池
  7. 基于springboot对接芯烨云无线打印机(非云打印机)
  8. hyperledger/cello安装和使用
  9. mysql建表实例 删除记录_python基础_mysql建表、编辑、删除、查询、更新
  10. unity背景设置透明,显示ios原生ui背景