介绍
Cloudify 是开源的云编排框架,管理应用的整个生命周期,主要功能包括:
- 应用编排:blueprint,部署和管理
- 应用维护:工作流,事件和日志管理
- 可插拔:使用插件垒起来的
- 标准:基于TOSCA的DSL(领域描述语言)
术语
- blueprint:cloudify 用blueprint 来定义应用,blueprint 是应用的逻辑展示,包括配置脚本、和其他资源的关联等应用需要的一切;
- workflow:cloudify 用 workflow 来提供和管理应用,workflow 用来定义对应用执行动作的流程,默认为 install;
- plugin:cloudify 用 plugin 实现应用的部署,比如 “home-grown script-plugin” 是执行一堆脚本来部署 web server,对应不同的blueprint,需要安装相应的plugin,安装方式”cfy local install-plugins -p BLUEPRINT_PATH”;
- model:保存应用的整个结构
- deployment:blueprint 的实例,model 的一部分
- node:blueprint 中定义的每个逻辑实体,包含多个node实例(比如multiple virtual machines),对应 blueprint 中的 “node_templates”
- Cloudify Manager:包括开源栈的环境,用户可以
- 利用其不同的插件(例如Docker,脚本,Chef和Puppet插件)来管理应用程序的主机
- 维护 blueprints 目录
- 创建blueprint的多个部署,并安装
- 应用的恢复、扩展和其他定制workflow
- 并发多个workflow
- 使用其Web UI查看指标、搜索日志、查看应用程序的拓扑结构和执行的不同任务
- 通过认证和授权插件为应用管理提供安全环境
- 保留指标和事件的历史
- 管理运行应用程序的主机上的代理
Cloudify Manager 架构
包括三部分:
* Manager:集中控制中心
* Agents:各个节点的代理,负责执行具体的工作
* Web UI:对外展示
Cloudify核心组件
Cloudify的技术栈:
Nginx:HTTP和 反向代理 服务器,接收来自GUI界面的请求,并转发给后端的RestAPI(Swagger)。
Elasticsearch:Blueprint、instance、metrics、log、events的全文检索。
Logstash:日志进行收集、分析。
RabbitMQ:metrics、events、task的异步执行。
Riemann:metrics stream processor(基于Java),一个规则引擎,可以基于metrics进行内存级的过滤、处理。
InfluxDB:分布式时序数据库InfluxDB,用于存储metrics。
Grafana:仪表盘图形化展示组件,用于展示influxDB的数据。
Flask:a microframework for Python,整合Swagger提供Restful API。
Gunicorn:Python WSGI UNIX的HTTP服务器。
Celery:Python Distributed Task engine,通过RabbitMQ实现异步分布式任务处理,用于实现Cloudify的工作流。
Fabric: SSH Library。
Diamond:Python监控组件,提供Monitoring Agent。
===========================================================================================
- Nginx:REST 服务和UI 的代理;文件服务器(保存一些资源)
- Gunicorn and Flask:Gunicorn为WSGI HTTP服务,Flask为web框架
- Elasticsearch:保存应用的models,存储日志和事件
- Logstash:日志收集,并push到Elasticsearch保存
- RabbitMQ:消息中间件,应用之间通信使用
- Riemann:基于策略的事件流处理器
- Celery:分布式的任务队列
- InfluxDB and Grafana:InfluxDB 存储监控到metrics,Grafana是InfluxDB的图形dashboard
关键特征
Any App, Any Stack | 任何应用程序,任何堆栈 使用配方为基础机制, 部署任何中间件堆栈 | |
Automatic Self-Healing | 自动自我修复 跟据配方定义, 宕机系统或机器能自动被新的取代 | |
Auto-Scale, Your Way | 自动伸缩 根据框或自定的指标, 自动伸缩应用程序 | |
Any Cloud | 任何云 支持所有主要的云计算和虚拟平台 | |
Automation of the Entire Life-Cycle | 整个生命周期的自动化 使用一个单一的平台来部署, 管理和更新应用程序 | |
Cluster-Aware Monitoring & Management | 群集感知的监控管理 可插拔的监控, 自定义的警报, 和应用程序感知的监视控制台 | |
Fully Testable on Your Laptop | 在笔记本上就可以提供全套功能的云模拟环境:简单的开始,调试,测试。 |
l 版本功能
虽然cloudify提供开源的是社区版本,一些高级功能(我们很想拥有的)并不提供,但这不妨碍我对cloudify敬意。除了CF,开源社区有了更多的选择,而且提供了新的思路和方式。CF也有2种版本,CF只是vmware的开源版本,vwmare也有商业版本。
功能 | 社区版功能 | 商业版本(技术层面) |
Paas基础能力 | 任何语言任何技术栈 | 另外:大数据服务:Cassandra,MongoDB, 应用程序容器:Tomcat, Jboss,weblogic |
部署结构 | 支持复合/多层结构的应用部署 | 同左 |
部署模式 | 连续部署支持 | 同左 |
Console控制台 | 交互式shell | |
负载均衡能力 | 动态负载均衡 / 动态HTTP负载均衡 | |
高可用 | 高度可用的云控制器 | 同左 |
自我管理 | 自动自我修复 | 同左 |
监控 | 拓扑感知的监控和管理 | 同左 |
节点个数 | 无限制 | 同左 |
Cloud驱动 | Amazon,Rackspace,Azure | 还支持:OpenStack,vSphere,CloudStack |
接口 | Open cloud driver interface | 同左 |
Api | Rich Management API | 同左 |
源代码 | 社区版源代码和编译后的文件 | 不提供 |
4.5.2 总体架构
Cloudify是基于java来实现的,在它的设计思想中,并没有一个paas平台的边界,而是把各种服务器理解为一个个的网格,然后有管理节点分别去关联计算节点,还是典型的C/S模式,这和它的设计它之前的XAP的设计理念一脉相承。
这样的方式使得cloudify总工程很轻薄,但也具有相当的能力,抛去了硕大的PaaS支架的躯体,保留了paas最核心的本质。这种架构和之前的CF大相径庭,但这也是一种不错的思路,因为把这块撇给了DSL来定义,用人工定义的方式解决了服务和应用的定位和绑定功能,底层还是依赖iaas提供的对vm的控制能力,并把整体paas的管理功能封装在当前管理节点和与之相关的计算节点的管理。Cloudify抛弃了外壳,简化了架构,强化了DSL,终于换来了它轻盈的身姿。