配置使用单机多进程 |
单个进程不能充分利用系统 CPU、内存等系统资源,而 GIS 服务因海量数据、计算密集等特点,对性能的要求较高,因此对于并行计算、多进程的需求强烈。为了充分利用系统资源,以前我们可以通过配置单机集群来实现在一个系统中启用多个 iServer 提供服务。其中涉及手工修改端口号等操作,较为繁琐。
目前,iServer 标准版、高级版、顶级版支持单机多进程,并提供了可视化的单机多进程配置来协助您在一个操作系统上快速地创建多个 iServer 进程。您只需要启动多进程,iServer 即可根据您指定的进程数自动创建、启动多个进程。此外,通过 iServer 多进程架构,您可以将每一份数据对应的服务部署独立的 worker 中,从而实现不同服务在进程间的隔离。
iServer 多进程架构中有一个 Master 和多个 Worker,以及用以监控 Master 避免其失效的 Daemon 角色。
启用多进程意味着:当前操作系统中的 iServer 从单个进程变为多个进程,而禁用多进程则意味着从多个 iServer 进程变为单个进程。
您可以参考以下步骤在单机上配置并启用多进程:
注意:在多进程配置页面,启用或禁用多进程后,您都需要重启 iServer 才能生效。
此外,您还可以通过iServer系统配置文件来配置上述信息,以及主进程与子进程间通信IP。
iServer 多进程的节点数支持动态伸缩,您可以根据系统情况和使用需求随时增加或减少节点。
增加或减少子节点的方法:
完成上述修改后,您可以在单机多进程页面查看当前正在运行的 Worker 子节点。
启用多进程以后,原 iServer 变成多进程的 iServer Master 节点,Master 则在在新增的 Worker 节点中自动部署 iServer 原有的 GIS 服务。由 Master 主节点来统一管理 Worker,包括各 Worker 的服务管理、安全管理、服务监控、访问统计、日志查看等。也就是说,您只需要在 Master 节点上,即可统一管理各个 Worker 上的所有 GIS 服务,您可以:
总之,启用多进程以后,虽然自动启动了多个 iServer 进程,但是您不需要对每个 iServer 单独管理。您只需要像以前管理单个 iServer 那样,通过原端口的 Master 节点即可统一管理所有 Worker 中的服务。
iServer 支持多服务实例,您可以动态设置服务实例个数,即为服务分配Worker数量。例如您设置某个服务的实例个数为n,则该服务将会被分配至n个Worker中,并由这些Worker处理该服务的请求。您可以通过以下几种方式配置多实例:
发布工作空间为GIS服务时,启用多实例的方式:
发布其他来源的GIS服务,默认发布为多实例,无需手动启用多实例,可直接通过如下方式修改实例数量:
如果您通过XML文件配置服务,可在服务提供者配置中增加参数以开启多实例,在服务组件配置中设置实例数量。具体如下:
<provider class="com.supermap.services.providers.UGCMapProvider" enabled="true" name="map-World"> <config class="com.supermap.services.providers.UGCMapProviderSetting"> <workspacePath>E:/supermap_iserver_801_4/samples/data/World/World.sxwu</workspacePath> <multiThread>true</multiThread> <poolSize>0</poolSize> <ugcMapSettings/> <useCompactCache>false</useCompactCache> <extractCacheToFile>true</extractCacheToFile> <queryExpectCount>1000</queryExpectCount> <ignoreHashcodeWhenUseCache>false</ignoreHashcodeWhenUseCache> <cacheDisabled>false</cacheDisabled> <isMultiInstance>true</isMultiInstance> </config> </provider>如服务来源不为工作空间时,则无需上述参数。
<component class="com.supermap.services.components.impl.MapImpl" enabled="true" instanceCount="3" interfaceNames="rest" name="map-World" providers="map-World"> <config class="com.supermap.services.components.MapConfig"> <useCache>true</useCache> <useUTFGridCache>true</useUTFGridCache> <useVectorTileCache>true</useVectorTileCache> <expired>0</expired> <cacheReadOnly>false</cacheReadOnly> </config> </component>
使用以上方式修改服务实例数量后,您可以进入“多进程”页面进行查看。此外,如果您设置的实例数量多于Worker的数量,将默认和Worker数量相同,该服务将会分配至所有Worker中。
配置实例个数的优势体现在资源的合理分配,例如对于资源消耗高的服务,多配置实例,使其得到更多资源,包括CPU、内存、网络带宽等。从而有效提升资源利用率,同时也优化了服务访问效率。
iServer 支持定期自动回收工作进程,开启后系统将定时检测并回收资源占用异常的工作进程。
启用工作进程自动回收的方法:
随着硬件技术的发展,一般计算机都是多核配置,都可以通过使用多进程的 iServer 来提高资源利用率。具体说来,以下场景可以较好地发挥多进程优势:
因 iServer 多进程划分服务时会把数据来源为同一工作空间的服务部署在一个 Worker 中,因此数据来源较多时使用多进程可以有效隔离不同数据的服务。
iServer 启用多进程后,所有 Worker 节点均作为切图节点自动参与分布式切图,因此可大大提升单机切图的效率。
在数据推送方面,通过传统方式(如通过多机集群搭建分布式切图环境)进行分布式切图,集群父节点需要向每个子节点都推送任务数据。而基于多进程创建的分布式切图任务,对于只读的数据文件,如只读的 UDB 数据源、SMTiles 文件等,集群的父节点只需推送一份任务数据至子节点中的指定位置,子节点(开启了多进程)的各个 Worker 在切图时从该位置获取数据即可。随着切图任务的数量增加,需要推送的数据也在增加。为保证切图效率,每个Worker 节点都参与切图,节点之间并不存在明显差异,因此基于该方式,您可以对推送的数据进行统一管理。
如果是单机多进程模式下进行分布式切图,则更无需推送任务数据,worker 节点切图时可直接从 Master 获取数据,从而节省了数据推送时间,提升切图效率。
多进程架构默认采用了 8900-9000 端口,用于启动 HTTP 服务,请确认这些端口不被占用,否则将不能正常使用多进程。
关于 SuperMap iServer 默认使用的所有端口,请参考:端口介绍。