一种微服务架构可自动伸缩的GIS服务装置及其控制方法与流程

文档序号:12491601阅读:306来源:国知局
一种微服务架构可自动伸缩的GIS服务装置及其控制方法与流程

本发明涉及一种微服务架构可自动伸缩的GIS服务装置。此外,本发明还涉及一种基于该GIS服务装置进行自动伸缩的控制方法。



背景技术:

GIS(Geographic Information System:地理信息系统)应用服务器作为WebGIS(网络地理信息系统)的核心组件,负责将各种GIS资源、例如GIS数据、地图、三维场景等发布成相应的GIS服务,如地图服务、数据服务、三维服务、空间分析服务、网络分析服务、公交换乘服务、地理编码服务等。同时,GIS服务器还负责接收GIS服务请求,并根据请求参数来完成响应。

由于一个完整GIS应用系统往往需要发布多种GIS资源,并提供各种GIS功能。为此,一个全功能的GIS服务器通常要包含多个GIS服务。随着GIS应用走入大众,GIS服务应用系统服务的用户数也越来越多,从而对应的GIS服务负载也居高不下。

传统的GIS应用服务器是一个经典的单体应用程序,各种GIS服务,包括不同数据来源,不同类型的服务都部署在一个进程中。这种部署模式在项目实施时能带来一些便利,但也带来以下问题。首先,GIS应用服务器中可部署的服务数量受限。单进程可使用的操作系统资源(例如文件句柄数、虚拟内存等)是受限的,导致在单个进程内最多可打开的GIS资源数量(比如地图、符号库等)也受到限制,进而导致单个进程内可发布的服务数量也受到限制,一般不能超过100个服务。

GIS服务在响应请求时,往往需要做大量的运算,在运算的过程中会占用一些资源,比如CPU时间、Http线程等。对于单体式GIS服务器而言,所有GIS服务都部署在一个进程中并且共享这些资源。当某个GIS服务的负载较高时,因为占用较多共享资源,导致其他GIS服务分配不到没有足够的资源,进而导致其他GIS服务性能下降甚至挂起。所以GIS服务之间互相影响,服务的可靠性不高。当某个GIS服务发生严重错误,导致进程异常退出,会导致其他无关的服务也不可用。

此外,GIS服务在高并发场景下性能不好,并且随着请求负载的增大,服务性能急剧下降。目前,广泛采用GIS服务器群集技术,GIS服务器群集技术是指通过复制多个GIS应用服务器来扩展GIS服务的能力,每个GIS应用服务器独立运行在各自的进程中,并通过独立的负载均衡模块对各GIS应用服务器的服务进行调度和负载均衡。GIS服务器群集技术从实现的角度比较容易,而且确实能有效提升整个GIS服务器的服务能力,但其存在GIS服务扩展不够方便的不利。因为只能通过复制整个GIS服务器来扩展GIS服务,所以扩展的过程中需要实施人员做大量的部署、配置和调试工作,不仅很不方便而且容易出错。其次,无法实现针对不同服务实施不同的扩展级别。在实际的应用场景中,不同GIS服务的负载是有明显差异的,因此,需要针对不同GIS服务,实施不同的扩展级别。GIS服务器集群技术是通过扩展整个GIS服务器,扩展的粒度太粗,无法实现精确控制特定服务的扩展级别。再次,GIS服务做不到自动伸缩。在一个时间段之内(比如一天内),GIS服务的负载存在一定的波动。这种波动有时候是有规律可循的(比如24点以后,负载逐渐降低),有时就毫无规律可言。由于GIS服务负载存在的波动特性,在理想情况下GIS服务的扩展级别应该和服务的负载正相关,即当负载增大时需要自动增加GIS服务的实例个数来提升GIS服务的处理能力。当负载降低时,需要自动减少GIS服务的实例个数以释放资源,从而减少资源占用。然而,GIS服务器集群技术无法满足该需求。

针对上述问题,本发明创造了一种微服务架构可自动伸缩的GIS服务装置。突破了单个GIS服务器服务个数的限制,支持针对不同GIS服务设置不同扩展级别,并自动扩展,并且可以根据GIS服务的负载情况,自动调整GIS服务的扩展级别,实现GIS服务的自动伸缩。



技术实现要素:

本发明提供一种微服务架构可自动伸缩的GIS服务装置,用于解决现有技术中存在的不利。该GIS服务装置包括Master进程模块、Daemon进程模块和一个或多个Worker进程模块。

所述Master进程模块构造用于启动Master进程作为整个GIS服务装置中GIS服务统一的访问入口,并且用于GIS服务管理以及Worker进程管理。所述Daemon进程模块构造用于运行Daemon进程,对所述Master进程进行后台监控,接收Master进程的状态报告,根据所述报告检查所述Master进程的运行情况。当所述Master进程异常退出时,Daemon进程自动启动一个新的Master进程。所述一个或多个Worker进程模块构造用于运行Worker进程,由Master进程启动和管理,接收Master进程的指令进行服务发布、删除和/或更新操作,定期向所述Master进程报告所述一个或多个Work进程的状态。

根据本发明的一种优选实施方式,Master进程模块包括以下子模块:

- Worker进程管理子模块,其构造用于一个或多个Worker进程的管理,实施添加、删除和/或修改所述一个或多个Worker进程的操作。

- 状态保持子模块,其构造用于收集Master进程的健康状况和/或一个或多个Worker进程的状态信息,上报到Daemon进程,监控Daemon进程的健康状况。当检测出Daemon进程监控状况异常时,重启Daemon进程,接收一个或多个Worker进程上报的状态信息,并根据这些状态信息判断一个或多个Worker进程的监控状况。当发现一个或多个Worker进程运行异常,通知Worker进程管理子模块和服务管理部署子模块,重启Worker进程并且重新部署GIS服务。

- 服务管理部署子模块,其构造用于所述GIS服务的管理,对整个装置的GIS服务进行管理,包括:发布、删除和/或修改GIS服务,将GIS服务部署到各Worker进程。该服务管理部署子模块还构造用于GIS服务的自动伸缩,通过监控各GIS服务的负载情况和请求响应情况,对GIS服务进行自动伸缩。

- 服务调度子模块,其构造用于整合各Worker进程所有服务以及服务请求的转发,将各Worker进程的GIS服务进行整合,生成服务目录,提供统一的服务访问入口,将接到的服务请求调度到可用的Worker进程进行处理。

- 支撑子模块,其构造用于实施安全控制、许可控制和/或运维监控的操作;

- 配置管理子模块,其构造用于读取、保存和/或修改所述Master进程配置信息,其还构造用于读取、保存和/或修改GIS服务的配置信息。

根据本发明的一种优选实施方式,Daemon进程模块包括以下子模块:

- Master进程管理子模块,其构造用于启动、停止和/或重启Master进程。

- 退出监听子模块,其构造用于监听所述GIS服务装置的退出事件。当监听到退出事件时,通知所述Master进程管理子模块实施停止所述Master进程的操作,并停止当前Daemon进程的运行,从而使当前进程正常退出。

- 健康检查子模块,其构造用于接收所述Master进程的状态报告,分析所述Master进程的健康状况,并且根据所述Master进程的健康状况进行以下处理:如果监听到所述Master进程的资源占用超过设定的阈值,则通知实施Master管理进程模块实施重启所述Master进程的操作;如果监听到所述Master进程已经异常退出,则通知所述Master管理进程模块实施启动所述Master进程的操作。

根据本发明的一种优选实施方式,一个或多个Worker进程模块包括以下子模块:

- 服务管理子模块,其构造用于GIS服务的管理,对本Worker进程的GIS服务进行发布、删除和/或修改GIS服务的管理。

- GIS服务子模块,其构造用于提供GIS服务功能,其方式是,接收GIS请求,并选择特定的GIS服务来响应该请求,并返回响应结果。

- 状态上报子模块,其构造用于定期将本Worker进程的状态以及在本Worker进程上的服务状态上报到Master进程。

根据本发明的另一方面,提供一种基于根据该GIS服务装置进行自动伸缩的控制方法,所述控制方法包括以下工作流程:

- 启动所述GIS服务装置的工作流程;

- 停止所述GIS服务装置的工作流程;

- 通过Master进程发布GIS服务的工作流程;

- Master进程处理GIS服务请求的工作流程;

- Master进程对GIS服务进行自动伸缩的工作流程;

- Master进程判断GIS服务是否需要自动伸缩的工作流程。

根据本发明的一种优选实施方式,启动该GIS服务装置的工作流程包括以下步骤:

- 启动Daemon进程,例如由系统管理员通过命令行的方式或者自动化的方式。

- Daemon进程初始化,初始化内部的各子模块,直到各子模块初始化完毕。

- Daemon进程内的Master进程管理子模块启动Master进程,并且判断Master进程是否启动成功。如果Master进程启动成功,则Master进程初始化。如果Master进程启动失败,则在控制台和日志文件中给出提示信息,从而退出Daemon进程。

- 初始化完成之后,判断GIS服务装置是否启动成功。如果GIS服务装置启动成功并初始化完毕,则在控制台和日志文件中给出提示信息。如果GIS服务装置启动失败,则同样在控制台和日志文件中给出提示信息。

根据本发明的一种优选实施方式,停止GIS服务装置的工作流程包括:

- 向Daemon进程发送退出命令,例如由系统管理员通过命令行的方式或者自动化的方式。

- Daemon进程的退出监听子模块接收到退出命令后,退出监听子模块将接收到的退出命令转发给Master进程管理子模块。

- Daemon进程的Master进程管理子模块通过管道向Master进程发出退出命令。

- Master进程接收到退出命令后,销毁Master进程以及被Master进程管理的相关Worker进程。

- Master进程的各子模块都停止并销毁后,Master进程退出。

- Daemon进程监测到Master进程彻底退出的事件后,开始依次停止并销毁Daemon进程的各子模块,直到所有子模块被销毁完毕,Daemon进程退出。

- GIS服务装置的所有相关进程都正常退出,GIS服务装置正常停止。

根据本发明的一种优选实施方式,通过Master进程发布GIS服务的工作流程包括以下步骤:

- 向Master进程发送发布GIS服务的请求,例如由系统管理员通过REST API的方式或者自动化的方式。

- Master进程的服务管理部署子模块接收到该请求,并响应该请求。

- Master进程的服务管理部署子模块根据服务配置信息,计算得到该服务的待部署实例个数。如果为N,则表示需要在N个Worker中部署该服务。

- Master进程的服务管理部署子模块向Worker进程管理子模块查询当前已启动的Worker进程个数,例如为M。如果当前已启动的Worker进程个数m小于该服务的待部署实例个数N,则通知Worker进程管理子模块新启动(N-M)个Worker进程。如果M大于等于N,则Master进程的服务管理部署子模块向Worker进程管理子模块查询部署服务最少的N个Worker进程,得到N个Worker进程的代理对象。

- 遍历这N个Worker进程的代理对象,依次将当前的GIS服务通过Worker进程代理对象部署到对应的Worker进程。

根据本发明的一种优选实施方式,Master进程处理GIS服务请求的工作流程包括以下步骤:

- GIS服务装置的普通用户向Master进程发送GIS请求。

- Master进程的服务调度子模块接收到该请求,解析该请求,计算得到当前GIS请求的对应的服务名称。

- Master进程的服务调度子模块根据服务名向服务管理部署子模块查询哪些Worker进程部署了该服务,并返回Worker进程的名称列表。

- Master进程的服务调度子模块根据Worker进程的名称列表向Worker进程管理子模块查询并返回指定名称的Worker进程代理对象的列表。

- Master进程的服务调度子模块根据负载均衡算法从Worker进程代理对象的列表获取一个Worker进程代理对象。

- Master进程的服务调度子模块通过Worker进程代理对象处理该请求。

- Master进程的服务调度子模块判断Worker进程代理对象返回的响应中的状态标志。如果标志为服务暂不可用,则重新尝试从Worker进程代理对象的列表获取一个Worker进程代理对象,最多尝试预先确定的次数、例如3次。否则,表示请求已经得到响应,将Worker进程代理对象返回的响应信息回写到服务调度子模块接收到的请求响应中,请求处理完成。

根据本发明的一种优选实施方式,Master进程对GIS服务进行自动伸缩的工作流程包括以下步骤:

- 在Master进程的支撑子模块中包含有监控与统计单元,所述监控与统计单元设置用于监控每个GIS服务负载、请求处理的耗时以及硬件资源的使用情况。

- Master进程的服务管理部署子模块定期向支撑子模块的监控与统计单元查询每个GIS服务的负载以及硬件资源使用情况,来决定是否需要对其进行自动伸缩,其方式是,得到所有GIS服务是否需要扩展或收缩实例的标志以及每个GIS服务待扩展或收缩的实例个数,依次判断这些标志。如果某GIS服务需要扩展实例个数,得到待扩展的服务实例个数E,则开始扩展服务实例,如果某GIS服务实例个数需要收缩,得到待收缩的服务实例个数S,则开始收缩服务实例。

- 在将当前GIS服务新部署到E个Worker进程中之后,Master进程的服务管理部署子模块根据当前GIS服务名查询得到部署过该GIS服务的Worker进程的名称列表(L1),从所述名称列表中选取S个Worker进程名称,得到待卸载该GIS服务的Worker进程的名称列表(L2),据此从Worker进程管理子模块查询得到S个Worker进程的代理对象的列表(L3)。

- Master进程的服务管理部署子模块遍历所述S个Worker进程的代理对象的列表,每次遍历过程中得到当前的Worker进程的代理对象,通过代理对象来卸载当前GIS服务。

优选地,在所述开始扩展服务实例中,Master进程的服务管理部署子模块根据服务名查询该GIS服务当前已部署的实例个数N,服务管理部署子模块从Worker进程管理子模块查询当前已启动的Worker进程个数M,如果N+E≤M,表示当前的Worker个数够用,则将当前GIS服务新部署到E个Worker进程中,如果N+E>M,表示当前的Worker个数不够用,则重新启动(N+E-M)个Worker进程。

优选地,在将当前GIS服务新部署到E个Worker进程中的所述步骤中,Master进程的服务管理部署子模块根据当前GIS服务名查询得到部署过该GIS服务的Worker进程名称列表,再向Worker进程管理子模块查询所有Worker进程名称列表,根据这两个列表,能够得到没有部署过当前GIS服务的E个Worker名称的列表,根据这个列表向Worker进程管理子模块查询得到这个E个Worker进程代理对象,然后依次调用这E个Worker进程代理对象将当前GIS服务部署对应的Worker进程中。

根据本发明的一种优选实施方式,Master进程判断GIS服务是否需要自动伸缩的工作流程包括以下步骤:

- Master进程的服务管理部署子模块根据服务名从支撑子模块的监控与统计单元查询,得到当前的硬件资源使用情况以及该GIS服务在最近的一分钟平均每秒接收到的并发请求数R。

- Master进程的服务管理部署子模块根据服务名查询,得到该GIS服务当前已部署的实例个数N。

- Master进程的服务管理部署子模块根据服务名从配置管理子模块查询,得到该GIS服务每服务实例最大处理的并发请求数RP。

- 借助公式E = ( N - R/RP )来计算待伸缩的服务实例个数E。根据计算结果,存在以下不同情况:

a)如果 E > 1,则表示当前的服务实例个数够用,且有较明显的冗余,需要收缩服务实例个数,返回服务需要收缩的标志,且收缩的服务实例个数为E。

b) 如果E < -1,则表示当前的服务实例个数不够用,且有较大的缺口,需要扩展服务实例个数,返回服务需要扩展的标志,且扩展的服务实例个数为-E。

c) 如果E≥-1且E≤1,则表示当前的服务实例个数正好够用,无需伸缩服务实例个数。

根据本发明的一种有利实施方式,所述GIS服务装置可以硬件地或软件地实现。它们可以具有可能按照硬件方式和/或按照软件方式构造的接口。当按照硬件方式构造时,该接口例如可以是所谓的ASIC系统的一部分,其包含上述装置的不同功能。然而,该接口也可能是单独的集成电路或者至少部分由分立的组件组成。当按照软件方式构造时,该接口例如可以是在数据库或微控制器中与其他软件模块并存的软件模块。

从属权利要求是本发明的有利实施方式。尽管本发明已借助优选实施例进行了描述,但其不局限于此,而是可以在许多方面进行修改。

附图说明

附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1:可自动伸缩的GIS服务装置的微服务架构图;

图2:Master进程模块结构图;

图3:Daemon进程模块结构图;

图4:Worker进程模块结构图;

图5:启动GIS服务装置的工作流程;

图6:Master进程初始化的方法步骤;

图7:启动各Worker进程的方法步骤;

图8:部署所有GIS服务的方法步骤;

图9:停止GIS装置的工作流程;

图10:销毁Master进程和被Master进程管理的相关Worker进程的方法步骤;

图11:通过Master进程发布GIS服务的工作流程;

图12:响应发布GIS服务的请求的方法步骤;

图13:将GIS服务部署到一个Worker进程的方法步骤;

图14:Master进程处理GIS请求的工作流程;

图15:Master进程的服务调度子模块通过Worker进程代理对象处理GIS请求的具体方法步骤;

图16:Master进程对GIS服务进行自动伸缩的工作流程;

图17:Worker代理对象卸载GIS服务的方法步骤;

图18:Master进程判断GIS服务是否需要自动伸缩的工作流程。

具体实施方式

为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。

在本申请的描述中,需要理解的是,“多个”的含义是两个或两个以上,除非另有明确具体的限定。术语“包括”、“包含”及类似术语应该被理解为是开放性的术语,即“包括/包含但不限于”。术语“基于”是“至少部分地基于”。其他术语的相关定义将在下文描述中给出。

图1示出一种可自动伸缩的GIS服务装置的微服务架构图,该GIS服务装置由Master进程模块(又称作GIS服务器主进程模块)、Daemon进程模块(又称作GIS服务器备份进程模块)和一个或多个Worker进程模块(又称作GIS服务工作进程模块)组成。

Master进程模块构造为整个GIS服务装置所有GIS服务的统一的访问入口。所述Master进程模块设置用于提供GIS服务管理的能力,包括发布、删除服务以及修改GIS服务实例个数等。所述Master进程模块还设置用于提供Worker进程管理能力,包括新增和减少工作进程。

Daemon进程模块构造为Master进程的后台监控进程模块。所述Daemon进程模块构造用于接收Master的状态报告,并据此检查Master进程的健康状况。当Master进程异常退出时,Daemon进程自动启动一个新的Master进程。

一个或多个Worker进程模块构造为GIS服务工作进程模块。所述Worker进程模块由Master进程启动和管理,并且构造用于接收Master的指令进行服务发布、删除和更新操作。所述Worker进程模块还设置用于定期向Master报告自身的状态信息,包括自身的监控情况、部署的服务可用情况等。

图2示出Master进程模块结构图。Master进程模块包括:

- Worker进程管理子模块,其设置为负责Worker进程的管理。通过所述Worker进程管理子模块可以添加、删除、修改Worker进程;

- 状态保持子模块,其设置为负责收集Master进程的健康状况,例如将资源占用情况、GIS服务和Worker进程的状态信息上报到Daemon进程。状态保持子模块还设置用于监控Daemon进程的健康状况。当检测出Daemon进程监控状况不良时,及时重启Daemon进程。此外,状态保持子模块设置用于接收Worker进程上报的状态信息,并根据这些状态信息判断Worker进程的监控状况。当发现Worker进程运行不正常时,及时通知Worker进程管理子模块和服务管理部署子模块重启Worker进程并且重新部署GIS服务;

- 服务管理部署子模块,其设置为负责GIS服务的管理。通过服务管理部署子模块可以对整个装置的GIS服务进行管理,包括发布、删除或修改GIS服务以及将GIS服务部署到各Worker进程。服务管理部署子模块还设置为负责GIS服务的自动伸缩。通过监控各GIS服务的负载情况和请求响应情况,对GIS服务进行自动伸缩。

- 服务调度子模块,其设置为负责整合各Worker进程所有服务以及服务请求的转发。通过服务调度子模块将各Worker进程的GIS服务进行整合,并提供服务目录,从而提供统一的服务访问入口。服务调度子模块还设置用于将接到的服务请求调度到到相应的Worker进程进行处理。

- 支撑子模块,其设置用于支撑整个GIS服务装置的正常运行,比如安全控制、许可控制、运维监控等等。

- 配置管理子模块,其设置用于读取、保存和修改Master进程、GIS服务等的配置信息。

图3示出Daemon进程模块结构图,Daemon进程模块包括:

- Master进程管理子模块,其设置为负责启动、停止和重启Master进程。

- 退出监听子模块,其设置为负责监听GIS服务装置的退出事件(例如从socket传递的信号量)。退出监听子模块还设置用于,当监听到退出事件时,通知Master进程管理子模块实施停止Master进程操作,并且停止当前Daemon进程的运行,从而使当前进程正常退出。

- 健康检查子模块,其设置用于接收Master进程的状态报告,并且分析Master的健康状况。健康检查子模块还设置用于根据Master的健康状况进行针对性处理。例如,如果发现Master进程的资源占用超过特定的阈值,则通知Master管理进程实施重启Master进程的操作。如果发现Master进程已经异常退出,则通知Master管理进程实施启动Master进程的操作等等。

图4示出Worker进程模块结构图,Worker进程模块包括:

- 服务管理子模块,其设置为负责GIS服务的管理。通过服务管理子模块可以对本Worker进程的GIS服务进行管理,包括发布、删除或修改GIS服务。

- GIS服务子模块,其设置为负责提供GIS服务能力。通过接收GIS请求,并选择特定的GIS服务来响应该请求,并返回响应结果。

- 状态上报子模块,其设置为负责定期将本Worker的状态以及Worker上的服务状态上报到Master进程。

以下借助附图5-18来描述上述模块的工作流程。图5示出启动GIS服务装置的工作流程(流程一)。

在步骤1-1中,系统管理员通过命令行,启动Daemon进程。

在步骤1-2中,Daemon进程初始化,初始化内部的各子模块,直到各子模块初始化完毕。

在步骤1-3中,Daemon进程内的Master进程管理子模块启动Master进程,并且判断Master进程是否启动成功。如果Master进程启动成功,则跳转到步骤1-4。如果Master进程启动失败,则跳转到步骤1-7,从而退出Daemon进程。

在步骤1-4中,Master进程初始化。初始化完成之后进入步骤5。

在步骤1-5中,判断GIS服务装置是否启动成功。如果GIS服务装置启动成功并初始化完毕,则在步骤1-6中在控制台和日志文件中给出提示信息。如果GIS服务装置启动失败,则在步骤1-7中在控制台和日志文件中给出提示信息。

具体地,参照图6,上述步骤1-4中的Master进程初始化通过以下步骤实现:

在步骤1-4-a中,初始化Master进程的配置管理子模块,在初始化过程中将读取Master进程的配置信息。

在步骤1-4-b中,Master进程的服务支撑子模块得到配置信息,初始化服务支撑子模块,在初始化过程中将安全控制、日志、运维和监控等支撑功能初始化完毕。

在步骤1-4-c中,Master进程的Worker进程管理子模块得到配置信息。Worker进程管理子模块根据配置信息中的Worker进程全局配置,服务配置以及GIS服务装置的硬件信息,得出各Worker进程的详细配置信息。初始化Worker进程管理子模块,Master进程在初始化过程中启动各Worker进程。当各Worker进程初始化完成后,进入步骤1-4-d。

在步骤1-4-d中,Master进程的服务管理部署子模块得到配置信息,服务管理部署子模块开始初始化。在初始化过程中,部署相关的GIS服务,所有GIS服务部署完成以后,进入步骤1-4-e。

在步骤1-4-e中,Master进程的服务调度子模块得到配置信息,服务调度子模块开始初始化,直到初始化完毕。

在步骤1-4-f中,Master进程的状态保持子模块得到配置信息,状态保持子模块开始初始化,直到初始化完毕。状态保持子模块初始化完毕后,启动异步任务。异步任务实施以下操作:- 开始收集当前Master进程的健康状况,并将收集的信息上报给Daemon。- 开始监控Daemon进程的监控状况,并根据监控信息判断是否需要重启Daemon进程。- 开始接受所有Worker进程上报的状态信息,并根据这些状态信息觉得是否需要重启某些Worker进程。

在步骤1-4-g中,Master进程初始化完毕,Master进程的状态被设置为就绪状态,并返回Master初始化成功的标志。

具体地,参照图7,在步骤1-4-c中各Worker进程的启动通过以下步骤实现:

在步骤1-4-c-1中,得到待启动的Worker进程的配置信息列表。

在步骤1-4-c-2中,选择一个待启动的Worker进程的配置信息,启动该Worker进程。如果启动失败,则重试直至该Worker进程启动成功。如果启动成功,则进入步骤1-4-c-3。

在步骤1-4-c-3中,将启动成功的Worker进程的配置信息从待启动的Worker进程的配置信息列表中删除。

在步骤1-4-c-4,检查待启动的Worker进程的配置信息列表中元素的个数。如果列表元素个数大于零,则跳转到步骤1-4-c-1。如列表元素个数等于零,则表明各Worker进程启动成功,进入步骤1-4-c-5。

在步骤1-4-c-5中,返回成功标志。

具体地,参照图8,在上述步骤1-4-d中所有GIS服务的部署通过以下步骤实现:

在步骤1-4-d-1中,得到待部署的GIS服务的配置信息列表。

在步骤1-4-d-2中,选择一个待部署的GIS服务的配置信息,根据GIS服务配置,得到该GIS服务需要部署的实例个数,设若为N,表示该GIS服务需要在N个Worker进程中进行部署。将当前GIS服务部署到N个Worker进程的详细过程见流程三的步骤3-4。当前GIS服务部署完成后,进入步骤1-4-d-3。

在步骤1-4-d-3中,将当前部署成功的GIS服务的配置信息从待部署的GIS服务的配置信息列表中删除。

在步骤1-4-d-4中,检查待部署的GIS服务的配置信息列表中元素的个数。如果列表元素个数大于零,跳转到步骤1-4-d-1。如列表元素个数等于零,则表明各GIS服务部署成功,进入步骤1-4-d-5。

在步骤1-4-d-5中,返回成功标志。

图9示出停止GIS服务装置的工作流程(流程二)。

在步骤2-1中,系统管理员通过命令行,向Daemon进程发送退出命令。

在步骤2-2中,Daemon进程的退出监听子模块接收到退出命令后,退出监听子模块将接收到的退出命令转发给Master进程管理子模块。

在步骤2-3中,Daemon进程的Master进程管理子模块通过管道向Master进程发出退出命令。

在步骤2-4中,Master进程接收到退出命令后,开始销毁Master进程以及被Master进程管理的相关Worker进程。销毁工作完成之后进入步骤2-5。

在步骤2-5中,Master进程的各子模块都停止并销毁后,Master进程退出,进入步骤2-6。

在步骤2-6中,Daemon进程监测到Master进程彻底退出的事件后,开始依次停止并销毁Daemon进程的各子模块,直到所有子模块被销毁完毕,Daemon进程退出。

在步骤2-7中,GIS服务装置的所有相关进程都正常退出,GIS服务装置正常停止。

具体地,参照图10,在上述步骤2-4中Master进程以及被Master进程管理的相关Worker进程销毁的详细步骤如下:

在步骤2-4-a中,Master进程将自身的状态设置为不可用状态,停止接收新的GIS请求,并通知各子模块依次有序退出。

在步骤2-4-b中,Master进程的配置管理子模块接收到退出事件,将当前的配置状态持久化,然后配置管理子模块开始停止,并销毁该模块持有的相关资源。

在步骤2-4-c中,Master进程的状态保持子模块接收到退出事件,状态保持子模块开始停止,并销毁该模块持有的相关资源如定时器、缓存等。

在步骤2-4-d中,Master进程的服务调度子模块接收到退出事件,查看当前调度的服务请求队列是否为空。如果服务请求队列不为空,则跳转到步骤2-4-e。如果服务请求队列为空,服务调度子模块开始停止,并销毁该模块持有的相关资源,进入步骤2-4-f。

在步骤2-4-e中,等待一段时间(具体时间可配置),直到队列清空。

在步骤2-4-f中,Master进程的服务管理部署子模块接收到退出事件,服务管理部署子模块开始退出,并销毁该模块持有的相关资源。

在步骤2-4-g中,Master进程的Worker进程管理子模块接收到退出事件,查看当前已启动的Worker进程队列是否为空。如果Worker进程队列不为空,则跳转到步骤2-4-h。如果Worker进程队列为空,则进入步骤2-4-i。

在步骤2-4-h中,依次停止Worker进程,直到所有Worker进程都停止并正常推出。

在步骤2-4-i中,Worker进程管理子模块开始退出,并销毁该模块持有的相关资源。

在步骤2-4-j中,Master进程的支撑子模块接收到退出事件,支撑子模块开始退出,并销毁该模块持有的相关资源。

图11示出通过Master进程发布GIS服务的工作流程(流程三)。

在步骤3-1中,系统管理员通过REST API向Master进程发送发布GIS服务的请求。

在步骤3-2中,Master进程的服务管理部署子模块接收到该请求,并响应该请求。

在步骤3-3中,Master进程的服务管理部署子模块根据服务配置信息,计算得到该服务的待部署实例个数。如果为N,则表示需要在N个Worker中部署该服务。

在步骤3-4中,Master进程的服务管理部署子模块向Worker进程管理子模块查询当前已启动的Worker进程个数,例如为M。如果当前已启动的Worker进程个数m小于该服务的待部署实例个数N,则进入步骤3-5。如果M大于等于N,则直接进入步骤3-6。

在步骤3-5中,通知Worker进程管理子模块新启动(N-M)个Worker进程。

在步骤3-6中,Master进程的服务管理部署子模块向Worker进程管理子模块查询部署服务最少的N个Worker进程,得到N个Worker进程的代理对象。

在步骤3-7中,遍历这N个Worker进程的代理对象,依次将当前的GIS服务通过Worker进程代理对象部署到对应的Worker进程。将GIS服务部署到一个Worker进程的详细过程如下(参见图13):

在步骤3-7-a中,Master进程的服务管理部署子模块通过Worker进程代理对象向Worker进程发送部署服务请求。

在步骤3-7-b中,Worker进程的服务管理子模块接受到该请求,解析该请求,得到待部署的服务配置信息,开始部署服务。

在步骤3-7-c中,判断服务部署是否成功。如果服务部署成功,则返回成功标志。如果服务部署失败,返回失败标志,并且跳转回步骤3-7-a进行重新部署。Master进程的服务管理部署子模块通过Worker进程代理对象得到GIS服务部署是否成功的标志。

需要指出的是,通过Master进程的服务管理部署子模块在部署GIS服务到一个Worker进程的过程中,如果某个Worker部署GIS服务失败,则重新部署1次。如果重新部署预先确定的次数(例如3次)之后,到该Worker的部署GIS服务仍失败,则退出整个部署过程,并添加某GIS服务部署失败的日志。如果所有Worker进程都成功部署该服务,则该GIS服务部署成功,并添加某GIS服务部署成功的日志。

具体地,参照图12,在步骤3-2中响应发布GIS服务的请求包括以下步骤:

在步骤3-2-a中,解析该请求,得到GIS服务配置信息。

在步骤3-2-b中,通知配置管理子模块新增了一个GIS服务,配置管理子模块将新增的GIS服务配置持久化。

在步骤3-2-c中,启动一个异步任务,开始部署GIS服务到各Worker的过程,详细过程见步骤3-3。

在步骤3-2-c中,返回当前请求的响应,响应体中包含待部署服务的状态(正在部署),以及待部署服务的访问地址信息等。

图14示出Master进程处理GIS请求的工作流程(流程四)。

在步骤4-1中,GIS服务装置的普通用户向Master进程发送GIS请求。

在步骤4-2中,Master进程的服务调度子模块接收到该请求,解析该请求,计算得到当前GIS请求的对应的服务名称。

在步骤4-3中,Master进程的服务调度子模块根据服务名向服务管理部署子模块查询哪些Worker进程部署了该服务,并返回Worker进程的名称列表。

在步骤4-4中,Master进程的服务调度子模块根据Worker进程的名称列表向Worker进程管理子模块查询并返回指定名称的Worker进程代理对象的列表。

在步骤4-5中,Master进程的服务调度子模块根据某种负载均衡算法、例如轮询、加权或一致哈希算法等从Worker进程代理对象的列表获取一个Worker进程代理对象。

在步骤4-6中,Master进程的服务调度子模块通过Worker进程代理对象处理该请求。

在步骤4-7中,Master进程的服务调度子模块判断Worker进程代理对象返回的响应中的状态标志。如果标志为服务暂不可用,则返回到步骤4-5,重新尝试,最多尝试预先确定的次数、例如3次。否则,表示请求已经得到响应,进入步骤4-8。

在步骤4-8中,将Worker进程代理对象返回的响应信息回写到由服务调度子模块接收到的请求响应中,请求处理完成。

具体地,参照图15,在步骤4-6中通过Worker进程代理对象处理该请求包括以下步骤:

在步骤4-6-a中,Worker进程代理对象将该请求转发到对应的Worker进程。

在步骤4-6-b中,Worker进程的服务管理子模块接收到该请求后,解析该请求,得到请求的服务名称。

在步骤4-6-c中,Worker进程的服务管理子模块根据请求名称获取对应服务对象,并且判断当前服务对象是否可用。如果可用,则调用该服务对象处理该请求,并返回响应结果。如果不可用,则在响应中设置服务暂不可用的标志。

图16示出Master进程对GIS服务进行自动伸缩的工作流程(流程五)。该工作流程包括以下步骤:

在步骤5-1中,在Master进程的支撑子模块中包含有监控与统计单元。该子模块设置用于监控每个GIS服务负载、请求处理的耗时以及硬件资源的使用情况、例如CPU使用率、内存使用率等。

在步骤5-2中,Master进程的服务管理部署子模块定期向支撑子模块的监控与统计单元查询每个GIS服务的负载以及硬件资源使用情况,来决定是否需要对其进行自动伸缩。得到所有GIS服务是否需要扩展或收缩实例的标志,以及每个GIS服务待扩展或收缩的实例个数,依次判断这些标志,然后对GIS服务进行自动伸缩。如果某GIS服务需要扩展实例个数,得到待扩展的服务实例个数E,则跳转到步骤5-3开始扩展服务实例;如果某GIS服务实例个数需要收缩,得到待收缩的服务实例个数S,则跳转到步骤5-6开始收缩服务实例。判断某GIS服务是否需要伸缩的详细过程见流程六。

在步骤5-3中,Master进程的服务管理部署子模块根据服务名查询该GIS服务当前已部署的实例个数,例如为N。服务管理部署子模块从Worker进程管理子模块查询当前已启动的Worker进程个数,例如为M。如果N+E≤M,则表示当前的Worker个数够用,跳转到步骤5-5开始将当前GIS服务新部署到E个Worker进程中。如果N+E>M,则表示当前的Worker个数不够用,则跳转到步骤5-4。

在步骤5-4中,重新启动(N+E-M)个Worker进程。如果需要的Worker进程启动失败,则写日志并且提示该服务扩展服务实例失败,服务扩展的过程结束。如果需要的Worker进程启动成功,跳转到步骤5-5将当前GIS服务新部署到E个Worker进程中。

在步骤5-5中,Master进程的服务管理部署子模块根据当前GIS服务名查询得到部署过该GIS服务的Worker进程名称列表,再向Worker进程管理子模块查询所有Worker进程名称列表。根据这两个列表,可以得到没有部署过当前GIS服务的E个Worker名称的列表。根据这个列表向Worker进程管理子模块查询得到这个E个Worker进程代理对象。然后依次调用这E个Worker进程代理对象将当前GIS服务部署对应的Worker进程中,详细步骤见流程三的步骤3-7。

在步骤5-6中,Master进程的服务管理部署子模块根据当前GIS服务名查询得到部署过该GIS服务的Worker进程的名称列表L1,从L1中选取S个Worker进程名称,得到待卸载该GIS服务的Worker进程的名称列表L2。根据L2从Worker进程管理子模块查询得到S个Worker进程的代理对象的列表L3。

在步骤5-7中,Master进程的服务管理部署子模块遍历列表L3,每次遍历过程中得到当前的Worker进程的代理对象,通过代理对象来卸载当前GIS服务。

具体地,参照图17,Worker代理对象卸载GIS服务包括以下步骤:

在步骤5-7-a中,在Master进程的服务管理部署子模块调用Worker进程代理对象发送卸载某GIS服务的命令。

在步骤5-7-b中,Worker进程的服务管理子模块接收到该命令,解析该命令,得到待卸载的GIS服务名称。

在步骤5-7-c中,Worker进程的服务管理子模块开始卸载GIS服务,直到GIS服务卸载完毕,并返回卸载成果的消息。

在步骤5-7-d中,Worker进程代理对象得到GIS服务卸载完成的消息后,完成当前Worker进程卸载当前GIS服务的过程。

如此循环,直到流程三中所有Worker进程代理对象都完成卸载当前GIS服务的过程,则当前GIS服务收缩服务实例的过程完成。

图18示出Master进程判断某GIS服务是否需要自动伸缩的工作流程,该工作流程具有以下步骤:

在步骤6-1中,Master进程的服务管理部署子模块根据服务名从支撑子模块的监控与统计单元查询,得到当前的硬件资源使用情况以及该GIS服务在最近的一分钟平均每秒接收到的并发请求数,例如R。

在步骤6-2中,Master进程的服务管理部署子模块根据服务名查询,得到该GIS服务当前已部署的实例个数,例如为N。

在步骤6-3中,Master进程的服务管理部署子模块根据服务名从配置管理子模块查询,得到该GIS服务每服务实例最大处理的并发请求数,得到RP。

在步骤6-4中,借助公式E = ( N - R/RP )来计算待扩展的服务实例个数E。根据计算结果,存在以下不同情况:

a)如果 E > 1,则表示当前的服务实例个数够用,且有较明显的冗余,需要收缩服务实例个数。返回服务需要收缩的标志,且收缩的服务实例个数为E。

b) 如果E < -1,则表示当前的服务实例个数不够用,且有较大的缺口,需要扩展服务实例个数。返回服务需要扩展的标志,且扩展的服务实例个数为-E。

c) 如果E≥-1且E≤1,则表示当前的服务实例个数正好够用,无需伸缩服务实例个数。

对于前述的各方法实施例,为了描述简单,故将其都表述为一系列的动作组合,但是本领域的技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为根据本申请,某些步骤可以采用其他顺序或同时执行;其次,本领域技术人员也应该知悉,上述方法实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。

需要说明的是,上述装置实施例属于优选实施例,所涉及的单元和模块并不一定是本申请所必须的。

本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于本申请的装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上对本申请所提供的一种微服务架构可自动伸缩的GIS服务装置以及一种基于根据该GIS服务装置进行自动伸缩的控制方法,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的控制方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1