首页 - 关于研博 - 技术笔记 - 工业物联网统一接入系统高并发解决方案
工业物联网统一接入系统高并发解决方案
2024.10.18

 

  构建物联网系统的挑战

  并发处理能力

  联网系统需要处理大量的设备连接和海量数据,尤其工业物联网系统可能是面对毫秒级的数据传输,传统的线程模型在处理高并发请求时可能遇到性能瓶颈,并且多线程的管理难以处理。

  系统稳定性

  物联网系统往往不像互联网系统一样,随着用户操作带来并发,物联网系统的并发通常是持续存在的,可能会存在大量的设备长连接,而工业物联网系统又关乎着整个厂站生产稳定,所以物联网系统的稳定性至关重要。传统架构可能因为某个组件的故障而影响整个系统的运行。

  拓展性要求高

  物联网系统通常面向多种协议、多种设备,我们不能每次通过停机修改代码的方式增加支持的协议,所以各个组件需要解耦,需要具备很强的拓展性,更需要组件间有效的消息传递机制以保证数据同步和命令传递。

 

  并发处理方案选型

  在这样的背景下,Actor模型作为一种先进的并发计算模型,逐渐在物联网系统应用中崭露头角。Actor 模型以其独特的消息传递、独立计算实体和容错机制等特性,为物联网平台提供了一种高效、可靠的应用解决方案。

 

  为什么选择Actor模型

  Actor模型在1973年由Carl Hewitt定义,被Erlang OTP推广,其消息传递更加符合面向对象的原始设计,Actor模型属于并发组件模型,通过组件方式定义并发编程范式的高级阶段,避免使用者直接接触多线程并发或线程池等基础概念。

  不同于传统的直接功能间调用,该模型将功能实例拆分成一个个Actor,每个Actor由状态、行为和邮箱三部分组成。每个Actor之间的通讯通过互相发送消息完成。

  

 

  简单来说邮箱就是Actor之间的通信桥梁,邮箱内部通过FIFO(先入先出)消息队列来存储发送方Actor的消息,接收方Actor再从邮箱队列中获取消息。按消息的流向可以看出,可以将Actor模型分为发送方和接收方,一个Actor模型既可以是发送方也可以是接收方。

  在使用Java语言进行并发编程时需要特别关注锁和内存原子性等一系列线程问题,而Actor模型内部的状态由它自己维护,它内部数据只能由它自己修改,所以使用Actor模型进行并发编程可以很好地避免线程问题。

 

 

  如何在物联网中应用

  Actor模型是一个通用的并发编程模型,而非某个语言或框架所有,几乎可以用在任何一门编程语言中,如 Erlang在语言层面支持Actor模型,如著名的消息中间件RabbitMQ正是使用了该模型。

  而在java语言中,Akka是一个很成熟的Actor模型实现,工业物联网统一接入系统正是引入了Akka,从而从架构层面实现了Actor模型。

  我们将工业物联网统一接入系统的所有的功能进行划分,每个功能采用一个Actor实现,每个Actor都有一个专用的邮箱来接收消息,这也是Actor模型实现异步的基础。功能之间由直接调用,变成了消息的传递,就好像邮递员,并不是把邮件直接送到收信人手里,而是放进每家的邮箱,这样邮递员就可以快速地进行下一项工作。所以在系统里,功能间完成一次调用是非常快的,并且系统中的每一个功能,每一个组件都实现了解耦,每个Actor仅需专注实现自己的功能即可。

  

 

 

  一个Akka系统支持数万个Actor并发的运行,每个Actor的实例非常小,单机几十万的Actor实例很轻松,我们将并发比较高的功能,如设备协议解析组件,每种协议的接入组件都创建多个相同的Actor,形成内部的负载,他们并发的处理同一种协议数据,且每个Actor都以自己的步调运行,发送消息、接收消息都不会被阻塞,大大提高了物联网统一接入系统的并发接入能力。

  同时,我们可以便捷的在代码运行时创建并启用一个新的Actor,赋予Actor不同的能力,也大大提高了物联网统一接入系统的动态拓展性。

  

 

 Actor模型的其他优势

  天生分布式支持

  除了高并发外,Akka的集群模式,让Actor分布在不同的服务器上,每个服务成为一个ActorSystem,但对于开发者来说,无需关心Actor在本地还是在远程的机器上,想要调用一个Actor,只需要知道Actor的地址即可,Akka可以随意横向扩展来应对并发,所以说他天生就支持分布式,大大提高系统的可伸缩性。

  

 

  便捷的生命周期

  每个Actor模型实例都有自己的生命周期,就像java中的垃圾回收机制一样,对于需要淘汰的Actor实例,系统会销毁并释放内存等资源来保证系统的持续性。

  灵活的异常管理

  传统的编程方式是在将来可能出现异常的地方去捕获异常来保证系统的稳定性,比如在java代码中很多地方充斥着判断变量是否为空,防止出现空指针异常。但是Actor模型的程序并不进行防御式编程,而是让Actor模型的管理者们来处理这些异常问题。每个Actor的异常信息都可以反馈到管理者那里,这就保证了系统在管理每个Actor实例时的灵活性。

 

获取相关资料
下载地址将会发送至您填写的邮箱
相关新闻
深入解析GB/T 28181:构建标准化视频监控网络
2024-10-23
Vue3快速入门
2024-10-23
skywalking快速入门
2024-10-22
  • 在线客服
  • 电话咨询
  • 微信
  • 短视频