本篇文章皆为我自己的观点,如有不对之处还请指正!

物联网开发

物联网开发,最大的特点就是需要解决海量TCP长连接、海量并发请求、海量时序数据的处理(包含了多规约管理、报文的解析、组装、以及日志的分析等等)等问题!同时,在实现高效处理海量数据能力的同时,还必须保证数据的时效性准确性,试想一下如果我们使用共享单车或者用支付宝乘坐公交时,一个扫码开锁或者扫码乘车的操作需要好几分钟才能操作结束,那么有几个人能忍受这份尴尬呢?而为了实现秒级甚至毫秒级的物联设备数据采集或控制,一个满足的了我们需要的好的物联网架构则可让物联网开发达到事半功倍的效果!好的架构甚至可以掩盖掉实际开发过程中部分劣质代码所导致的性能损耗———这点我有亲身体会! 下面我主要讲解一下“前置网关架构模式”

前置网关架构模式架构图

何为前置

前置是我所在公司的一种特定叫法,其主要作用是:

  • 与网关建立通信,从网关接收和发送数据至网关,
  • 负责多种规约类型报文的组装和解析工作
  • 负责提供给第三方使用的API或SDK,而第三方应用则可以利用前置提供的API接口或者使用SDK实现对物联设备控制和数据的采集等。
  • 在特定情况下,需要考虑通过消息队列或其它方式为大数据服务、时序数据库服务等提供数据来源,以实现实时告警等功能

IOTGate中的monimaster就是一个模拟前置,当然了,模拟前置我只是简单的实现了一个报文转发,有兴趣的同学可以自行完善。

企业级多规约前置“牧羊犬”是我自己目前正在开发中的前置程序,其在实现了前置所有应该具备的基本功能基础之上,同时支持分布式缓存、分布式消息队列、注册中心等等动态可配且可通过配置中心Apollo动态实时变更。规约类型目前已经支持了光伏电站私有规约,国网698规约等,国网376、645等正在开发中,最终可实现一个前置节点同时支持127种物联网规约的采控,且支持规约解析的热插拔。目前“牧羊犬”暂不考虑开源,与IOTGate企业版搭配用于为企业提供物联网解决方案。后续会根据实时情况,可考虑按IOTGate的思路将“牧羊犬”开源出来。

何为网关

网关是前置和物理设备通信的桥梁,所有通信的数据都将由网关来统一调度,其主要作用为:

  • 与海量物理设备保持长连接,并透传数据
  • 能够处理海量并发上下行通信,并稳定运行
  • 处理TCP拆粘包等
  • 通信加密、设备白名单等 以上为作为一个通信网关所需要具有的基本能力,在此基础上增加网关状态监控、节点分布式部署、多规约动态可配等功能则更能满足企业物联网应用的需求。 这正是IOTGate(项目地址:https://gitee.com/willbeahero/IOTGate )出生的原因!IOTGate的功能以及使用说明请参见前四篇博客。

前置网关二者如何交互

如上图,前置网关通过socket长连接实现数据的交互,除此之外,大家可以按照自己的实际情况选择通信模式,例如使用现在流行的消息队列等

前置网关架构优点

首先,前置网关的解耦使得他们各尽其责,互不干涉,同时按功能拆分之后,网关的重心就在于长连接和并发行,而把一些执行效率地下甚至可能会阻塞线程的所有复杂的业务全部扔到前置去处理,而前置可以很好的利用缓存或消息队列实现对网关发送过来的海量数据的减压,同时可以根据业务需要随时进行横向的扩展,事实上,我一般建议前置网关按“2:1”模式或者“n:1”形式进行部署(当然了如果网关也有多个节点部署时,最简单最高效的是“n:n”形式部署)。

如图所示,一个网关同时与两个或多个前置节点通信,因为实时情况是网关处理数据的能力一定比前置要强,因此这种部署模式可以更好的充分发挥网关和前置处理数据的能力!还有一点,那就是这种模式可以使得我们需要迭代前置代码时,变得易于操作,我们可以通过逐个节点依次发布的方式对生产前置进行迭代——可将最新代码发布到某一前置节点,待验证代码无误之后再全量发布俗称“蓝绿发布”。 网关由于存在软负载均衡和实时监控前置节点的功能,可以达到发布生产环境前置而不丢失一条数据的效果!