Apache Stratos (处于孵化阶段)是一个由Apache community支持的开放的PaaS框架项目。它带来了企业级的服务质量、管理以及安全性,表现为内部私有云,外部管理云和公有云。企业组织,云基础设施供应商以及云服务提供者可以自由的修改,发布和部署 Apache Stratos,而没有任何知识产权的限制,授权费用以及服务费。
Apache Stratos 是当前市面上唯一一个由开源社区掌管的开源的PaaS框架。不像其他的PaaS产品那样,要么隶属于公司(像 RedHat 的OpenShift),要么有一些特定的大赞助商(像 Cloud Foundry),Apache Stratos 属于开放的Apache社区,在这里我们因参与而参与,并且任人唯贤,而不是靠财政方面的赞助。从Apache社区中出现过一些成为现代互联网基础组件的技术,包括Apache web服务器,Tomcat 服务器,Cassandra,CouchDB,CloudStack以及其他。Stratos的加入为Apache添加了一个具有PaaS能力的“家庭成员”——所有的这些都在开源社区的掌控之下。
Apache Stratos 的 cartridge 模型
将传统的基础设施转变成
云服务,并创建了云感知(Cloud-aware)的容器来托管业务逻辑和基础设施服务。通过创建一个cartridge 或者选择一个预编译好的cartridge选项,开发团队可以很容易的把传统应用平台上的软件部署到一个托管的PaaS环境中。cartridge模型提供了运行时的扩展能力,并且可以为任何需要的编程语言,平台框架以及服务器提供多语言的支持。
一个开放的 PaaS 服务支持异构的IaaS环境以及多平台,多语言,多框架的环境。Apache Stratos 的cartridge模型和jCloud抽象层可以使其部署在当下比较流行的IaaS环境中(如,Amazon AWS, OpenStack, vCloud),并且开发团队可以通过对cartridge模型进行扩展来实现他们想要的应用服务器。
Apache Stratos PaaS框架是多种PaaS服务诸如Application PaaS(aPaaS), Integration PaaS (iPaaS) 或 Data PaaS (dPaaS) 的基础。由于我们没有规定中间件环境,所以企业或组织可以将云弹性的可扩展性,资源共享,服务水平管理以及按需自助服务等功能添加到他们的aPaaS,iPaaS或dPaaS中,以构建之间的自己的 xPaaS
团队通过使用Apache Stratos,获得了一个灵活的,为企业量身打造的PaaS框架,该框架没有规定任何具体的业务模型的限制。Apache Stratos 使用者可以自由的部署这个PaaS框架,作为他们的软件和服务的底层支持,而不需要任何许可证,并且也没有任何财政方面的限制,以实现你自己的业务模型,企业用户可以从WSO2和我们的合作伙伴哪里得到服务支持。
开放可扩展的架构
上图展示了Apache Stratos的核心组件(包括Cloud Controller,CEP,Auto Scaler,Stratos Manager)是如何与IaaS层,基础服务层,动态服务层集成在一起的。
其中,动态服务层包含了各个cartridge。而Starts Manager包括Artifact Distribution Coordinator 和 Rest API。
Cartridge模型
关于何为Cartridge模型,可阅读下面的文章
Apache Stratos的Cartridge模型为任意类型的cartridge的提供了
运行时扩展性(run-time extendability),而不用绑定指定的操作系统,比如支持
language cartridge, framework cartridge, 和data cartridge。这一模型,使得Apache Stratos拥有支持多语言环境,而不像其他一些PaaS一样拥有这方面的限制。
另一个Cartridge模型的优势在于,Apache Stratos可以轻易的将历史遗留程序转化成云服务。
以下是各种类型的Cartridge.
Apache Stratos架构设计中另一个很重要的就是各模块之间统一的通信机制,使用的是message bus和real-time event bus.这一通信机制,提供了一个统一的接口,用来集成第三方系统与当前系统合作。而且,该通信机制经过仔细设计,可以通过real-time event bus(通过thrift协议)来应对heavy traffic.并且通过使用AMQP协议支持那些需要稳定传输的消息。
AMQP协议的相关内容,可看下面的文章
因为采用Apache Stratos的jCloud,Apache Stratos支持部署在任意的IaaS平台上,可同时部署多个IaaS,这一点在Cloud Bursting中非常重要。
Cloud Bursting可看下面的文章
定制化服务的真正的灵活性
定制化服务的真正的灵活性,在当前的PaaS市场上是比较稀缺的。大多数情况下,更多的是根据当前已有的资源做到权宜之计。然而,在Apache Stratos中,利用Cartridge模型,可以定制化服务,而不必考虑任何的限制。Cartridge支持以下
类型,fully-configured(必要软件全部已经安装好,已经配置等等),zero-configured(让cartridge用户自己安装和配置自己想要的cartridge),或则两者之间。这使得定制化PaaS平台可以与当前的业务流达到同步。
综合多种因素的AutoScaling
大部分的IaaS供应商都是基于http流量情况来达到AutoScaling的目的,即资源的动态供给。这种情况对于非http的应用进行AutoScaling是有局限性的。然而,Apache Stratos可以根据http和非http流量情况实现智能的动态的资源供给。
Apache Stratos会根据下面的因素来执行AutoScaling算法
1.负载均衡器中的实时request数量
2.内存的消耗情况
3.其他因素
关于第3点,得益于Apache Stratos的干净统一Pub-Sub通信架构,很容易的扩展其它因素来综合考虑AutoScaling策略。下图是Apache Stratos的Pub-Sub通信架构,关于其通信架构,可以查看下面的文章:
预估未来的负载
Apache Stratos的另一个重要的能力就是,它可以基于当前的健康数据情况来预估短期内的未来的负载情况。全部Cartridge,loader balancer,health monitor会通过real-time event bus发送健康状态给CEP(complex event processor)。
CEP会合计这些事件,并且在一段时间内产生一阶导数和二阶导数,之后通过可靠的message bus将结果传送给auto scaler
Auto Scaler 会利用下面的运动方程来计算出近期未来(接下来几分钟)的负载量
- s = 最终预估的负载量
- u = 一阶导数(比如,当前平均负载量的一阶导数)
- t = 时间量(比如一分钟)
- a = 二姐导数(比如,当前平均负载量的二阶导数)
综合多种因素的AutoScaling策略可以实现资源的最大化利用,同时可以减轻容量规划的压力。而且,这个可以在多个云平台之间进行动态资源规划。这给devOps提供了更加简单和精确的容量规划。
多租户
多租户这一特性拥有不同的隔离级别。多数的PaaS供应商都有“container”级别的多租户特性,比如virtual machine,LXC或者docker等等。但是这些针对成百上千万的租户的大规模部署场景时,是不够的。
Apache Stratos 同时拥有“container”和“in-container”级别的多租户能力。拥有了“in-container”级别的多租户能力后,用户将会拥有更高的租户密度,可以优化资源利用率,降低租户占用的空间,并且可以支持拥有大量租户群(数百万计)的PaaS服务。
可伸缩的动态负载均衡
在云中,loader balancer在可伸缩的应用中扮演了重要的角色。loader balancer会将请求分发到各个服务器节点,或者集群,或者其它资源,以达到最大的吞吐量,最小的反应时延。
Apache Stratos 可以为任何类型的IaaS提供可伸缩的loader balancer,并且可以与任何第三方的loader balancer集成。因此,Apache Stratos在提供了更加有效的负载均衡的同时,也更具有灵活性和扩展性。
Apache Stratos 架构支持基于自动调整的http和非http。Apache Stratos PaaS会监视云状况,分析使用趋势,并基于当前和将来的负载动态地提供云资源。
Apache Stratos的负载均衡的特色以及优势
Provisioning --即可动态增加loader balancer。在Apache Stratos中,loader balancer也是作为cartridge来使用,因此,在应用程序第一次请求资源时,Apache Stratos会为其配置最低数量的loader balancer.而且,Apache Stratos为了更加有效的multi-cloud的部署,Apache Stratos支持在每一个cloud和region中loader balancer的动态增减。
Flexibility --可以定义service-level级别的负载均衡。Apache Stratos可以通过REST API定义service-level级别的负载均衡,即可以在一个负载均衡器中实现多个service-level级别的负载均衡。
Expandability -- 能够与任意的第三方的loader balancer集成。 由于Apache Stratos中使用了message broker和基于topology的模型,很容易集成类似HAProxy,night,AWS ELB等第三方的loader balancer,并且根据部署情况主动选择最优化的负载均衡策略(比如,若是部署在EC2上,则使用AWS ELB这个负载均衡器)
操控IaaS资源的能力
不同的IaaS供应商提供了不同类型的资源池,例如region,availability zones,hosts,subsists等等。但是,如果我们不能控制这些资源,并且在PaaS层优化,这会导致产生很多资源的浪费。控制IaaS的资源也是执行高可用性部署的关键。
Apache Stratos已经经过仔细的设计以解决上述提到的问题。在Apache Stratos中引入了“partitions”和“network partition”的概念来组织IaaS的资源,这使得以一种非常可控的方式来部署cartridges。
Partitions
Partitions是一种逻辑概念,devOps可以根据可用的IaaS资源池(例如,regions,availability zones等等)来定义Partition.基于此概念,Apache Stratos可以在哪里派生Cartridge实例和在哪里选择资源池,这一点在高度可用性和容灾性方面非常的有用。
Network partitions
在同一个Network中,在逻辑上Apache Stratos可以组织起一个或者多个partitions,这就是network partitions的概念。依据此概念,Apache Stratos Auto Scaler拥有了监测和预测某个特定network bound regions的负载状况,并且非常简单地采取必要的负载均衡策略。这一点,是Apache Stratos在PaaS市场中引入的非常独特和重要的一种特性。
日志、计量和监测
日志、计量和监测是非常重要的不可忽视的特性。Apache Stratos可以抓取所有的健康数据,应用程序的日志和使用情况,最终可以将它们集中到某一个集中的位置。这一点减轻了DevOps的负担,否者在一个拥有成千上万的实例的云平台中依次登录和监测每一个例子,几乎是不可能的任务。
Cloud bursting(云爆发)
Cloud bursting现在是一个热点,它是指将应用程序的压力引导到另外一个云系统中,来应对本系统中最高峰时的负载量,这样可以减少本云系统的TCO(Total cost of ownership)。Apache Stratos Cloud bursting已经经过仔细的设计,可以与私有云、公有云和混合云一起使用,并且为每一个 bursting cloud提供有效的loader balancer.