作者:doremi

GIS服务器很多时候都会存在着高并发的请求,而SuperMapiServer也提供了相应的负载均衡方法,集群以及多进程多实例,让GIS服务器的高并发,高性能方面得到很大的提升。下面将介绍这两种方法的特点以及应用场景。
####集群

集群体系中包含以下角色,不同的角色通过各自不同的操作来构建整个集群体系:
集群父节点:即集群服务器,是集群服务的提供者,负责监听和协调子节点的服务器,可以通过使用集群中的使用本地集群服务实现对外提供GIS 服务,通过配置集群查看和控制子节点的加入;
集群子节点:,执行父节点分配的任务,可以通过加入集群向集群父节点报告,成为集群体系的一员;
GIS 应用服务器:客户端直接访问的GIS服务器,如果是由集群父节点兼任,则使用方式同集群父节点,如果是独立的服务器,则可以通过使用集群中的使用其他集群服务实现对外提供GIS 服务.

集群子节点加入集群后,会每隔2秒向父节点报告一次,集群父节点收到报告后,认为该子节点是可用的子节点,且该子节点会出现在集群服务器的“集群成员列表”中。当客户端或GIS应用服务器向集群服务器(父节点)发送请求时,集群服务器会基于负载均衡原则将任务分配给各个集群成员(子节点),如下图所示。集群成员响应请求并将响应的结果返回给集群服务器,集群服务器再将收到的响应结果返回给发送请求的客户端或GIS应用服务器。例如客户端浏览地图时,收到的地图切片可能来自不同的集群成员,而不是仅来自客户端请求的集群服务器。在以下情况集群服务器会判定集群成员超时,不会给该成员分配任务或将已分配的请求任务转发给其他节点处理:
如果集群成员超过2秒未向集群服务器报告,即连接超时,则集群服务器会认为该成员无效;
如果集群成员响应请求的时间超过2分钟,即响应超时,则集群服务器会认为该成员响应超时,会将请求转发给其他节点处理。

使用集群

GIS 应用服务器是为客户端直接提供GIS 服务的服务端,通过使用集群可以提升GIS 服务的性能和负载量,集群系统将以本机GIS 应用服务器为出口向客户端提供高性能的服务。
GIS应用服务器使用集群的方式有以下两种:

使用本地集群服务,如图1所示,即集群的父节点作为 GIS 应用服务器对外提供服务,客户端可以直接访问集群父节点;

使用其他集群服务,如图2所示,即 GIS 应用服务器本身不属于集群服务的一部分,它的作用是接收客户端请求,并转发给集群服务器父节点处理,本身只起到转发请求的作用。

配置集群
多个GIS 服务器可以通过搭建集群,提高性能。默认情况下,SuperMapiServer 的 GIS服务器均开启集群功能,随时可以接受子节点加入。

集群父节点即集群服务器,其主要职责是监听和协调子节点执行相关任务,可以对整个集群系统进行安全控制,可以查看集群成员(子节点)并决定是否允许其加入集群。集群父节点可以“开启”安全控制,来控制子节点的加入。

受控集群
SuperMapiServer支持子节点以受控的方式加入集群。这种集群配置方式简单快速,适合于子节点空闲的情况,子节点本身不需要对外提供服务而可以接受父节点的控制。子节点一旦开启了受控集群,就要受到父节点的完全控制,其自身原有的服务实例和服务管理器都将被禁用,父节点的服务实例和数据将同步到子节点。其中,服务组件集合对应的服务实例、空间处理服务将被过滤不同步到子节点。
子节点作为受控模式的集群成员,仅用于处理父节点转发的请求

如上图所示,在一个集群体系中,可以同时存在受控的子节点(标识2)和非受控子节点(标识3)。
子节点开启受控集群后,父节点会自动将服务和相应的数据同步到子节点上,这样子节点就具有与父节点相同的服务,父节点就能把客户端请求转发给子节点处理。
集群可以配置单机集群和多机集群,如果服务器的硬件性能很好或者说是没有更多的服务器的时候可以配置单机集群,单机集群需要注意的是,保证父节点、各个子节点分布使用不同的端口。以SuperMap iServer 在 windows平台的 ZIP产品包为例,两个产品包之间配置集群时,需要保证不同产品包中的Tomcat 使用不同的端口。修改zip 包中 Tomcat的端口号方法为修改%SuperMapiServer_HOME%/conf/server.xml 中的相关端口,如:

####单机多进程
单个进程不能充分利用系统CPU、内存等系统资源,而GIS服务因海量数据、计算密集等特点,对性能的要求较高,因此对于并行计算、多进程的需求强烈。为了充分利用系统资源,以前我们可以通过配置单机集群来实现在一个系统中启用多个iServer 提供服务。其中涉及手工修改端口号等操作,较为繁琐。
目前,iServer提供了可视化的单机多进程配置来协助您在一个操作系统上快速地创建多个iServer 进程。您只需要启动多进程,iServer即可根据您指定的进程数自动创建、启动多个进程。此外,通过iServer 多进程架构,您可以将每一份数据对应的服务部署独立的worker 中,从而实现不同服务在进程间的隔离。

多进程架构
iServer多进程架构中有一个Master 和多个Worker,以及用以监控Master 避免其失效的Daemon 角色。

Master 是 iServer 的主进程,负责启动、协调、管理当前系统中的所有节点即 Worker。您启动 iServer 中的多进程后,当前 iServer 会自动被识别为 Master 节点。为保证主节点的可用性,Master 本身节点不负责处理具体的业务逻辑,如不提供 GIS 服务,不参与分布式切图。

Worker 是由 Master 启动和管理的多个 iServer 进程,一个 Worker 对应一个端口的 iServer 进程,可以支持服务发布、GIS 请求处理,以及参与分布式切图。

Daemon 是 iServer 的监控进程,负责监控、启动 Master 节点,避免 Master 节点失效。启动一个 iServer 时 Daemon 进程自动启动,您无需配置、管理该进程。

配置使用多进程
启用多进程

启用多进程意味着:当前操作系统中的iServer从单个进程变为多个进程,而禁用多进程则意味着从多个iServer进程变为单个进程。

根据您的系统配置设置 Worker 进程数(建议该 Worker 数与 CPU 核数相等,以获得最佳性能),默认为2

根据您的网络状况,设置 Worker 进程的端口范围,默认为8900-9000,则 Worker 端口从8900开始依次增大
注意:在多进程配置页面,启用或禁用多进程后,您都需要重启iServer才能生效。

动态增加子节点

Server多进程的节点数支持动态伸缩,您可以根据系统情况和使用需求随时增加或减少节点。
完成修改后,您可以在多进程页面查看当前正在运行的Worker 子节点。

管理多进程的GIS 服务

启用多进程以后,原iServer 变成多进程的iServer Master 节点,Master则在在新增的Worker 节点中自动部署iServer 原有的 GIS服务。由 Master来管理由 Master主节点来统一管理Worker,包括各Worker 的服务管理、安全管理、服务监控、访问统计、日志查看等。也就是说,您只需要在Master 节点上,即可统一管理各个Worker 上的所有GIS 服务,您可以:

在 Master 节点的“服务列表”页面统一访问服务,虽然访问服务的地址还是原 iServer 的地址,但访问具体的服务时,Master 会将请求映射给相应的子节点

在 Master 节点的“服务管理”页面统一管理服务

在 Master 节点的服务管理器中发布服务,Master 会根据负载自动把服务部署在某一个 Worker 中

在 Master 节点的“安全”模块统一管理用户账户等权限控制信息,安全配置对所有 Worker 都适用且您不会感受到 Worker 的存在

在 Master 节点的“监控与统计”模块监控所有服务的访问状态、统计服务访问数据等
总之,启用多进程以后,虽然自动启动了多个 iServer 进程,但是您不需要对每个 iServer 单独管理。您只需要像以前管理单个 iServer 那样,通过原端口的 Master 节点即可统一管理所有 Worker 中的服务。

配置多服务实例

iServer多进程模式支持多服务实例,您可以动态设置服务实例个数,即为服务分配Worker数量。例如您设置某个服务的实例个数为n,则该服务将会被分配至n个Worker中,并由这些Worker处理该服务的请求。您可以通过以下几种方式配置多实例:

通过服务管理器配置多服务实例

发布工作空间为GIS服务时,启用多实例的方式:

发布工作空间时,勾选“启用多进程”,并设置实例数量。依照发布工作空间步骤继续配置即可。启用多实例后,如果不设置实例数量,则默认与Worker数量一致。

对于已发布的工作空间,可在 Master 节点的“服务管理”页面,服务提供者配置中启用多实例。当该工作空间发布了两种及以上类型的服务时,此方式不可用。

修改实例数量方式包括以下两种方式。同时,对于其他来源的GIS服务,无需手动启用多实例,可直接通过如下方式修改实例数量:

在 Master 节点的“服务管理”页面设置服务实例个数。进入“服务管理”页面,在“基本信息”中修改“实例数量”,保存即可。

在 Master 节点的“服务组件”页面设置服务实例个数。进入“服务组件”配置页面,在“基本配置”中修改“实例数量”,保存即可。

通过XML文件配置多服务实例
如果您通过XML文件配置服务,可在服务提供者配置中增加参数以开启多实例,在服务组件配置中设置实例数量。具体如下:

在服务提供者配置中增加true,开启多实例,例如:

如服务来源不为工作空间时,则无需上述参数。
在服务组件配置中,通过修改instanceCount的值,修改服务实例数量。

<componentclass="com.supermap.services.components.impl.MapImpl" enabled="true" instanceCount="3"interfaceNames="rest"
name="map-World" providers="map-World">

使用以上方式修改服务实例数量后,您可以进入“多进程”页面进行查看。此外,如果您设置的实例数量多于Worker的数量,将默认和Worker数量相同,该服务将会分配至所有Worker中。
配置实例个数的优势体现在资源的合理分配,例如对于资源消耗高的服务,多配置实例,使其得到更多资源,包括CPU、内存、网络带宽等。从而有效提升资源利用率,同时也优化了服务访问效率。

使用场景
随着硬件技术的发展,一般计算机都是多核配置,都可以通过使用多进程的iServer 来提高资源利用率。具体说来,以下场景可以较好地发挥多进程优势:

GIS 服务数量较多,且对应多个工作空间数据。
因 iServer 多进程划分服务时会把数据来源为同一工作空间的服务部署在一个 Worker 中,因此数据来源较多时使用多进程可以有效隔离不同数据的服务。

分布式切图。
iServer 启用多进程后,所有 Worker 节点均作为切图节点自动参与分布式切图,因此可大大提升单机切图的效率。
依照传统方式进行分布式切图,如通过集群搭建的分布式切图环境,集群父节点需要向子节点中推送任务数据。
而基于多进程创建分布式切图任务,对于只读的数据文件,如只读的 UDB 数据源、SMTiles 文件等,集群的父节点只需推送一份任务数据至子节点中的指定位置,子节点的各个 Worker 在切图时从该位置获取数据即可。
随着切图任务的数量增加,需要推送的数据也在增加。为保证切图效率,每个Worker 节点都参与切图,节点之间并不存在明显差异,因此基于该方式,您可以对推送的数据进行统一管理。
而对于单机多进程模式下进行分布式切图,无需推送任务数据,worker 节点切图时可直接从 Master 获取数据,从而节省了数据推送时间,提升切图效率。
注意事项
多进程架构默认采用了8900-9000端口,用于启动HTTP服务,请确认这些端口不被占用,否则将不能正常使用多进程。

采用多实例后的性能提升效果

总结

以上两种方法需要客户根据自身的条件来进行选择。理论上来讲,多机的集群方式一般要比单机的集群方式效果更好。如果有多台服务器可用,可以采用多机集群(需要多个许可);如果没有足够的硬件设备的支持,可以采用单机集群(只需一个许可)或者多进程多实例的方式,但单机方式我们更推荐多进程多实例来使用。

举报/反馈

SuperMap技术控

37获赞 176粉丝
北京超图软件有限公司技术支持号
关注
0
0
收藏
分享