统一管理Tomcat和Nginx软件栈*

2014-02-09 09:18徐小龙王纯
电信工程技术与标准化 2014年8期
关键词:集群统一部署

徐小龙,王纯

(1 北京邮电大学网络与交换技术国家重点实验室,北京 100876; 2 东信北邮信息技术有限公司,北京 100191)

统一管理Tomcat和Nginx软件栈*

徐小龙1,2,王纯1,2

(1 北京邮电大学网络与交换技术国家重点实验室,北京 100876; 2 东信北邮信息技术有限公司,北京 100191)

互联网科技迅猛发展,移动互联网正在改变人们的生活。Web应用极大地丰富了互联网世界,新形势下,Web开发将面临更加严峻的挑战:站点需求日益增加,市场需求变化加速,应用提供商需将主要精力从Web环境部署与维护转向如何实现应用程序的真正需求。Web服务器软件多种多样,但是大部分企业和团队都采用Tomcat、Nginx等开源Web服务器软件。Tomcat+Nginx软件栈被证明是一种稳定、性能可靠的组合方式,本文提出统一管理方案,旨在提供专业的服务器部署、便捷的Web应用程序管理解决方案。本文将论述主要功能点和设计思路。

Tomcat;Nginx;统一管理;服务器软件栈

随着社会经济和科技的发展,互联网给人们的生活带来了翻天覆地的变化。移动互联网时代,对Web服务的需求迅猛增加。在众多的Web开发语言中,Java依然是使用人数最多的一种撰写跨平台应用服务的设计语言,可以作为Web服务器端开发的最佳实践语言。Tomcat是Apache基金组织开发的开源Java Web应用服务器,以其性能稳定、结构合理著称,成为目前最为流行的Web应用服务器之一,深受Java开发者的喜爱并得到部分软件开发商的认可。但是随着互联网访问量的激增,Tomcat服务器经常会由于访问流量大,出现运行不稳定,甚至服务停止的现象,而Nginx可以以较少的资源代价稳定、高效地处理高并发和高数据量的请求。Nginx作为Tomcat前端负载均衡器的组合方式,被许多企业和开发团队所采用。对于个人学习或者简单应用开发,单机环境部署即可满足需求,而对于大型复杂的应用,通常选用集群架构来提供服务,这种方式可以充分利用每个节点的能力,提供稳定高效的Web服务。在单机环境中,需要快速便捷地构建Web服务器软件供开发人员集中精力实现业务开发。在集群系统中,如果没有良好的架构,则会导致用户数据访问不准确,每台服务器数据不一致,会形成脏数据;其次,如果负载均衡策略较差,则会导致每台服务器的负载差距较大,这样就使某些服务器负载明显大于其它服务器,形成访问热点,导致故障使整个服务器集群不稳定。因此,集群系统中如何对节点进行配置、管理、监控,在实际生产中显得尤为重要。本文提出的统一管理设计方案尝试对Web服务器部署提供单机环境和集群系统下的有效管理,以解决上述需求问题,具有实际的应用意义。

1 需求分析和技术选型

1.1 需求分析

在Web2.0时代,互联网呈现了有史以来最快速的发展,商业应用层出不穷,业务逻辑不断复杂,用户体验需求也不短提升,随着个人PC的普及、移动终端的极大丰富和移动互联网的发展,对Web应用提供商提出了更快更高的要求。Nginx和Tomcat集成使用是目前Web开发常用的实际方案,但对于初学Web开发的人员,环境部署占去太多精力和时间,降低了学习效率;对于企业Web项目开发,服务器部署和维护,需要在人力和技术深度上投入,而对大部分项目组来说,其主要目标和精力都放在业务网站开发上,在服务器维护方面投入难以支持,尤其是面对复杂的集群系统。同时,不论是单机环境还是集群系统,对于Nginx、Tomcat开源软件的构建,不同公司、不同项目团队在维护细节,包括服务器版本、部署架构、配置管理方式、维护手段等方面存在很大差异,其结果是,虽是同类同源的系统,但是各自隔离,正确的维护手段和管理经验无法继承和推广;由于不正确的部署和配置,乃至服务器本身的异常造成的故障在不同项目实践中重复出现,随着Web应用开发的日益复杂,这种趋势将可能恶化。此外,Tomcat等开源服务器,其总体上的系统监控告警能力相对不足,不能满足实际开发的需要。统一管理平台基于上述现状及问题,对于Tomcat和Nginx进行整合,在统一各基础软件版本的基础上,提供统一的操作维护界面,增强的异常检测处理和监控告警能力,进一步提升服务器部署的便捷性以及Web应用的稳定性和可维护性。

1.2 技术背景

1.2.1 平台开发语言——Ruby

Ruby是一种语法灵活且功能强大的面向对象脚本语言,其文本处理功能十分强大,相对于其它编程语言,优点主要体现在以下几个方面:语法简单灵活、具有普通的面向对象功能(类、方法调用等)、具有特殊的面向对象功能(Mix-in、特殊方法等)、可重载操作符、具有异常处理功能、调用带块方法(迭代器)和闭包、垃圾回收器、动态载入等。在统一管理平台中,利用其丰富强大的功能管理服务器配置和生命周期管理;利用其分布式开发框架分布式Ruby(DRB,Distributed Ruby)实现集群管理;利用轻量、快速的微型Web框架Sinatra作服务器为用户提供人性化的Web操作界面;利用其丰富的时间管理代码库位平台集成定时功能,方便开发人员调用。

1.2.2 Redis保存集群服务器配置信息

对于统一管理平台,配置信息多为半结构、非结构数据,而且主要面向服务器的配置,因此需要轻量级的非关系型数据库(NoSQL,Not Only SQL)提供服务即可。Redis是一款高性能的KEY-VALUE内存数据库,提供了一些丰富的数据结构,如字符串(String)、链表(Lists)、集合(Set)和有序集合(Zset)。这些数据类型都支持push/pop、add/remove、取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,Redis支持各种不同方式的排序。为了保证效率,数据都是缓存在内存中。其优点表现为性能极高——能支持超过100 k/s的读写频率;丰富的数据类型;原子性;丰富的特性。Redis优越的性能为平台中服务器和集群环境下各个节点的配置信息的存储提供了保障,官方提供了很多语言的客户端,其中基于Ruby语言的客户端是一款非常稳定和成熟的客户端,使用方便灵活。

1.2.3 增强服务器监控——JMX技术

Java管理扩展(JMX,Java Management Extensions)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用,它提供了用户界面指导、Java类和开发集成系统、网络及网络管理应用的规范。

目前JMX管理体系结构基本可以划分为以下4个层次。

(1)设备层(Instrumentation Level):主要定义了信息模型。在JMX中,各种管理对象以管理构件的形式存在,需要管理时,向MBean服务器进行注册。该层还定义了通知机制以及一些辅助元数据类。

(2)代理层(Agent Level):主要定义了各种服务以及通信模型。该层的核心是一个MBean服务器,所有的管理构件都需要向它注册,才能被管理。注册在MBean服务器上的管理构件并不直接和远程应用程序进行通信,它们通过协议适配器和连接器进行通信。而协议适配器和连接器也以管理构件的形式向MBean服务器注册才能提供相应的服务。

(3)分布服务层(Distributed Service Level):主要定义了能对代理层进行操作的管理接口和构件,这样管理者就可以操作代理。然而,当前的JMX规范并没有给出这一层的具体规范。

(4)附加管理协议API:定义的API主要用来支持当前已经存在的网络管理协议,如SNMP、TMN、CIM/WBEM等。

Sun公司在Java5中引入JMX框架用于监控JVM运行状况。在统一管理平台中,利用Jolokia来监控Tomcat运行状态,实现系统的监控告警。Jolokia是一个利用JSON通过HTTP实现JMX远程管理的崭新方法,具有快速、简单的特点。

2 系统设计和实现

2.1 统一管理平台的架构图

图1 统一管理平台架构图

平台架构图如图1所示。统一管理平台主要包括管理模块和Web服务器软件栈,完整的管理平台应包含所有模块,在集群系统中,部分模块可能分处在不同节点,各个节点通过合理的配置可以灵活组成一个Web服务器集群,通过管理平台,可以对各个节点进行配置管理,部署Web应用。同时,提供统一的监控运维接口,增强的异常检测和异常处理能力,同时提供诸如定时任务、第三方进程监控等相关能力。

其中,JVM是运行Tomcat的底层环境,Tomcat和Nginx共同组成了统一管理平台的服务器软件栈,部署管理模块负责统一平台的部署以及Web应用的发布,生命周期管理模块负责整个平台以及各个Tomcat、Nginx运行实例的生命周期,配置管理则负责集群的配置信息以及服务器软件栈各个服务器实例的配置信息,Web管理界面由Sinatra提供人性化的平台操作入口,而Shell命令提供一套命令及管理整个系统,部分功能和Web管理界面是相同的。

2.2 运行模型

统一管理平台的运行模型如图2所示。其中的Tomcat process和Nginx process在单机环境中,处于同一台物理机;如果在集群系统中,虽然可以处于同一节点,但更多的情况是分布在不同的节点,而且各个Tomcat process也有可能处在不同的集群节点。

其中,主要概念介绍如下。

(1)Webjoind:为统一管理平台核心管理进程,负责所有运行时管理事务,包括异常检测和处理、Webjoin定时任务调度器以及Webjoin命令接入等。

图2 统一管理平台运行模型图

(2)Webjoind-daemon:Webjoind的守护进程,负责监控Webjoind进程的运行状态,当Webjoind异常退出时,负责重启Webjoind;当Webjoind占用系统资源过多时,回收其占有资源,调整至合理的范围。

(3)Wrapperd:Tomcat process的父进程,与Tomcat进程一一对应,主要负责收集Tomcat的gc日志,同时处理Tomcat的标准输出(Stdout和Stderr),Tomcat退出时,会自动退出。

(4)Webjoin entry:统一管理平台的入口,通过这个入口管理整个系统。其中大部分命令和状态查看通过Webjoind完成。提供Shell命令和Web界面两种进入方式,Shell命令快速简洁,Web界面管理方便,交互友好。

(5)Tomcat process和Nginx process:增强原生Tomcat和Nginx进程的运维监控功能。并保持其兼容性,使任何基于Tomcat的Web应用,都无需修改即可在统一管理平台中运行。进程数量取决于配置和资源限制,自身并无限制。

2.3 单机版结构图

对于单机版的统一管理平台,其结构如图3所示。平台管理模块是图1中各个模块的功能整合。Webjoin core模块中的生命周期管理模块负责管理各自目标的生命周期,Web应用部署模块负责Web应用程序的部署。统一管理平台允许在一套系统中启动多个Tomcat和Nginx实例。同时,支持一个Tomcat加载多个Web应用,也支持多个Tomcat加载同一个Web应用。其中Tomcat是Java Web应用的容器,Nginx承担反向负载均衡和静态页面处理。

2.4 集群系统结构图

在集群环境下,其结构如图4所示。集群是一种分布式处理系统,服务器集群就是指将很多的服务器集中起来进行同一种服务,但是对客户端用户是隐藏的,在客户端看起来就像是一台服务器提供服务。多台物理主机上的Webjoin软件栈可以灵活组成一个Web服务器集群,这些节点是通过DRB分布式框架进行组织和管理的。

图3 单机版结构图

图4 集群系统结构图

在集群系统中,采用比较流行的master-slave模式进行集群架构的组织。各个节点承担了统一管理平台部分功能,可以是Nginx服务器运行实例,也可是Tomcat服务器实例或者管理模块等。其中,在集群master节点,维护着各个slave节点的配置信息,彼此之间通过DRB分布式框架进行通信:slave节点开启DRB server,在master节点运行对应DRB client来控制slave节点,此外,slave节点的数目不做限制。

3 结束语

统一管理平台解决了Tomcat和Nginx服务器快速部署问题,支持集群管理,提供人性化的Web管理界面供开发人员操作,为初学Web应用的人员提供了便捷的部署实现,也为Tomcat等服务器软件管理、维护经验的继承与推广提供了可能。在实际项目中,能够快速部署服务器和Web应用,并且提供系统级别的Tomcat等服务器的告警监控、有效管理功能,具有非常高的实用价值,得到了业界的认可和好评。

[1] antirez, Redis[OL].[2014-6-5]. http://redis.io/.

[2] 曾超宇,李金香. Redis在高速缓存系统中的应用[J]. 微型机与应用,2013,32(12).

[3] 赵京华. 应用服务器集群管理系统的设计与实现[D]. 北京:北京邮电大学,2007.

[4] 冯胜鹏. Web方式集群管理系统的研究与实现[D]. 西安:西北工业大学,2006.

[5] Jason Brittain, Ian F. Darwin. Tomcat权威指南[M].第2版. 北京:中国电力出版社,2009.

[6] Paolo Perrotta. Metaprogramming Ruby[M]. 廖志刚,陈睿杰. 武汉:华中科技大学出版社,2012.

[7] 吴家祺. WEB服务器集群系统的设计与实现[D]. 南京: 南京航空航天大学,2005.

[8] 晏雪松,基于JMX的监控系统研究与实现[D]. 成都:西南交通大学,2007.

[9] Nginx中文. Nginx功能概述[EB/OL]. [2013-12-11]. http:// www.nginx.cn/doc/general/overview.html.

Unified management of Tomcat and Nginx software stack

XU Xiao-long1,2, WANG Chun1,2
(1 Beijing University of Posts and Telecommunications Networking and Switching Technology, State Key Laboratory, Beijing 100876, China; 2 EBUPT Information Technology Co., Ltd., Beijing 100191, China)

The internet technologies are developing rapidly. The mobile internet is changing people's life profoundly, and Web applications greatly enrich the internet world. Under new circumstances, Web applications development is faced with more severe challenges: sites demand increases, market demand changes faster. Application providers need to alter their focus from Web environment deployment and maintenance to how to genuinely meet the need of application programs. There are a variety of Web server softwares, but most enterprises and teams use open source server softwares such as Tomcat and Nginx. Tomcat&Nginx server software stack proves to be a stable and reliable combination. This paper proposed a unif ed management solution, aiming at providing a solution of professional servers deployment and convenient Web application programs management. This paper will discuss the main funcions and design ideas.

Tomcat; Nginx; unif ed management; server software stack

TN929.5

A

1008-5599(2014)08-0086-05

2014-07-07

国家973计划项目(编号:2013CB329102);国家自然科学基金资助项目(No. 61372120, 61271019, 61101119, 61121001);长江学者和创新团队发展计划资助(编号:IRT1049);教育部科学技术研究重点(重大)项目资助(编号:MCM20130310);北京高等学校青年英才计划项目(编号:YETP0473)。

猜你喜欢
集群统一部署
一种基于Kubernetes的Web应用部署与配置系统
坚持严管和厚爱相统一的着力点
晋城:安排部署 统防统治
碑和帖的统一,心和形的统一,人和艺的统一
部署
海上小型无人机集群的反制装备需求与应对之策研究
统一数量再比较
一种无人机集群发射回收装置的控制系统设计
Python与Spark集群在收费数据分析中的应用
勤快又呆萌的集群机器人