WPS远程社区模块

geoserver wps远程模块允许发现、运行和监视一台或多台远程计算机上运行的进程,通过wps协议公开这些进程,并允许同步和异步运行相同的进程,最终进行进度监视。

远程进程可以是任何东西,从python脚本或命令行可执行文件。唯一的约束是让一个远程组件能够处理几个RPC,比如运行、进度、完成(这意味着收集结果并将其发送到地理服务器机器)、执行错误(这意味着如果发生任何错误,则报告异常)和终止。在geoserver方面,模块管理相同的RPC,以执行与WPS的集成。作为一个合适的跨语言通信系统,所有的通信和命令都通过XMPP协议进行。

远程端的参考实现可以在https://github.com/geoserver/wps-remote上找到,这是一个可配置的用于远程命令的python/xmpp包装器。python-xmpp包装器驻留在远程机器中,能够通过json编码的xmpp消息向主体发送远程进程的表示,进程输入/输出参数描述符及其类型。在geoserver端,wps远程模块自动识别并加载远程客户端的xmpp实现。geoserver插件能够查询新的可用服务,取消对其输入和输出的整理,并为geoserver wps构建适当的流程包装器以供使用。在执行时,新进程能够与远程客户端插件实现交互,以便向service.py发送请求,跟踪远程进程的状态并在末尾获取输出。

通过geoserver wps和xmpp协调远程可执行文件

远程WPS基础结构旨在运行外部程序。 异步 通过标准 OGC工作包 远程机器上的协议接口,并通过 XMPP协议 .

基础设施依赖于 XMPP服务器 (可以是外部的或嵌入的)为了实现 消息传递分布式基础设施 它使用XMPP协议在GeoServer实例和远程计算机上运行的可执行文件之间交换控制和状态消息。

基于python的框架与addoc geoserver插件一起,通过将启动远程计算机上运行的外部可执行文件的自定义机制与在geoserver中调用符合ogc wps的进程的标准方式分离来管理和转换xmpp消息。

OGC WPS进程I/O映射是由远程WPS地理服务器插件在运行时自动生成的。每当框架识别在xmpp通道上声明的新外部可执行文件时,远程wps geoserver插件就会创建等效的ogc wps兼容接口,并在geoserver和外部可执行文件之间建立通信。每次一个geoserver用户启动一个新的符合ogc-wps的进程运行时,基础结构都会执行对外部可执行文件的调用,并负责异步管理两个实体之间的通信。

远程WPS GeoServer插件提供了一个新的 ProcessFactory 它负责在运行时自动注册/注销符合OGC WPS的进程。新创建的geoserver processfactory将根据WPS执行请求在XMPP服务器的帮助下执行编排,该服务器通过与python框架的交互为远程节点提供开箱即用的节点状态发现和负载平衡功能。

Orchestrator还负责将远程计算机上运行可执行文件生成的消息重定向到正确的geoserver进程,反之亦然。通过python框架包装器在远程主机上运行的可执行文件将生成进度信息,这些信息将通过xmpp发送回Orchestrator。

需要注意的是,有两个级别的负载平衡。一个在地理服务器端,另一个在远程处理节点端。geoserver负载均衡器将知道哪个用户请求了处理,并且能够强制执行与之相关的系统和资源限制;例如,一个用户将无法并行运行超过m个进程,并且将为输入和输出分配配额它的执行。Orchestrator将与XMPP服务合作,负责平衡远程主机上某个可执行文件的负载,并在多台远程计算机上部署了某个可执行文件的情况下,决定向何处发送新的执行请求。

还要注意,组成集群的geoserver实例将共享一个特定目录,其中存储WPS特定资源。

调用远程进程并使用结果

作为对geoserver wps execute调用的结果,python框架包装器将通过命令行调用远程主机上的可执行文件,以响应通过Orchestrator xmpp消息接收的执行命令。

在远程机器上,python框架包装器和脚本将充当XMPP客户机,提供以下功能:

  • 使用最终用户从GeoServer Process Orchestrator提供的输入启动命令行可执行文件

  • 将进度和执行状态发送回Orchestrator状态消息

  • 从Orchestrator接收最终控制消息以暂时终止正在运行的执行

  • 执行清理操作,如查找僵尸执行并杀死它们或从旧执行中删除文件系统上的过时文件。

  • 执行新远程可执行文件的运行时发现

下图显示了geoserver远程WPS插件和python框架包装器之间的交互。整个通信是通过XMPP协议实现的。python框架提供了一组脚本和包装器,允许调用外部可执行文件并通过将命令和输出转换为要由geoserver发送和接收的xmpp消息来管理整个执行过程。

../../_images/orchestrator2.png

如上所述,远程可执行文件应遵守特定的合同,以完全支持所有这些功能。作为一个例子,终止现有执行的能力很大程度上依赖于当前进程解释了这个功能,否则我们必须尝试使用操作系统调用来终止它。在某些情况下,这可能需要最终用户围绕遗留可执行文件创建包装器。

通过将新的属性文件添加到Python模块已知的位置,将支持新的远程可执行文件的运行时发现。由于python包装器将通过XMPP消息与geoserver编排器交互来传递新可执行文件的存在,因此新的符合ogc wps的进程将直接向geoserver公开,而不必为新的远程可执行文件重新启动geoserver本身。由于python框架脚本所实现的功能,最终用户将在远程机器上看到与ogc wps兼容的过程与属性配置文件一样多。

此类属性文件的示例如下:

[Description]
service = Service
namespace = default
description = A dummy service, replace with your own description
executable = process.py
process_buffer = 0
result_size = 0
active = True

[Options]
customargs = --path=D:\user\
argformat = --key=value
debug = True

[Input]
name = {"type": "string", "description": "A person name", "enum": ["Hans", "Peter", "Alex", "Michi"],
"default": "Hans", "max": 1}
surname = {"type": "string", "description": "A persons surname", "max": 1, "default": "Meier"}
child = {"type": "string", "description": "A child name", "min": 0, "max": 10}

[Output]
welcome = {"type": "string", "description": "A welcome message"}
goodbye = {"type": "string", "description": "A goodbye message"}

警告

上面的配置是远程进程包装器配置的一个简化的非工作示例。以上示例的范围只是为了更好地理解高级场景,并不打算在实际用例中使用。

部署关系图

../../_images/deploy_diagram.png

该图显示了 变更检测 在远程计算机上运行并作为GeoServer WPS进程公开的可执行文件认为 WPS Remote Plug-in .

  • 外部用户使用符合OGC WPS的协议通过GeoServer发出处理请求。

  • 地理服务器远程WPS插件,多亏了WPS RemoteProcessFactory,将能够公开进程I/O映射和进程描述符,并通过以符合OGC的方式向用户提供反馈来处理整个执行过程。

  • 在可执行文件所依赖的远程机器上,在进行实际计算的地方,python框架通过使用包装器和ad h.o.c.脚本,通过xmpp协议透明地处理与远程插件的通信。

  • 中间的XMPP服务器处理安全的通信通道,确保端点正确注册到系统并能够交换消息。

  • 结果通过共享文件夹进行交换。

安装和配置步骤

以下部分将指导用户部署和配置示例 杏仁体轮廓 命令通过WPS远程插件公开为GeoServer WPS进程。

示例将显示在两台不同的计算机上配置和部署整个示例的分步过程:

  • 使用WPS远程插件和OpenFire XMPP服务器部署geoserver的命令将在CentOS最小计算机上执行。

  • 部署WPS远程xmpp python包装器和gdal的命令将在Windows7+计算机上执行。