本发明涉及计算机应用技术领域,具体涉及一种基于动态路由的应用部署方法。
背景技术:
客户端与网站的交互,网站内部前端应用与后端应用的交互都涉及到对请求进行路由。现网站使用docker容器技术于研发基础环境,每套环境都可部署网站的全量应用,每个应用分别对应一个容器,所有容器集中部署至一台主机(计算机)。将应用运行环境闭合在容器内,而容器本身运行在宿主机上。这样的好处是:大大复用了单一主机的系统资源,解耦与被部署宿主机的依赖,如监听端口,应用目录。所有的网站应用可全量部署于一台配置为4核16g内存的主机,同时运行一个nginx(一种高性能的http和反向代理服务器)容器用来路由指向到该主机(网站的)http请求,值得一提的是,路由规则配置文件通过静态文件的方式管理。随着应用数量的上升,前述配置主机无法支撑全量的应用部署。对单一主机的配置要求愈发苛刻。
目前web应用多结合反向代理技术共同部署配合使用。通过代理服务器接收客户端发送的连接请求,然后将连接请求转发给指定的内部服务器进行处理,并将内部服务器的处理结果返回给发送连接请求的客户端。反向代理服务器如nginx,路由规则配置文件都是静态方式,即预先设置好,与主机一一绑定,无法实现规则的实时动态更新,灵活性较低。
技术实现要素:
本发明提供了一种基于动态路由的应用部署方法,解决了现有技术无法实现规则的实时动态更新,灵活性较低的技术问题。
本发明首先使用集群为调度单位部署应用容器。将容器以集群为单位进行调度,降低了对单一主机的系统要求,同时增加了开发测试环境可伸缩性。
其次,动态更新路由规则(指nginx路由规则)配置。应用容器名称是什么,服务名称是什么,部署至集群的哪个主机,监听的端口又是哪个,这些主要的路由信息都是实时收集。最终,更新至nginx配置目录。从而,官网应用与特定的单一主机解耦,可灵活的部署至集群的任一主机上。而通过动态路由,用户使用上无差异感知。
本发明采用的技术方案如下:
基于动态路由的应用部署方法,包括环境准备流程和用户使用流程,环境准备流程中设置动态路由,启动容器后进入用户使用流程,用户指定被部署应用并触发部署操作。
进一步地,concul与registrator、concul-template构成服务发现系统,作用到nginx之上构成动态路由系统。
进一步地,所述环境准备流程中依次启动concul容器、registrator容器、nginx容器和concul-template容器后进入用户使用流程。
进一步地,用户使用流程中对集群中的docker事件进行监听,具体如下:
registrator监听到docker事件,向concul注册服务,concul-template定时查询concul中的服务目录,发现有服务变更,触发服务更新,使用预设置的nginx模版,填充变量后覆盖已有nginx的配置,并重启nginx服务完成路由无宕机更新。
进一步地,所述用户使用流程具体包括以下步骤:
部署应用入口程序,由用户传入部署应用的参数;
基于集群调度容器,执行调度算法;
所有的信息获取完毕后,执行应用部署。
进一步地,所述参数包括应用名称、容器名称、服务名称、nginx模版名称。
进一步地,依据规则执行调度算法,所述规则为:依据执行应用部署当时集群内主机可用系统资源情况降序排序,选择第一排位主机为宿主机。
进一步地,依据规则执行调度算法后,返回给部署应用入口程序。
本发明让开发测试环境资源利用率更高,可伸缩性更强,使用成本更低,与现有技术相比,有益效果如下:
1、拥有服务发现系统,结合nginx实现动态路由功能,子系统功能边界清晰,维护性高。
2、服务发现系统支持分布式部署。
3、基于docker容器技术部署整套动态路由系统,移植性高,友好性强。
4、基于docker容器技术部署应用容器,是的环境复用性高。
5、结合3、4优势,基于集群部署所有容器,有效降低研发成本。
6、提供了一整套应用部署的解决方案。
附图说明
图1是本发明基于动态路由的应用部署方法流程图。
图2是本发明系统调用图。
具体实施方式
本发明使用registrator+concul+concul-template构成服务发现及更新系统,结合nginx应用场景,形成动态路由系统;同时,基于docker容器部署应用,最终形成一种灵活、可伸缩、资源复用率高的基于动态路由的应用部署方法。
首先,应用的部署还是以容器为载体,但部署主机不仅限定于单一主机(虚拟主机),而是以集群为调度单位。被部署到集群的哪台主机依据特定的调度的算法适时分配。这样一来,对于集群内部的单一主机无较高要求,普通的2核4g主机亦可用。同时,利用集群调度应用,使得可伸缩性得以体现。可适时添加主机至集群,满足高峰期使用,如跨部门联调需求额外的网站全量应用。
其次,由于某一应用部署时依据当时集群内主机资源占用情况,灵活调度。可能每一次的部署都在不同的主机上,那就不能以静态路由的方式,即:预定义nginx配置文件的方式达到路由某套官网应用http请求的目的。这里使用动态路由方式解决该问题。让路由支持无宕机时间的更新,让它支持方便进行扩容与故障摘除,也让它支持能够对请求进行改写。
下文中,结合附图和实施例对本发明作进一步阐述。
图1是本发明基于动态路由的应用部署方法流程图,由两部分组成,分别为“环境准备”流程,主要设置动态路由相关配套容器;以及“用户使用”流程,主要涉及用户指定被部署应用并触发部署操作。本发明所有服务或应用均运行于容器内。
1、环境准备流程
concul是一个服务管理软件,具有服务发现,健康检查等功能。支持多数据中心下,分布式高可用的,服务发现和配置共享。
registrator是一个服务软件,监控docker容器事件,确认并将其提供的服务于服务管理软件进行注册登记。往往与服务管理软件一同使用,如consul,etcd等。
consul-template是由concul推出的模版系统,结合concul一同使用。提供了一个便捷的方式从consul中获取存储的值,consul-template守护进程会查询consul实例,来更新系统上指定的任何模板,当更新完成后,模板可以选择运行一些任意的命令。
docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
concul与registrator,concul-template构成服务发现系统,作用到nginx之上构成一套动态路由系统。依次启动如下容器:
1)启动concul容器;
2)启动registrator容器;
3)启动nginx容器;
4)启动concul-template容器。
2、用户使用流程
环境准备完成后,监听着集群中docker事件,即任意容器被部署于集群中。集群是指一组相互独立的计算机,利用高速通信网络组成一个计算机系统,每个群集节点(即集群中的每台计算机)都是运行其自己进程的一个独立服务器。这些进程可以彼此通信,对网络客户机来说就像是形成了一个单一系统,协同起来向用户提供应用程序、系统资源和数据,并以单一系统的模式加以管理。
图2为系统调用图。某个应用容器启动后,registerator监听到该docker事件,向concul注册该服务,concul-template定时查询consul中的服务目录,发现有服务变更,触发服务更新,使用预设置的nginx模版,填充变量后覆盖已有nginx的配置,并热重启nginx服务完成路由无宕机更新。详细步骤如下所述:
1)部署应用入口
该入口指代入口程序,由用户传入部署应用必要的参数:如应用名称、容器名称、服务名称、nginx模版名称等。应用名称、容器名称可以一致,用于标示,不可重名,如图2系统调用图中所示tomcat-app-1。服务名称即注册于concul中的服务,可以重名。重名场景一般作负载均衡。nginx模版名称明确concul-template针对该类应用使用哪种ngninx配置模版,不同类型可能存在差异。
2)执行调度算法
基于集群调度应用容器。由于一个应用容器最终只会被部署至一台主机之上,所以需要依据特定的规则执行调度。本发明依据执行部署当时集群内主机可用系统资源情况降序排序,选择第一排位主机为宿主机。并返回给部署程序。
3)执行部署
所有的必要信息均获取完毕,执行应用部署。应用容器启动命令如dockerrun-nametomcat-app-l-eservice_name=tomcat-app-1-d--networkmulti-host-networkregistry.cn-beijing.aliyuncs.com/xxx/sd-java。
本发明优选使用python及shell实现部署应用入口程序,结合开源软件consul、concul-template、registerator以及nginx实现。
本发明虽然已以较佳实施例公开如上,但其并不是用来限定本发明,任何本领域技术人员在不脱离本发明的精神和范围内,都可以利用上述揭示的方法和技术内容对本发明技术方案做出可能的变动和修改,因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化及修饰,均属于本发明技术方案的保护范围。