ENVI Services Engine(简称ESE)是Exelis VIS公司最新推出的云遥感服务解决方案,ESE是以服务方式部署遥感功能,即以Web Services 形式存在的IDL和ENVI在云端处理,客户端可以在线,按需(on-line,on-demand)请求遥感服务。ESE采用开源标准,与中间件无关的体系结构,可以将一个资源上部署的图像分析功能传递给多个平台,允许用户通过Internet在Web客户端或者移动客户端上进行大数据量的高级分析。
在阅读下面内容前,我们简单了解以下几个概念:
l 云计算
远程处理或储存,经常用于提高运算性能,扩展性,数据分配等。
l 集群Cluster
很多计算机连接在一起相当于一台计算机,为了分布式处理,高可用性和负载均衡。
l JSON (JavaScript Object Notation)
基于文本的开放式标准,旨在人可读的数据交换,拟替代XML。
l 中间件
处在ESE 和客户端中间的软件,如包括目录和影像服务。
l REST (REpresentational State Transfer)
定义了一组体系架构原则,您可以根据这些原则设计以系统资源为中心的 Web 服务,包括使用不同语言编写的客户端如何通过 HTTP 处理和传输资源状态。已成为一个主要的Web API设计模型。
l 可扩展性(Scalability)
工作量增加时,可以增加硬件资源以无缝处理这些工作。
l 网络服务器(Web server)
传递Web内容,且通过互联网可以访问。
l Web service
在互联网或者云上,以网络地址的形式提供的软件功能 (“永远在线”)。
l App
用于运行特定分析功能的处理客户端和任务。
ESE构架于主流的REST框架上并且能够运行在集群环境中,它具有可伸缩性和负载平衡功能,如图1是ESE运行的一个典型的流程图。ESE从客户端获得HTTP和REST请求,ESE执行遥感相关的处理请求,然后将结果传送给应用程序APP。ESE影像处理功能以JSON标准封装,可以与其他中间件(如ArcGIS Server)提供的影像数据服务无缝结合。
ESE中包括Master、Worker、Node Leader三种不同的运行角色:
Ø Master:从客户端接受请求、向Workers传递请求,它是一个节点的领导者而不运行IDL和ENVI;
Ø Workers:运行IDL和ENVI,具体执行任务;
Ø Node leaders:监视workers、重启workers(如有必要)等。
当不同客户端发送请求时,服务器上的Master进程将接收和应答请求。如果请求的是任务(Task)或者系统的信息,Master将信息返回给客户端。如果请求的是执行任务,那么Master就会将请求分配给它下面的Worker去具体执行,然后将执行结果返回给客户端。
Worker进程能够运行在ESE集群环境中的任何机器上。集群中的所有节点绑定了一个特定的Master主机,也就是说,集群环境中的一个节点运行着ESE可执行的实例,该可执行文件与集群中的其他节点一样与同一个master主机通信,该master主机可以通过服务器配置文件指定。节点的安装方式有两种:
l 通常,集群中的所有节点都运行同一个安装目录。安装目录可以驻留在网络文件系统(NFS)和分布式文件系统(DFS)挂载点上。
l 如果集群上的所有节点分享一个共同的“工作目录”,每个节点就可以有本地安装目录。
图1 可伸缩和负载均衡运行流程
目前ESE支持64位的Linux和Windows系统,安装ESE之前,确保机器上已经安装了ENVI/IDL产品。ESE安装之后可以通过“开始->程序->ENVI50->Help->ENVI Services Engine Help”启动ESE帮助。安装ESE之后会创建两个目录:一个是ESE目录(称为ESE_WORK_DIR);另一个用来存储IDL和ENVI文件。安装目录如图2。
图2 ESE安装目录
安装完成后,可以手动启动ESE服务如图3所示。
图3 启动ESE服务
配置文件能够设置ESE的安装环境。多台机器情况下,在该文件定义ESE的集群,所以它需要有权访问集群环境里的所有机器。通过该配置文件你可以更改主机、端口(默认端口:8181)以及设置是否使用ENVI函数,详见ESE帮助。注意在更改配置文件之前,先进行文件备份。
配置文件目录:
Linux:<ESE_WORK_DIR>/bin/server.cfg
Windows:<drive>:\Exelis\se10\bin\server.cfg
在ESE安装目录:\Exelis\se10\lib下存在一系列的IDL源码文件,例如!server__define.pro和verifyserver.pro。!server__define.pro定义了一个只读的系统变量!SERVER,将IDL程序运行的状态传递给客户端,!SERVER包涵一些属性(DATADIR、DOCROOT)和方法(filetourl、urltofile)。当调试IDL程序时,Verifyserver可以实例化一个服务器,自动实例化一个!server对象,如果运行在服务器上,Verifyserver将不起作用。
ESE安装之后,可以通过“开始->程序->ENVI50->Tools-> Services Engine Admin Console”启动ESE管理员控制台。该控制台是一个Web客户端,包括多个功能选项:Tasks、Data、Nodes、Jobs、Logs、About。
Ø Tasks下包括同步服务和异步服务,可以上传插件构建任务以及执行任务,见图4。
Ø Data下显示:\Exelis\se10\docroot\data路径下的数据
Ø ESE中包括Master、Worker、Node Leader,Master:从客户端接受请求、向Workers传递请求、不运行IDL和ENVI、是一个节点领导者。Workers:运行IDL和ENVI。Node leaders:监视workers、重启workers。
Ø Nodes下可以查看集群环境中的Master节点和执行任务的Workers数目,见图5。
Ø Jobs可以查看任务执行状。
Ø Logs包括详细的日志文件,可以通过查看日志文件,查找错误来源。
图4 任务(Tasks)功能项
图5 节点(Nodes)功能项
任务(Task)就是一个数据处理、可视化或者数据分析的IDL程序,每个任务都有一个JSON配置文件(config.json)。以下是任务构建的步骤,目的是获取相应的HTTP REST 服务以便客户端调用。
利用IDL语言,开发ENVI/IDL功能,例如计算NDVI、植被覆盖度、非监督分类等,ESE安装目录下提供了相关demo供参考。如果调用ENVI函数,ESE必须包含ENVI许可,服务配置文件server.cfg中的using_envi必须设置为yes。
IDL编写计算植被覆盖度程序如下:
JSON(Javascript Object Notation)是一种轻量级的文本格式,ESE使用JSON文件格式在服务器和客户端之间定义输入和输出参数。
JSON有固定的格式,每个参数的具体含义可以参考ESE 帮助。
计算植被覆盖度的IDL程序,对应的JSON文件为:
任务通过插件来部署,这里的插件非常简单,即IDL源码(.pro)文件和JSON文件(config.json)的压缩文件(ZIP格式)。
启动Services Engine管理员控制台,在Task选项卡下,选中Syncservices,点击Upload按钮,上传插件即ZIP压缩文件如图6所示。
图6 上传插件
图7 植被覆盖度任务
插件上传成功后,即可进行任务测试,选中上传的任务,点击Task Request Builder按钮,弹出Task Request Builder对话框,输入参数,点击Submit按钮,即可得到返回的JSON结果,结果中有执行IDL后返回的结果,见图8。
图8 任务测试
任务测试通过,即可在Task Request Builder对话框,点击Show Request按钮得到该任务的HTTP REST服务地址。
计算植被覆盖度的HTTP REST服务地址为:
http://tiandeshan:8181//ESE/SyncService/ese_vf/execute?InServiceAdd=http://localhost/arcgis/rest/services/Solar/ImageServer
HTTP REST服务地址格式为:
http:// : / / <</FONT>service> / / ?
Variable |
Value |
Description |
|
ESE |
可以在server.cfg文件中定义 |
|
Sync | Async |
可以在server.cfg文件中定义 |
|
IDL routine name |
任务的名称 |
|
execute | submitJob |
|
|
| & |
当任务没有输入参数时保持为空 |
|
= |
|
|
variable name |
变量的名字与任务的config.json中的参数名字一致 |
|
| | | | |
|
|
true | false |
|
|
null |
|
|
string |
单引、双引或者两者都不用 |
|
number |
64位整型或者浮点型 |
|
JSON |
详见JSON说明 |
获取了HTTP REST服务地址之后,即可在客户端进行调用,服务器和客户端处理流程如图9。
图9 ESE处理流程
这里的客户端可以是基于HTML和Javascript、Flex、Silverlight等开发的web客户端,也可以是移动客户端(IOS、Android)。
Silverlight 版本 4 提供了两种发送 HTTP 请求的方法:WebClient 和 HttpWebRequest。这里采用基于事件的异步编程模型WebClient发送HTTP请求。
Silverlight 客户端中的方法调用必须是异步调用,所以都有一个回调事件,在回调事件中解析返回的JSON,获得结果的URL,然后添加到Map控件中,进行显示。
Web客户端前端运行,速度非常快,Web前端界面展示如图10,运行结果如图11所示。
图10 计算植被覆盖度
图11 植被覆盖度计算结果