功能
组合应用
Stratos能够根据需要启动和停止实例(单租户),在Stratos术语中称为订阅和退订。订阅将会启动最小数量实例的集群,退订将停止那些实例。在订阅之前,需要定义和部署相关的cartridge,使得Stratos了解你要提供服务的细节和所要使用的IaaS等相关信息。
在Stratos以前的发布版本中,每个订阅所启动的集群是相互隔离的,在多个集群之间没有连接。然而,在现实世界中,存在着群组方式的多集群需求,其中一个或多个集群依赖于其他集群。因此,在本版本中引入了组合应用。
组合应用支持cartridge群组。通过cartridge群组,提供了部署含不同服务运行时应用的能力,这些服务运行时有相互关系或依赖关系。更进一步,应用中的每个服务运行时可以关联伸缩或者有依赖关系的服务组合共同伸缩。因此,用户可以在JSON文件中定义所需要的服务运行时、部署和自动伸缩策略、构件库和所有的依赖关系,这样Stratos可以根据定义提供所需要的运行时。
组合应用 = 多群集配置信息 +依赖关系配置信息
组合应用相关的术语,如:群组、依赖关系、启动顺序、群组伸缩,依赖组合伸缩,停止处理和元数据服务将在后续章节中进行深入描述。
Cartridge群组
Cartridge群组是一个描述将多个cartridge组合到一起的定义元数据。Stratos的组合应用支持群组的嵌套,也就是一个群组作为另一个群组成员。Cartridge群组定义了一组群组和一组cartridge之间的相互关系。群组成员的关系可以是启动顺序、停止处理和可伸缩的依赖关系。编写一个群组定义提供了在不同组合应用中重用群组的能力。
启动顺序
在一个群组或一个应用中,如果有二个或更多的独立cartridge或群组,你可以定义它们的启动顺序。
停止处理
停止处理允许你定义在应用中某些附属的运行时失败的情况下所采取的行动。当不能满足所需最小实例数量时触发失败处理。Stratos支持以下三种停止处理操作。
· 停止所有实例
· 停止所依赖的实例
· 不动作
关联伸缩
在成员间(cartridge 或群组)定义了关联伸缩后,当其中某些成员发生了伸缩(扩张或收缩)时,所有其他关联的成员也会进行相应的伸缩来维持预先设定的比例。
群组伸缩
如果在群组定义中将“群组伸缩”设置为“是”,那么在某些情况下,群组自己将进行伸缩,同时受最大实例数限制和关联伸缩关系限制。
应用JSON
应用JSON是结构化的JSON,你可以定义应用所使用的运行时、cartridge、cartridge群组、依赖关系、构件库和自动伸缩策略。应用JSON可以转换成应用模板,可以在不同部署模式下重用来部署同样的应用。部署策略是定义部署模式的方法(如:高可用、灾备、云端负载均衡、混合云,达到4个9或5个9的可靠性)。
应用部署策略
Stratos中部署策略就是对所使用部署模式的定义。部署策略支持群组级别或集群级别的部署。全局部署策略是在一处定义了所有子模块(嵌套群组)的部署策略。因此,每个应用只需要一个部署策略,其中包括了所有子部署策略。这样做的好处如下:
同样的应用可以使用不同的部署策略来部署到高可用环境(HA)或者负载均衡环境。
这样确保在部署策略执行后才实际启动VM,而不是,在应用部署后就立即启动。
部署策略总是和应用结合在一起。
在集群级别或群组级别不需要定义多个部署策略。
分区定义细节也可以在部署策略中定义。
部署策略定义中用到的术语如下:
网络分区
网络分区是在网络boud方式下定义的一个逻辑分区。因此,Stratos将用IaaS的区域(Region)来映射到网络分区。网络分区的缩写是: NP
示例:
NP1: EC2-US-WEST
NP2: EC2-US-EAST
NP3: OPENSTACK-NY-RegionOne
分区
分区在网络分区下更细粒度的逻辑分组,分区的缩写是: P
示例:
NP1:P1 -> US-WEST -> us-west-1 (N. California)
NP1:P2 -> US-WEST -> us-west-2 (Oregon)
应用策略
应用策略包括了应用所使用到的所有网络分区和分区定义。
使用默认激活
如果设置成“是”,网络分区将作为默认值。如果设置成“否”,网络分区将作为最低优先级别的设置。
子策略
每个子策略都引用应用策略中的网络分区和相关分区来定义自己的部署模式。注意,如果你通过引用应用群组来定义子策略,那么子集群/群组(cartridge运行时)将继承相同的策略。
最大数量
一个分区允许的最大实例数。
在群组中: 表示在一个分区中允许的最大群组成员实例数。
在集群中:表示在一个分区中可以为集群维持的最大集群成员数。
分区算法
Stratos支持以下二种分区算法:循环法(round robin)和顺序法(One after another)。分区算法的选择依赖于使用的场景。
例如:图-04中所示,有二个子策略应用在cartridge运行时级别。
子策略: sample1
分区: P1, P2
P1 最大数量 : 4
P2 最大数量 : 3
分区算法: 循环法(Round robin)
子策略 : sample2
分区: P3, P4
P3最大数量: 2
P4最大数量: 3
分区算法: 顺序法(One after another)
元数据服务
组合应用包含一组cartridge,这样有许多cartridge实例需要启动,信息需要在这些cartridge之间共享。元数据服务是Stratos中的一个Web应用,负责在运行时服务间共享信息。元数据服务作为所有cartridge实例相关元数据集中放置区域,cartridge发布元数据给元数据服务,其他对其感兴趣的组件就可以从元数据服务获取其元数据。
在元数据服务中,元数据以键值对(key-value)方式存储,多个值可以关联到一个键上,每个键至少有一个对应的值。当创建了一个应用后,Stratos管理器将建立一个JW (JSON web token) OAuthtoken,其中含有应用的ID,这个token将传入cartridge运行时实例或容器中作为加载用的基础数据。Cartridge代理在和元数据服务交互时,使用这个token进行验证。
可以通过REST API增加、获取和删除元数据服务中的元数据。cartridge的所有实例都调用REST API来发布各自的信息到元数据服务,当在不同的cartridge实例间需要共享信息时,相关的cartridge实例通过调用REST API获取所需要的信息。
元数据客户端
元数据客户端用于第三方Stratos组件(如:云控制器、自动伸缩调度、Stratos管理器)和元数据服务的交互。当然,其他具有JW OAuth token的客户端(如:Cartridge代理)也可以直接和元数据服务交互,而不需要通过元数据客户端。元数据客户端是一个封装了请求和响应传递的Java API。这样,第三方Stratos组件可以通过元数据客户端来增加、获取和删除元数据服务中的元数据。例如:在云控制器中的一个Git资料库URL需要加到元数据表中时,就需要用到元数据客户端。
智能策略
ApacheStratos使用二个智能策略:自动伸缩策略和部署策略。Stratos使用自动伸缩策略和部署策略来调整系统的弹性。自动伸缩和部署策略主要用于平台即服务 (PaaS) 层的SLA,同时也有利于软件即服务 (SaaS) 层应用程序。例如,如果你想要获得五个 9 的可用性 (99.999%),你必须保持最小数量的实例并且将实例运行在不同的云供应商、 不同地区、 不同的区域等。如果在部署策略中进行了定义,可以满足上述要求。
下面小节详细说明这两种智能策略。
自动伸缩策略
自动伸缩策略是一项基于负载阈值来决定进行自动伸缩处理的策略。负载阈值将基于系统处理量、内存消耗和平均负载的要求来确定。自动伸缩器使用上述参数决定是扩张还是收缩。定义自动伸缩策略的JSON 文件的详细信息,请参阅自动伸缩策略资源定义章节。
部署策略
部署策略是一套cartridge部署时使用到的规则。部署策略描述了哪些云分区被服务所使用。单个应用可以有多个兼容的部署策略。每个部署策略定义了可用分区、网络分区,分区算法和每个分区允许的最大实例数。定义部署策略的JSON 文件的详细信息,请参阅部署策略资源定义章节。