Flynn初步:基于Docker的PaaS台
Flynn它是一个开源PaaS台,无论要部署的应用程序,你可以建立自己的主动性Docker容器集群的实现,能特性与组件设计大量參考了传统的PaaS平台Heroku。本文旨在从使用动机、基本对象、层次架构、功能组件、基本工作流这几个方面对Flynn做整体的介绍。
为什么须要Flynn
为了便于理解Flynn的作用与功能,让我们先来看看应用程序从开发到构建再到部署再到执行分别须要经历的几个实体状态:

更详细一点。以一个Java程序为例来描写叙述:
- 源码:包含*.java、log4j.properties、pom.xml等文件。 
- 公布包:源码被编译打包后生成一个JAR包,这个就是公布包。 
- 部署配置:比方每一个进程的启动命令、环境变量、系统属性等。 - 通常。这些配置会写在一个启动脚本里面。 
- 进程:执行Java程序的实体。一个Java程序能够起多个进程,每一个进程启动不同的主类(实现了main()方法的类,一个JAR包能够包括多个主类)。 
引入Docker后,公布包变成封装了JAR包与JDK环境的镜像,进程变成在相互隔离的容器里执行。可是,从源码到镜像、从镜像到执行容器这两步转换过程须要用户人工的操作。
尤其是后者的转换,涉及到集群资源调度、自己主动部署、配置管理、容器管控等一系列的复杂流程。
更进一步。在执行阶段还涉及扩缩容、日志查看、错误处理、执行监控等运维需求,假设所有人工操作将耗费巨大的工作量。
这时候类似Flynn这种PaaS出场了,基于Docker之上进一步封装了整个构建、部署、执行工作流,使得用户仅仅需简单地提交代码就可以完毕开发到执行的高速转换:
- 开发到构建:用户通过git提交源码,由Flynn自己主动构建镜像,并提供版本号的管理——用户能够创建新版本号(提交新代码或改动部署配置)、回滚老版本号等。 
- 部署到执行:Flynn自己主动选择执行机器,为每一个进程副本部署启动单独的容器,并提供进程的管理——用户能够做扩缩容、查看日志、监控状态等。 
Flynn的基本对象
以下我们来看看公布包、部署配置、进程这三个实体在Flynn中是怎样抽象的。例如以下图所看到的是其基本对象的关系描写叙述:

- App:表示一个应用,全部其它对象都是环绕App而展开。 
- Artifact:表示应用的公布包,实际上相应一个Docker镜像。 
- Process:表示应用的进程。通过一个镜像能够启动多个不同的进程,每一个进程执行在自己单独的容器里。 
- Release:是应用公布态的抽象表示。 - 它在Artifact的基础上添加了一些不可变(immutable)的静态配置,比方每一个进程的启动命令行、环境变量、绑定port、等。要改动这些配置,须要生成一个新Release。 - Release这样的不可变性是为了方便做Rollback。即应用随时能够回退到之前的Release。 
- Formation: 是应用执行态的抽象表示。它在Release的基础上添加了可变(mutable)的动态配置。即每一个进程的副本(replica)个数。 
- Job: 是进程副本的抽象表示,每一个Job相应一个执行容器。因此,在后文中能够看到。Job是资源调度的基本单元。 
Flynn的层次架构
例如以下图所看到的。Flynn的架构自下而上分为两个层级——Layer 0和Layer 1。简单地理解,能够觉得Layer 1负责接受用户请求,封装成应用的执行指令。再由Layer 0解决在哪里执行、以什么方式执行的问题。详细一点讲,Layer 0面向的对象是Formation,负责将底层的集群资源封装成可执行Formation的一台主机;Layer 1面向的对象是App。负责将App从源码构建成Artifact。进而封装成Formation提交给Layer
 0去运行。
这样的分工明白的层次划分,使整个系统很灵活。相互松耦合。便于随意组件的替换(比方。甚至能够把Layer 0替换成不用容器去运行Formation)。

Flynn的功能组件
以下总结一下组成两个层级的各个组件及其功能(全部组件自身都能够执行在容器里):
Layer 0
- Scheduler: 资源调度器,定期从Layer 1获取Formation的更新。再依据每一个Formation的部署配置生成一个个的Job,最后从集群中选择合适的机器去执行这些Job。 
- Host Service: 执行在集群每台机器上的agent,负责管控执行在本机的容器,并收集执行状态信息。 
- Host Leader:一个特殊的Host Service,做为"cluster leader",负责维护整个集群的状态信息(比方有哪些机器、每台机器上执行的Job等)。并提供给Scheduler用于资源调度。 
- Discoverd:基于etcd的服务发现模块,提供容器间的发现机制。实际上。Flynn自身的组件间通讯也是通过Discoverd来相互发现的。 
Layer 1
- CLI:提供给用户使用的命令行工具。 
- Controller:为Flynn系统的入口,封装了核心对象(比方app/artifact/release/job)的增删改查操作,以RESTFul接口方式提供给外部客户和内部组件调用。 - 它维护的REST对象将持久化到postgre数据库。 - Layer 0的Scheduler就是通过Controller的接口来获取Formation更新的。 
- GitReceiver:接受用户git push源码的SSHserver。接受到git push后将触发Receiver。 
- Receiver:基于buildpack机制。利用SlugBuilder从源码包构建slug包。 - buildpack和slug都是从Heroku借鉴过来的概念。简单地理解。buildpack是一组用于构建源码的脚本,buildpack能够多种多样,每一个buildpack可构建某种类型的源码,这样的类型能够是不同的语言(比方Java、PHP)、不同的构建方式(比方maven、gradle);而slug则是buildpack构建生成的部署包。包括了编译输出文件、依赖库文件等执行环境。 
- BlobStore: HTTP文件server,用于上传/下载slug包。 
- SlugBuilder:接受源码包,基于某种buildpack构建生成slug包。选择哪一种buildpack能够显式地指定,也能够由SlugBuilder依据源文件自己主动匹配。 
- SlugRunner:执行slug包,会从BlobStore下载应用的slug包。 
Flynn的工作流
以下通过一个样例来展示Flynn各个组件的工作流。使用Flynn来构建部署应用最主要的流程是以下三步:
用户创建app:
flynn create myapp

用户提交app代码:
git push flynn master

用户扩容app的进程:
flynn scale web=2

对照Kubernetes
Kubernetes是Google开源的Docker容器集群管理系统,为容器化的应用提供资源调度、部署执行、服务发现、扩容缩容等整一套功能,更具体地介绍请參考作者的还有一篇文章《Kubernetes初探:原理及实践应用》。
在应用的抽象上,Flynn与Kubernetes有本质的差别:Flynn的应用管理单元是App,仅仅相应一个Docker镜像,但能够由这个镜像来启动多个进程,而且每一个进程能够单独扩缩容;而Kubernetes的应用管理单元是Pod,可相应多个不同的Docker镜像,而且Pod内的各个容器保证会执行在同样的机器上,整个Pod作为扩缩容的基本单位。
另外一个根本的差别是Kubernetes不提供镜像构建与版本号管理的功能。因此,Kubernetes仅仅能看成是面向容器而不是面向应用的系统。
当然,我们能够在Kubernetes之上扩充这些功能。
对照Deis
与Flynn类似,Deis也是受到Heroku的启示,基于Docker之上构建的PaaS平台。因此,从功能特性到应用抽象,两者是大同小异。
至于两者的差异,了解不是非常多,这里提三点:第一,Deis是用Python开发的,而Flynn是Go;第二。Deis依赖于CoreOS。而Flynn由于全部组件都可执行在容器里,没有OS的依赖;第三。Deis在构建阶段,除了buildpack方式构建外。还支持Dockerfile直接以两种方式镜像上传。较Flynn更灵活。
版权声明:本文博主原创文章,博客,未经同意不得转载。
Flynn初步:基于Docker的PaaS台的更多相关文章
- 026.[转] 基于Docker及Kubernetes技术构建容器云平台 (PaaS)
		[编者的话] 目前很多的容器云平台通过Docker及Kubernetes等技术提供应用运行平台,从而实现运维自动化,快速部署应用.弹性伸缩和动态调整应用环境资源,提高研发运营效率. 本文简要介绍了与容 ... 
- 基于Docker&Kubernetes构建PaaS平台基础知识梳理
		点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! 基于Docker&Kubernetes构建Paa ... 
- 一台虚拟机,基于docker搭建大数据HDP集群
		前言 好多人问我,这种基于大数据平台的xxxx的毕业设计要怎么做.这个可以参考之前写得关于我大数据毕业设计的文章.这篇文章是将对之前的毕设进行优化. 个人觉得可以分为两个部分.第一个部分就是基础的平台 ... 
- 基于 Docker 的微服务架构实践
		本文来自作者 未闻 在 GitChat 分享的{基于 Docker 的微服务架构实践} 前言 基于 Docker 的容器技术是在2015年的时候开始接触的,两年多的时间,作为一名 Docker 的 D ... 
- 十大基于Docker的开发工具
		http://www.infoq.com/cn/news/2014/08/top-10-open-source-docker FlynnFlynn是一个使用Go语言编写的开源PaaS平台,Flynn使 ... 
- 前端程序员初步认识 docker
		初步认识 docker 为什么要学习 docker 有同学说他开发工作中有两大神器,一个是 vim 编辑器,另一个就是 Docker. 什么是 docker Docker 是一个开源的应用容器引擎. ... 
- 容器化 — 基于Docker技术容器云
		导读:本文介绍了基于Docker技术的企业级应用容器平台,从云的定义.云服务分类,到用友云PaaS基础平台.平台总体架构.架构预览.部署架构.平台核心价值和核心竞争力,阐述PaaS基础平台成为广大传统 ... 
- 基于Docker一键部署大规模Hadoop集群及设计思路
		一.背景: 随着互联网的发展.互联网用户的增加,互联网中的数据也急剧膨胀.每天产生的数据量数以万计,本地文件系统和单机CPU已无法满足存储和计算要求.Hadoop分布式文件系统(HDFS)是海量数据存 ... 
- docker是PaaS,与openstack是IaaS的关系
		个人理解Docker的每一个虚机其实是宿主操作系统中的一个进程.主要是一种虚拟化技术.OpenStack主要解决的是基础架构云的云服务问题.OpenStack是在虚拟化技术之上的一层,主要解决系统部署 ... 
随机推荐
- CSDN开源夏令营 百度数据可视化实践 ECharts(8)问题分析
			ECharts问题描写叙述: 问题就是折线图上的点是显示的,有人问能不能一開始不显示,当你点击的时候或者是当鼠标移动到上面的时候,折线上的点才显示? 例如以下图所看到的: 分析:让折线上的点不显示能够 ... 
- PSU 离11.2.0.3.0 -> 11.2.0.3.11 如果解决冲突的整个
			Oracle rdbms 扑灭psu离11.2.0.3.0升级到11.2.0.3.11 参考patch :18522512 停止应用,停止听音乐并DB,将db的oracle_home在下面OPatch ... 
- Learning Cocos2d-x for WP8(1)——创建首个项目
			原文:Learning Cocos2d-x for WP8(1)--创建首个项目 Cocos2d-x for WP8开发语言是C++,系列文章将参考兄弟篇Learning Cocos2d-x for ... 
- HttpMime 处理 多部件 POST 请求
			HttpMime 处理 多部件 POST 请求 在有的场合例如我们要用到上传文件的时候,就不能使用基本的GET请求和POST 请求了,我们要使用多部件的POST请求.由于Android 附带的 Htt ... 
- ios7开发者必知
			如果你想为iOS 设备开发app,你需要知道如何与软件交互,如何设计,你还要知道苹果独特的开发理念和开发工具.真正的能力还需要成功地从其他行业领域借鉴核心概念.最后把所有这些东西糅合进你的信息库中, ... 
- Linux内核——定时器和时间管理
			定时器和时间管理 系统定时器是一种可编程硬件芯片.它能以固定频率产生中断.该中断就是所谓的定时器中断.它所相应的中断处理程序负责更新系统时间,还负责执行须要周期性执行的任务. 系统定时器和时钟中断处理 ... 
- Apple Watch视频教程(连载)
			发展Apple Watch 必须Xcode 6.2上述号码,所有视频.课件.Demo须要的能够加我私人微信 wanghj29(扫描头像也能够),在微信里面给我发email,我都发过去,另外也提供在线播 ... 
- SQL Server :理解数据记录结构
			原文:SQL Server :理解数据记录结构 在SQL Server :理解数据页结构我们提到每条记录都有7 bytes的系统行开销,那这个7 bytes行开销到底是一个什么样的结构,我们一起来看下 ... 
- IT增值服务,客户案例(一)--山东青岛在职人士,2年.Net经验,转Java开发半年
			客户总体情况:2年.Net开发经验,2014年刚刚转Java半年.对Java的若干问题不是非常清楚,仅仅是对JSP/Servlet/JavaBean Spring.SpringMVC.Mybatis有 ... 
- 代写java程序qq:928900200
			学校为全面提升学校教学质量,提高管理水平,决定开发一套小型成绩管理系统,实现以下功能.1) 系统用户分为管理员.教师和学生三种角色,每种角色都可以包含若干个用户.其中管理员登录后可以进行教师.学生 ... 
