前言
随着64位系统和多核计算机日益普及,如何通过并行来充分利用64位系统和多核环境下的计算资源成为系统设计和开发人员必须面对的问题。而多进程,就是解决这一问题的途径之一。GIS本身具有海量数据的特点,同样需要多进程这一并行途径来充分利用多核计算机的计算能力。
微服务架构是近几年出现的一种新型的架构模式,主张将一个应用划分为多个进程间隔离的服务。参考微服务架构的思想,SuperMapiServer设计实现了支持可视化配置、动态可伸缩的单机多进程架构。
为进一步丰富与完善多进程具有的优势,SuperMapiServer 在多进程的基础之上,提出了多实例的服务部署模式。本解决方案将帮助您了解如何以多实例的方式部署服务。
1 多进程与多实例
使用多实例需要基于iServer多进程,因此在介绍多实例之前,您需要先了解iServer 微服务多进程概念及其架构。
1.1多进程简介
基于微服务架构思想,SuperMapiServer设计实现了单机多进程架构。进程(Process)是在操作系统的控制下执行某个程序的活动。一般情况下一个GIS应用对应系统中的一个进程,如一个iServer服务启动后,就可以在系统的任务管理器中看到相应的Java进程。多进程(Multi-process)则是指某个应用可以在一个操作系统即单机环境下,同时开启和使用多个进程。
iServer单机多进程架构如图所示:
其中,Master与Worker、Damen的具体职责与交互关系为:
Master是iServer的主进程,负责启动、协调、管理当前系统中的所有节点即Worker。iServer多进程启用以后,当前的iServer会自动被识别为Master节点。为保证主节点的可用性,Master本身节点不负责处理具体的业务逻辑,如不提供GIS服务,不参与分布式切图。
Worker是由Master启动和管理的iServer进程。一个Worker对应一个端口的iServer,Worker支持服务发布、GIS请求处理,以及参与分布式切图。
Damen是iServer的监控进程,负责监控、启动Master节点,避免Master节点失效。启动一个iServer时Damen进程自动启动,您无需配置、管理该进程。
通过启用多进程可实现单机上的服务并行,SuperMapiServer在多进程模式的基础之上设计并提出了多实例,以进一步满足GIS并行需求。
1.2什么是多实例
首先,实例是指iServer服务实例,即运行在iServer中具体的服务实体,如map-China/rest。多实例特性是基于多进程工作模式,将一个服务自动扩展出多个完全相同的实例,并且每个实例分别运行在一个进程中,每个实例都可以独立处理请求。当多进程的主节点(Master节点)收到用户的请求后,根据特定算法,选择一个实例来响应用户的请求。iServer多实例结构如图2 所示:
1.3多实例应用场景
1.3.1避免高并发时服务访问效率低的问题
对于有高并发需求的服务,如果仅运行在单个进程中,必然会造成客户端长时间排队等待。如果服务被错误占用,还将导致该服务无法用于其他应用程序。
多实例是将同样的服务实例放入多个进程中,每个进程间相互独立,互不影响,因此可保证服务的可用性。当服务器收到相同服务的并发请求时,便可由多个进程处理,减少客户端的等待时间。
如图3所示,利用第三方测试工具,测试了同一服务在设置了不同实例个数时,服务点击率的变化情况。服务点击率即客户端每秒向服务器提交的请求数,服务点击率增加,表示服务响应速度提升。
1.3.2进一步解决单机资源利用率低的问题
多进程模式的主要优势包括对系统资源的集约利用,解决单机资源利用率低的问题。而多实例在此基础上,支持实例数量自定义配置,为系统资源合理分配提供了有效的优化方案。
对于负载高的服务,会占用较多系统资源,例如空间数据量大且较为复杂的地图服务,每次读取数据需消耗更多资源,因此可为该服务分配较多的进程,并与其他服务隔离在不同的进程中,以避免其他服务进行资源抢占,影响服务质量。
对于负载低的服务,为节约资源,通常的做法是与其他负载低的服务放置在同一进程中。但这种方式存在一定的风险,当进程意外停止时,该进程中的所有服务都将不可用。因此,在上述方式的基础上,为负载低的服务也启用多实例,并设置少量实例个数,既可以保证服务可用性,也避免了资源的浪费与闲置。
2如何配置多实例
使用多实例功能前,需要先开启iServer 多进程模式。
2.1启用多进程
目前,iServer提供了可视化的单机多进程配置来协助您在一个操作系统上快速地创建多个iServer 进程。您只需要启动多进程,iServer即可根据您指定的进程数自动创建、启动多个进程。
启用多进程意味着:当前操作系统中的iServer从单个进程变为多个进程,而禁用多进程则意味着从多个iServer进程变为单个进程。
您可以参考以下步骤在单机上配置并启用多进程:
访问 iServer 服务管理器,依次点击“服务”、“高级”、“多进程配置”
在多进程配置页面,勾选“多进程模式是否启用”,并根据您的系统配置设置 Worker 进程数(建议该 Worker 数与 CPU 核数相等,以获得最佳性能),此处设置为4
设置Java虚拟机内存。默认为1024M
设置主进程与子进程间的通信端口号,避免与其他端口冲突。修改后需重启iServer方可生效
根据您的网络状况,设置 Worker 进程的端口范围,默认为8900-9000,则 Worker 端口从8900开始依次增大
点击“保存配置”,iServer 将根据上述配置自动启动多个 Worker,同时弹出正在启动多进程的对话框,创建完成后该对话框自动消失
重启 iServer,使多进程配置生效
服务启动后,访问服务管理器中的“服务”、“多进程”页面,可以查看已经启动的各个 Worker,包括各 Worker 端口和自动部署的服务
注意:在多进程配置页面,启用或禁用多进程后,您都需要重启iServer才能生效。
2.2配置多实例
开启多进程模式后,可以在发布新的服务时设置启用多实例,也可以对已有的服务设置启用多实例。
下面将以iServer的示范数据China400工作空间为例,介绍如何将map-China400设置为多实例。
2.2.1示例:在快速发布中配置多实例
在服务管理“首页”点击快速发布一个或一组服务,选择数据来源为工作空间,然后进入下一步。
选择文件型工作空间,则可以选择发布本地或远程服务器上的工作空间,当服务不在本地或者使用 IE9、IE10、Chrome、Safari 浏览器时(由于受浏览器的安全控制, SuperMap iServer 无法获取欲发布工作空间的准确路径),“本地浏览”按钮不可用,请使用“远程浏览”。如下图所示:
点击“远程浏览”后,在弹出框中选择China400.smwu工作空间文件。
选择工作空间文件后,如果工作空间已加密则需输入工作空间密码,示例中该工作空间未加密。开启多实例时,需勾选“启用多实例”,并填入实例数量。点击“下一步”按钮。
选择服务接口类型,例如REST-地图服务,点击按钮“下一步”。
完成配置后,会弹出配置完成的对话框,如下图所示。点击按钮“完成”,即完成服务的创建。其中,点击“完成”后弹出的对话框会给出该服务访问地址的超链接。
进入服务管理器的“多进程”页面,可查看到已开启的4个进程中均部署了同样的服务实例map-China/rest。
2.2.2 示例:在服务管理中配置多实例
对于已发布的服务,可以在服务管理页面、服务组件配置页面来管理多实例,包括开启或关闭多实例,修改服务实例数量等。本节以发布的map-China400服务,介绍如何管理多实例。
开启或关闭多实例
进入 Master 节点的“服务管理”页面,在“服务提供者”一栏设置启用或关闭多实例,点击页面底部“保存”即可生效。
修改服务实例数量
对于其他服务来源(非工作空间)发布的服务,默认均发布为多实例,且实例数量与进程数相同。
在 Master 节点的“服务管理”页面设置服务实例个数。进入“服务管理”页面,在“基本信息”中修改“实例数量”,保存即可
在 Master 节点的“服务组件”页面设置服务实例个数。进入“服务组件”配置页面,在“基本配置”中修改“实例数量”,保存即可
3 注意事项
将包含文件型数据源的工作空间发布并配置为多实例后,该数据源是以只读方式打开的,因此将不支持修改操作,数据库型的数据源仍支持修改。
如果发布工作空间时未启用多实例,并使用2.2.2节所示方法开启多实例时,当该服务提供者仅用于一种GIS服务类型时,如仅用于地图服务的发布,配置才可生效。
如果设置的服务实例数量多于Worker的数量时,该服务实例将默认部署在每个Worker中。当增加Worker的数量后,服务实例将依照配置进行自动部署。