27 April 2023

最近看到一个 PCT 国际标准,主要理念是根据OPC UA客户端的用户身份和证书信息确定能在服务器中访问的数据,通过负载均衡和服务编排动态创建 OPC UA 服务和地址空间数据,提供数据给客户端,从而可以提升OPC UA服务器扩展性。

这个专利的整体方案如下:

Background System后台系统OPC UA 服务器OPC UA 服务器OPC UA 服务器OPC UA 服务器负载均衡器OPC UA 客户端OPC UA 客户端OPC UA 客户端OPC UA 客户端

在这个方案中,后台系统是数据源,它可以是中心化的数据分析服务器,给各个工厂提供数据,而每个工厂是一个客户端,只能访问有权限读取的数据。它也可以是其他数据服务器,每个客户端会访问数据服务器的一部分数据。

具体实现来说,客户端通过网络中的多个OPC UA服务器实例访问后台系统数据。服务器动态生成地址空间,负载均衡器分发工作负载给各个服务器。专利中指出 OPC UA 服务器都具有相似的功能和性能。因此,也可以通过容器的方式管理 OPC UA 服务器。这时候,可以用多种容器编排的方式进行动态扩展。

负载均衡器管理服务器的生命周期。如果每个服务器的负载都超出了额定能力,则创建一个新的服务器接受会话请求。如果某个服务器超出一定时间没有活跃会话,则被负载均衡器移除,以释放资源。

对于均衡器来说,最佳的负载均衡机制就是把新的OPC UA客户端通讯会话转发到已建立的工作会话最少的服务端。其他的负载均衡机制还有以轮询(round robin)的方式分发客户端会话请求。

为了简化负载均衡器的工作,提升其工作效率,OPC UA 服务器的性能可以通过添加新的实例的方式进行横向扩展。也就是说,每一个服务器都可以提供相同的地址空间信息。而所有这些地址空间信息都是通过一个共同的后端系统提供。然而,服务器不一定暴露完整的地址空间,可以根据客户端的需要提供地址空间的切片。而且这个切片也可以动态变化,以满足不同客户端的需求。服务端提供切片的依据可以是客户端用户凭证,或客户端应用证书。

收到服务请求地址空间是否实例化?地址空间是否有预存的信息模型?实例化地址空间发送服务请求给客户端

以上流程图就是均衡器响应OPC UA客户端请求的过程。

均衡器收到来自客户端的服务请求,查询是否有服务器能提供地址空间实例,如果没有,则根据客户端的请求动态地创建地址空间实例。

如果没有,就自动扩展OPC UA服务器资源。动态管理OPC UA提供的地址空间(Address Space)。动态创建的地址空间发送地址空间请求到后端系统,并且从接收来自后端的地址空间信息。

负载均衡器是客户端和服务器之间的一个透明路由,在以下任何情况下,客户端不与服务器建立直接连接,只通过负载均衡器与服务器建立连接,包括

  • 建立会话、
  • 会话操作、
  • 会话结束。

负载均衡器则只负责转发客户端和服务器之间的通讯,不关心通信内容。

这个专利的应用价值:

  • 通过多个服务器保障平滑的功能扩展
  • 可以利用服务编排工具满足零停机(zero downtime)需求
  • 通过自动添加服务器满足服务性能要求,且不影响已经建立的链接