设计应用

基于AIO模型的高效通信架构在光伏终端数据采集的应用

作者:魏晓蔚,绳 洁,岳玉先,汝锐锐
发布日期:2020-01-16
来源:2018智能电网增刊

0 引言

    太阳能是目前最为清洁和安全的可再生资源,是传统化石能源的最佳能源替代品。但是太阳能的地理分布广泛,需要较大的采集面积,因此太阳能的利用注定是分布式的结构。光伏发电将太阳能直接转化为电力资源,对太阳能的利用率比较高,但是其发电装置必然离散地分布在相对广范的地理范围内。因此,对于发电装置的管理、监测、控制,必然需要通过远程通信来实现,并确保数据传输的安全、稳定、高效。

    随着智能电网技术的发展,目前对于光伏发电终端的数据通信手段,基本上采用基于TCP/IP网络通信方式。经过多年的技术进步和发展,网路通信组件的模型的发展大体上经历了BIO(同步阻塞)、NIO(同步非阻塞)、AIO(异步非阻塞)3个阶段。

1  BIO—同步阻塞模型

    BIO是基于传统的基本C/S模型,着重于两个进程间实现网络通信。其中,服务端提供基于服务本地的IP和端口号的网络侦听服务;客户端向该侦听发起通信连接请求,经过3次请求和应答握手,在成功后双方建立基于同步阻塞式的Socket的通信连接。

    BIO模型在服务端的实现一般需要一个常驻的线程(侦听线程),用于维持网络侦听服务;并维护一系列线程(处理线程),用于每个连接的处理。当客户端发起一个请求后,服务侦听线程会检查当前持有的处理线程中是否有闲置资源:如果有,则将连接请求转入线程进行处理;如果没有,则新建线程用于处理,并在无法新增线程时,侦听线程需要持续等待,直到有处理线程资源释放。在处理线程中,对连接的后续传输处理完成后,通过网络输出流发送应答给客户端。

    BIO可以引入线程池进行优化[1],其网路服务支持能力会得到一定的提升,优化后的BIO的模型结构如图1所示。

wxw-t1.gif

    在这种模式下,存在两个问题:(1)在处理线程资源紧张时,侦听线程处于阻塞状态,无法响应新的连接请求;(2)每个连接必须用独立的线程进行处理,在连接请求徒增的高并发场景下,服务端缺乏必要的处理伸缩弹性,在硬件处理上限不变的情况下,无法适应急速增长的连接请求和传输处理。因此,在高并发网络应用环境下,BIO会发生会出现大量的请求连接超时,服务端资源消耗持续在高水位,最终导致整体的服务处于瘫痪状态。

    BIO模型能够支持的稳定并发连接一般不超过3 000。在光伏发电领域的背景下,基本上无法满足对于大量分布式发电设备的通信支撑要求。

2  NIO——同步非阻塞模型

    在BIO使用过程中,在高并发和高吞吐的网络环境下,服务端通常只能保证1 024~2 048个套接字连接,这对于广域网并发访问,显然是不够的。NIO的出现就是针对BIO在实战中对于网络服务支持的不足。

    同步非阻塞模型,采用Reactor基础设计模式——基于事件驱动的同步式基础设计模式[2]

    首先,采用channel对连接进行抽象,将连接同具体的线程资源脱离开,解除了BIO中连接和线程之间的1:1对应关系,使得连接空闲时(无数据传输时),线程资源得以回收并重用。

    其次,提供同步式的事件分离调度器(实际是多个分离器,以优化连接管理和调度),将每个channel的读事件和写事件在分离调度器中进行事件注册和网络连接注册,分离调度器定时扫描网络连接注册,当某个网络连接有事件触发时,分离调度器器才申请公共资源池中的线程资源进行处理,并加载时间注册进行回调操作。

    最后,在NIO中特别提供了公共缓冲区——buffer,使得所有的读写数据,都存放在公共缓冲区中,读写事件被回调激活后,也是将特定缓冲区中的一块资源调度给事件进行读写操作。这打破了BIO中每个连接被隔离开的内存管理,而是使得不同连接共享和复用内存,并在空闲时不再持有内存。

    NIO模型在经过系统架构和算法优化[3]后,其主要结构如图2所示。

wxw-t2.gif

    NIO在理论上可以支持高达1万的客户端并发实时连接(保持连接,并且不停地进行数据传输),对于并发非实时连接(保持连接,数据通信的间隔不小于30 s)可以支持超过3万客户端[4]。因此,NIO初步满足光伏发电领域的小范围数据通信要求,但是对于更加广域的发电终端连接就力不从心了,需要性能更加强大的长连接并发架构来解决问题。

3  AIO——异步非阻塞模型

    在NIO的结构中,需要向分离调度器注册连接和读写事件,用于在网络连接后,传输通过调度分离之后回调实际处理功能。在这个结构中,调度分离器实际上长时间处于高负载状态,即使所有连接都没有发生传输,依然需要不停地扫描注册连接和事件,在客观上调度分离器消耗了更多的系统资源。

    由于每个调度分离器内是串行循环扫描连接池和事件池,所以在响应速度上不可避免地有一定的延误,尤其在高负载高并发的应用场景下,扫描周期会更长,或者创建更多的分离调度器,消耗更多的资源以换取扫描周期的缩短。在这种情况下,系统的资源和负载会被大量的额外消耗,用于实际网络服务和业务处理的资源会被挤占。

    异步非阻塞模型采用Proactor基础设计模式——基于事件驱动的异步式基础设计模式[5-6]

    通过API向操作系统的网络服务注册异步连接读写事件,以及相应的数据缓冲区。

    当操作系统在底层发生网络数据传入时,操作系统将数据写入响应的连接读取缓冲区,并在写入完成后通知注册的AIO读取事件;在应用中的AIO接收到读取事件后,通过API将读取缓冲区的数据取出用于业务处理。

    当业务功能需要发送数据时,调用AIO的发送API,将数据写入发送缓冲区,操作系统的底层服务会从发送缓冲区获得发送数据,并通过操作系统底层网络服务执行发送操作,在完成后通知AIO注册的写事件,通知发送任务已经完成。

    本文中AIO网络服务模型已经实际应用于山东某地的光伏发电项目,模型实现的具体结构如图3所示。

wxw-t3.gif

    在AIO模型中取消了用于周期性扫描和调度的分离调度器,基本上消除了冗余的资源消耗。操作系统的底层网络服务通过AIO的异步事件,直接与应用进行异步交互,使得网络IO与业务处理通过共享数据缓冲区进行交互,同时又在线程任务处理上被分离开,极大地提升了网络传输的长连接、高并发能力和数据高吞吐能力。

    在理论上,AIO的性能取决于业务处理和操作系统的底层网络服务能力,理论上AIO模型不存在严重阻碍网络传输的瓶颈。在现有的实际服务器和网络环境下,AIO模型可以稳定支持高达10万的并发长连接。所以,AIO模型对于广域分布式的光伏发电设备的数据传输,可以提供足够的并发支撑,可以满足现有光伏发电应用的要求。

4  模型比较

    通过前文对于各种网络通信模型的介绍,本文对各种模型进行汇总比较,以便于更加直观地反映各种模型的能力,以及在光伏发电领域的应用前景。各种模型的具体对比数据如表1所示。

wxw-b1.gif

    (1)BIO :同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情,将会造成不必要的线程开销,实际实现时,可以采用线程池进行优化。

    (2)NIO:同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到分离调度器上,分离调度器轮询到连接有I/O请求时才启动一个线程进行处理。

    (3)AIO:异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的网络I/O请求由OS先完成数据操作,再通知服务器应用去启动线程进行处理。

    据此,可以分析并得出BIO、NIO、AIO的优缺点,以及它们适用的应用场景。

    (1)BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,但系统框架和实现直观简单,易理解。

    (2)NIO方式适用于连接数多且连接比较短(轻操作)的架构,并发局限于应用中,结构相对与BIO比较复杂。

    (3)AIO方式使用于连接数目多且连接比较长(重操作)的架构,充分调用操作系统参与并发操作,结构相比于NIO更加复杂。

    基于异步非阻塞通信(AIO)模型构建的数据通信服务,已经被应用于山东某地的光伏发电项目中,从结构上对光伏发电管理的数据拓扑进行了改进和优化,提升了对于发电终端的管理能力,提高了数据传输和通信的性能上限。改造前后,该项目的设备和网络拓扑结构如图4所示。

wxw-t4.gif

    从改造前后的对比可以看出,借助AIO的高并发高吞吐性能优势,在通信拓扑中节省了转发设备,精简了部署的拓扑结构;在数据通信中由于更加简化的架构,减小了通信异常发生的几率;对于项目本身,降低了实施的设备成本,并且提高了系统的可维护性。

5  结论

    本文面向光伏发电领域的发电设备数据通信需要,针对其分布广、离散度高的特点,分析现有的典型网络通信结构,确立了异步非阻塞模型在光伏发电数据传输中,可以提供更加强大的基础网络服务能力,可以很好地支撑相对广域范围内的大量光伏发电设备的高并发、高吞吐数据传输要求,可以作为光伏发电信息化管理服务的基础传输解决方案,并提供高可靠的数据传输保障,可以作为光伏发电的智慧化和智能化建设的网络框架基础。

参考文献

[1] 王伟平,杨思勤. 基于NIO的高并发网络服务器模型的研究与设计[J]. 硅谷, 2009(17): 18-19, 35.

[2] 叶柏龙,刘蓬.  Proactor模式的NIO框架的设计与实现[J]. 计算机应用与软件, 2014(9): 110-113.

[3] LIBMAN A, GILBOURD V, 罗小平. 两种高性能I/O设计模式的比较[J]. 程序员, 2007(4): 108-111.

[4] 乔平安 , 颜景善 ,周敏. 基于Linux系统的构建高性能服务器的研究[J]. 计算机与数字工程, 2016, 44(4): 653-657.

[5] 李璞, 张玲, 胡术, 等. 多线程环境下Reactor模式的研究与实现[J]. 网络新媒体技术, 2017(2): 52-57.

[6] 刘蓬. NIO高性能框架的研究与应用[D]. 长沙: 湖南大学, 2013. 



作者信息:

魏晓蔚,绳  洁,岳玉先,汝锐锐

(国网山东省电力公司聊城供电公司,山东 聊城 252000)

此内容为AET网站原创,未经授权禁止转载。
光伏发电 网路通信 数据传输 AIO