文档章节

Cloudify——The Universal Service Manager (USM)

hjswust
 hjswust
发布于 2013/04/24 22:44
字数 4056
阅读 593
收藏 3

Overview

Universal Service Manager (USM) 是GigaSpaces processing unit ,特为安装、执行、监控、和管理外部过程而设计。 USM管理外部过程的生命周期,并在GigaSpaces 服务网格(GigaSpaces Service Grid)中扮演代理角色。这允许运营商通过服务网格将任何应用程序部署到云,并获得所有的好处(集中管理、远程部署、性能统计、等…)

How it works

建立一个服务器进程通常意味着设立主机(物理或虚拟),下载和解压缩二进制文件、设置配置文件和启动/关闭脚本。USM帮助您运行在GigaSpaces服务网格机器上的过程自动化。通过USM,可以设置下载、安装、运行、监控整个过程所需要的详细信息的一个文件。这个文件,就是recipe,通过使用领域专用语言(DSL,Domain Specific Language)描述,专门设计来描述这个部署和监控的自动化流程。USM项目还提供内置插件和工具,可以用于常见的场景。配方DSL使得你应该安装和执行过程描述变得容易,使用命令行操作(包括windows批处理文件,Unix shell脚本和与操作系统无关的groovy脚本)或小段代码称为闭包,可以嵌入到配方文件。(More information is available online for Groovy and Closures)

理想情况下,您在运行的进程时,已经带有所需的脚本以启动和停止它,所以一个简单的recipe只会需要你设置这些脚本的名字,并表明你就已经准备就绪了。

What is a recipe

一个配方是基本的指令列表,将在需要时由USM执行。其目的是作为一个工具,可以被很少或没有开发经验的人们使用,但有一个幕后操作。 More details are available in Developing Recipes.

USM Lifecycle

USM的生命周期的各阶段可以被用户所控制,允许一个高水平的自定制。USM的生命周期被划分成几个阶段,每个阶段包括一个或多个事件。recipe在需要时可以实现这里的任何事件。只有“开始”事件是强制事件,用于启动外部过程。生命周期阶段和事件如下所述。

Service Start Phase

events: preServiceStart
当一个服务开始时被调用。这个事件只会在启动服务的第一个实例时执行 (which has an instance ID of 1)。

注意,其它实例可能在同时被启动,因此在他们的初始化阶段,可以在不同实例同时执行。
Initialization Phase

events: init

当USM第一次启动时调用。应该用于验证系统级设置(支持的操作系统,硬件架构,等等)。

Install Phase

events: preInstall, install, postInstall
在init阶段完成后调用。将设置应用程序期望的任何它需要运行的二进制文件。

注意,将来的版本Cloudify将提供内置集成标准软件包管理器, 像apt, yum, msi or maven.
Start Phase:

events: preStart, start, startDetection, postStart
开始事件是唯一强制性事件,外部进程被启动。应该使用的事件如下:

· preStart – 检查所需的操作系统文件可用,如文件、磁盘空间和端口。

· start – 启动外部过程。这个事件有特殊要求(见下文)

· startDetection – 在开始事件中,USM启动外部过程之后,当外部进程被认为是“就绪”时应用程序应该通知它。在实践中,USM常是启动一个操作系统shell,是然后启动实际的过程的启动脚本。当实际的过程是准备好了,USM并不一定知道,因此这个事件提供了一个提示。当这个事件结束,USM将扫描它刚启动的操作系统进程树(即,在开始事件中的这个启动进程,和其所有了子进程)。

Stop Phase:

events: preStop, postStop 
默认情况下,USM通过调用操作系统kill进程来停止这个外部过程。(using the Sigar library). 对于大多数情况,这是一个有效的方法,但可能不适合一些案例,一个进程需要执行特定的关机操作时,如持久化状态到磁盘。在这些情况下,配方应该使用preStop事件来处理任何额外的逻辑。例如,一个tomcat配方可能在preStop阶段调用关闭脚本,然后等待,直到关闭命令关闭了tomcat进程。

Shutdown Phase:

events: shutdown
关闭事件应该用于在USM实例关闭前执行任何需要清理工作。它常用在,运行物理主机上,要删除一些存放在本地文件系统上而不是存放在服务默认目录下的文件时 (服务默认目录下的文件,会在USM卸载时自动删除)。

Service Installation

服务包括一个安装阶段配方,配方将设置正确执行需要的文件。
这些文件通常可以使用下列方法之一,或它们的一个组合:

  1. 使用像wget工具,或包存储库像yum、apt、maven,从网上下载文件。
  2. 下载文件从本地网络资源,如网络共享。
  3. 假设放在文件系统的主机的文件是可用的。
  4. 在打包服务文件夹中包括所需的文件,可能是一个压缩的文件,将在安装阶段解压缩,或者是未压缩的文件。

其中每个选项影响部署的系统的架构:

  1. 从网上下载文件需要一个外向连接到互联网 (可能在某些环境中不可用),以及足够的带宽,确保快速下载。所需的时间下载文件也是一个因素,作为一个慢下载将大大增加每个实例的启动时间。最后,源站点必须随时可用,如果一个主机或服务实例失败,一个USM实例必须供应。Cloud Blob Stores通常一个好的候选源站点。
  2. 当下载从本地网络资源,资源必须高度可用的。例如,单个NFSserver,是一个不好的选择,因为一个NFSserver的失败可能导USM实例不能恢复。
  3. 这个选项通常意味着使用一个预装所需二进制文件的虚拟机,或使用一组固定的以前设置了所需的文件的机器。这种方法是一种适合应用程序期望部署在相当静态的知名的系统,或在一个特定的云供应商。
  4. 深入打包文件的过程,打包处理需要考虑打包文件的大小。当前版本,GigaSpaces服务网格会验证文件是否大过150MB。对于小于这个大小的文件,这个打包处理将保持至少两个主机(主机运行GigaSpaces Grid Service Managers). 未来版本将支持更大的文件。

Executable Recipe Entries

几个配方参数是可执行的条目– 条目定义配方特定代码的执行,如执行shell脚本。
USM支持多种方式来定义一个可执行的条目。每种方式都有不同的输入。

· Command line (String): 从字面上表明了命令行应该作为一个外部过程执行。如果空格存在于命令行, 每个单词被视为一个单一的参数,由所有的单词构成一个字符串数组,所以,第一个单词是运行的可执行文件,其余是可执行的参数。

· A list: 类似于命令行选项,这个选项通过部分明确地阐述定义命令行,允许用户通过包含空格参数。

注意处理空格,在操作系统中指定单引号或双引号,它的职责是开发人员来处理这个正确的配方。

· A closure: 在USM的JVM中一个可执行的代码块被执行。该选项提供了最好的性能,允许你在你的recipe中避免使用额外文件,但是需要懂得Groovy编程语言。此外,重要的是要注意,代码执行一个闭包的工作文件夹是在USM的JVM工作文件夹(即,GigaSpaces Grid Services Container)。这通常是在GigaSpaces安装目录下的bin目录下,而不是USM的serrvice文件夹。通过服务上下文可以找到service文件夹。

· A map: 在某些情况下,一个配方将运行在多个操作系统。每个操作系统可能需要一个稍微不同的实现。map选项允许您定义一个映射为每个操作系统。map的key 是一个字符串,表示一个Java正则表达式(更多细节可以在Javadoc中找到,http://download.oracle.com/javase/6/docs/api/index.html?java/util/regex/package-summary.html),其应该是前面描述的选项。
USM将尝试匹配的操作系统,通过map中keys(使用‘os.name’属性) 。和执行第一个匹配的条目。典性的keys是‘Linux’, ‘Win.\*’, ‘Mac.\*’ (最近所有的苹果操作系统)。
操作系统名称的列表可用。在http://lopica.sourceforge.net/os.html.

所有外部进程启动使用服务目录(“ext“的处理单元)作为进程的工作目录。

Command line handling

USM给定的命令行执行一些常见的修改,基于一些常见的用例:

· 在windows上,如果首字以‘.bat’结尾,表有这是一个windows批处理文件,这个命令通过‘cmd.exe’和‘/c’预处理。这是正确的方法来执行一个批处理文件。winndows machines,命令行启动之前,如果第一个参数是一个服务recipe文件夹及子文件夹中的文件,被标记为可执行。

· 如果命令行的首字是以‘.groovy’结尾,USM将会启动groovy processor,由GigaSpaces提供 (在GigaSpaces安装目录中的tools/groovy) ,处理给定的命令。这需要CLASSPATH环境变量是可用的,对于Groovy的特定jar文件是可用的,比如在PU下的lib目录。

Complex command lines

USM并不是操作系统的命令shell替代。
它不处理参数,单引号或双引号、空格、及shell中的其他特殊字符。如果你的命令行是复杂的,建议你复制命令到脚本文件(windows批处理文件,unix shell脚本等)和使用新的脚本文件名作为命令行。 这将确保你的命令执行,就像它是一个shell中执行。

Plugins

配方文件旨在处理最常见的用例,但它是不可能处理所有的场景。
最终,您可能会遇到一个场景中,需要编写自定义代码来处理某种事件或性能统计。
这是什么插件机制允许。一个插件是一个java类,它实现了org.cloudifysource.dsl.Plugin 接口,再加上一个或多个额外的接口这里所描述的那样。
POJO类名称,以及参数的映射,被定义在这个配方文件。 
当USM加载时, 它将根据接口的实现执行插件,给开发人员所需的灵活性。
将包含编译插件的实现和任何额外的类及资源需求的jar文件,放在你的recipe文件夹中usmlib目录。
当PU被部署时,这些文件将被放到PU的lib目录,使得它们在USM的类加载器中可用。

How plugins works

一个类实现一个插件应该实现的接口,它形成钩子(如特定的事件、监控等),并且它必须有一个默认的构造函数。当USM启动时,它将读取DSL文件,并根据recipe中指定的类名中创建实例,通过指定的配方文件参数映射传递参数给该实例对象。然后这个对象加到USM的Spring应用上下文中,它是一个spring bean单例。这个对象将根据接口插件实现会注入到USM不同的钩子。

Monitors and Details

GigaSpaces Service Grid允许一个Processing Unit实例通过key/value的形式发布数据,即可以是保持PU生命周期的静态数据(ServiceDetails),也可以是任何时候产生变化的动态数据(ServiceMonitors)。
USM发布一组细节和监控器, 主要与操作系统统计的监控过程,但一个配方可能根据需要增加额外的细节和显示器。
在这个时候,添加监控或细节,需要实现一个DSL插件,虽然未来的更新将允许一个配方开发人员直接在配方中定义细节/显示器。
发布监控或细节,插件应该实现一个或两个同时相关的接口:
org.openspaces.usm.details.Detailsorg.openspaces.usm.monitors.Monitor.

USM Technical Design

本节描述一些USM实现的技术细节。创建大多数配方都不需要熟悉这些细节,但是对于更先进的实现是有用的。

Implementing events and other integration points

USM在很大程度上依赖于spring的基础依赖注入。 所有用户控制的事件和集成点通过实现一个或多个USM接口形成POJO而实现的。例如,”init“事件是被一个实现接口org.openspaces.usm.events.InitListener 的POJO处理的。在USM启动期间,它将加载DSL文件,并使用其设置中定义的来创建一系列的POJOs,来实现recipe中描述的行为。下图展示了所有可用的接口:
clip_image001

Processing Unit Structure

USM被部署成与标准的XAP Processing Unit一样。
它包括一个标准的pu.xml文件,usm.jar实现文件 (在lib/platform/usm下的XAP安装文件夹下可用),和一个额外的文件夹, 命名为‘ext’, 用于放置服务的配方和任何额外的资源。
PU
+ lib
     \| usm.jar
     \|
+ META-INF
     + spring
          | pu.xml
+ ext
     | -service.groovy
     |

Process Handling

USM充当一个外部进程的代理,定义在配方中。在GigaSpaces service grid中代表这个进程。要做到这一点,它为此进程监视操作系统指标,如CPU使用率,内存消耗等等。 但能够做到这一点,USM必须先找这个进程。这听起来很容易,因为USM启动外部脚本的组件。但在现实中,可以启动一个进程,进程启动另一个进程,再启动另一个,等等。例如,一个进程可以启动一个groovy脚本。USM启动一个shell进程,像groovy启动脚本的bash,用于启动一个JVM运行Groovy脚本 ,goovy脚本再启动实际的进程。这最后的进程是USM应该监控的,而不是启动时的初始Shell进程。

通过比较在启动外部进程前和启动后的操作系统进程树,实现USM处理。一个新的进程其父进程是USM的JVM,称为子进程(child process)。USM随后寻找一个用相似方式被子进程启动的进程,再继续沿着进程程树找,直到“叶子”进程被找到,不再有子进程。这个进程也是真正的进程(actual process), 并且这个进程就是USM将将监控性能统计数据

The child process and the actual process may be the same.

在USM能够找到这个真正进程前,它必须首先知道实际的过程已经启动了!启动进程链,最终开始实际的过程可能需要一个不确定的时间。正是因为这一原因,USM支持开始检测事件,即配方确定在实际进程已经开始了。这是最经常完成的等待一个端口打开本地主机上的(如80端口为一个web服务器)或一个特定的文本消息被写入到一个日志文件。例如,通过轮询端口,直到它变得可用,recipe可以告诉USM什么时候实际进程是就绪了。一个工具扫描端口与USM打包在了一起,尽管配方可以配置任意代码来确定这个。

If one of the processes in the process tree under the child process launched multiple processes, theUSM will not be able to determine which process is the actual process. This behavior is not currently supported by the USM.

This document refers to Cloudify Version: 2.2

© 著作权归作者所有

上一篇: Java Ant
hjswust
粉丝 13
博文 50
码字总数 35806
作品 0
绵阳
私信 提问
加载中

评论(0)

带标签的Windows终端--ConEmu

ConEmu是一个带标签的Windows终端,提供多标签支持和丰富的自定义选项,是Windows下不可多得的Console. 支持多标签,甚至支持将其它的GUI程序(不限于console程序哦,比如putty/记事本等都可...

匿名
2013/01/08
1W
0
在线打一个oracle热补丁的例子

1.检查冲突 [oracle@oracleB 18034737]$ $ORACLE_HOME/O Patch /opatch prereq CheckConflictAgainstOHWithDetail -ph ./ Oracle 中间补丁程序安装程序版本 11.2.0.3.4 版权所有 (c) 2012, ......

tututu_jiang
2018/06/13
37
0
Django Book 2.0 笔记——Model

配置数据库: settings 文件内: DATABASES = { } 如果是 SQLite,则只需填写 engine 和 name,SQLite 的 name 应当包含可靠路径(因为没有 server): DATABASES = { } 测试数据库配置: >>...

lionets
2014/03/31
464
0
【总编下午茶】一场关于四合院和楼房的云架构讨论

短短四五年,云的时代已经不可阻挡,并逐步吞噬和改变了原来的IT基础架构,形成了一套完整的云基础架构服务。但是否向云迁移、如何迁移、什么时候和什么情况下迁移,很多企业IT管理人员着实有...

yangsir
2018/06/26
0
0
【Kafka】Kafka Manager 安装

https://github.com/yahoo/kafka-manager 编译环境:需要SBT和Java 8+ ,编译完成了后的zip包,运行只需要java 8+环境就好了,不需要SBT。 一、安装SBT和Java 8+ 二、下载编译kafka manager 三...

HarryWu
2016/05/12
627
0

没有更多内容

加载失败,请刷新页面

加载更多

docker上启动nginx,并配置修改nginx的配置文件

1.使用docker 下载nginx 镜像 docker pull nginx 2.启动nginx docker run --name nginx -p 80:80 -d nginx 这样就简单的把nginx启动了,但是我们想要改变配置文件nginx.conf ,进入容器,命令...

yuxw
2分钟前
0
0
管道符|重定向与环境变量

重定向 管道符 通配符 转义符 环境变量 重定向 重定向(把命令和文件结合起来使用) 输入重定向< 将文件重定向到命令里,让文件去匹配命令执行,与正常的名命令对文件的执行方向相反,但结果一...

Venus_辉
4分钟前
7
0
恢复丢失的Joomla密码的最常用方法

忘记密码是很常见的事情。有些用户将密码保存在其默认浏览器内存中,几个月后您可能会忘记任何事情。我们中有些人甚至不记得他们在Joomla安装时发出的密码。本文介绍了如何重置Joomla管理员密...

六艺网络专注于Joomla
7分钟前
22
0
更改后如何重新加载.emacs?

如何才能使Emacs重新加载在.emacs更新的所有定义,而无需重新启动Emacs? #1楼 在您的初始化文件中定义它,并通过Mx reload-user-init-file调用 (defun reload-user-init-file() (interact...

javail
13分钟前
32
0
我眼中的分布式系统可观测性

作者:黄东旭,PingCAP 联合创始人兼 CTO 位于 M87 中心的特大质量黑洞示意图(© EHT Collaboration) 今天的文章我想从这张模糊的照片说起。 相信很多小伙伴对这张照片并不陌生,这是去年人...

TiDB
14分钟前
57
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部