文档章节

为什么需要PaaS?对Deis,Heroku,Flynn的一些观察

难易
 难易
发布于 2015/02/02 09:10
字数 876
阅读 501
收藏 4
点赞 0
评论 1

一句话,现在的应用程序从源代码到运行阶段太复杂,没有标准的,通用的方式。 整个过程及产出如下:

  1. 开发阶段:源代码
  2. 构建阶段:发布包/可执行程序
  3. 部署阶段:可运行的镜像(发布包+配置)
  4. 运行阶段:进程、集群、日志、监控信息、网络

不论是Deis,Heroku,Flynn或者其他PaaS的目标,都是为了让2-4这3个阶段尽可能的简单。看了他们所设计的产品,简单到了什么程度?通过一个客户端命令行工具,实现了:

开发到构建:

用户通过git提交源代码,由PaaS自动构建镜像,并提供版本的管理——用户可以创建新版本(提交新代码或修改部署配置)、回滚老版本等。

部署到运行:

自动选择运行机器,为每个进程副本部署启动单独的容器,解决请求路由和负载均衡,并提供进程的管理——用户可以做扩缩容、查看日志、监控状态等、回滚历史的发布

#为什么是这些功能?为什么这些功能不能分别由各种工具实现?

在我看来,代码从发布到运行由两根轴组成。

##纵轴: 源代码——发布包——可运行的镜像——进程

这里的关系是一步接一步,顺序往下,不论你用什么工具什么平台,这4步都是流水式的向下。

##横轴: 负载均衡、集群部署扩容缩容、健康检查、日志

线上的应用,有以下几种情况

  1. 发布新功能:全量更新和部署
  2. 性能压力:通过健康检查或手工触发,进行扩容和缩容
  3. 保证业务连续性:在上面的更新中,通过负载均衡,把新请求导入到更新后的容器上,等待旧的处理完后进行更新

所以,上面这4项是一环扣一环,横向的互相关联,如果不在一个工具内同时提供这4项功能,就需要人工去填平这里面的信息交互,手动的整合这4个工具,从而带来复杂性。

#约束及实现

##纵向编译:buildpack

buildpack填平的是从源代码到发布包的坑,就是一组编译脚本。

PaaS平台自己提供一些编译脚本,但也允许用户按照规范自己写编译脚本。

(脚本需要自己下载合适版本的编译器!)

如果使用Docker,用户提供的就是一个DockerFile或者Dockerimage地址,拿了直接就能跑起来的东西。

##纵向运行:Procfile

buildpack让PaaS知道怎么编译程序,Procfile让PaaS知道怎么运行程序。

一个典型的Procfile就是像这样

 cat ./Procfile
 web: bundle exec rails server -p $PORT

后面可以通过命令行来动态扩容程序

 deis ps:scale web=4

##纵向配置:环境变量 运行的发布包在不同的环境下有不一样的配置,Deis的方式是通过环境变量。客户端的命令行工具上设置环境变量后,就直接发送给所有容器,重设这些环境变量,然后重启。

##横向负载均衡:nginx ##横向日志:集中化的syslog获得日志 ##横向部署:go写的小程序,用于部署Docker的Container

© 著作权归作者所有

共有 人打赏支持
难易

难易

粉丝 255
博文 43
码字总数 100878
作品 2
杭州
程序员
加载中

评论(1)

兵戈天下
兵戈天下
简单纠个错:“横向负载均衡:ngix”此应为nginx
从Cloud Foundry谈企业PaaS环境的安全风险与评估

  * 本文作者:ipenox,本文属FreeBuf原创奖励计划,未经许可禁止转载   前言   PaaS是云计算领域的三大业态之一。PaaS作为应用的运行平台,提供一个操作系统级的容器,在该容器中安装...

FreeBuf ⋅ 05/22 ⋅ 0

Service Mesh:什么是Sidecar模式

谈到Service Mesh微服务架构,就不得不谈Sidecar模式——一种单节点、多容器的应用设计形式。Sidecar主张以额外的容器来扩展或增强主容器,而这个额外的容器被称为Sidecar容器。 一些例子如下...

好雨云帮 ⋅ 今天 ⋅ 0

时速云企业级容器PaaS技术沙龙 第九期【深圳站】

Docker容器技术的出现改变了企业应用从开发、构建到发布、运行的整个生命周期,而Kubernetes经历近4年的发展也已成为容器集群管理领域的事实标准,基于容器 + Kubernetes 的新型 PaaS 逐渐成...

wx5af5464b24a76 ⋅ 05/11 ⋅ 0

十大基于 Docker 的开发工具

随着Docker的发展,Docker的生态圈也越来越成熟,GitHub上出现了很多与Docker相关的开源项目。CenturyLink在其博客上总结了基于Docker的10个开发工具,主要集中在PaaS平台、集群管理、持续集...

夕水溪下 ⋅ 2014/08/23 ⋅ 8

大数据、人工智能、机器学习、深度学习,这些到底在说什么?

1,大数据、人工智能、机器学习、深度学习的关系。 大数据,或者说大数据分析平台,更具体一点就是大数据分析PaaS平台,其实是一种针对需要处理海量数据统计分析的PaaS云平台。 大数据学习可...

卢家大少 ⋅ 06/06 ⋅ 0

关于UMCloud与数人云“确认过眼神儿”这事儿,你了解始末吗?

内部人士披露,两家公司计划在5月初完成全面的合并以及整合工作,届时将以全新的面貌正式投入运营。 图片来源于:http://tech.ifeng.com/a/20180417/44957607_0.shtml 这样分析,合并后,数人...

sch881226 ⋅ 05/08 ⋅ 0

Tsuru 1.5.2 发布,基于 Docker 的 PaaS 框架

基于 Docker 的 PaaS 框架 Tsuru 1.5.2 发布,更新内容如下: d285fa4 api、docs: 版本变更为 1.5.2 ea2af69 provision/kubernetes: 从 pod 中复制标签 Tsuru 是一个开源 PaaS 平台,可以让你...

雨田桑 ⋅ 04/29 ⋅ 0

赋能企业,连接智造,AbleCloud物联网主题沙龙成功举办

11月20日,领先的物联网云平台AbleCloud在深圳会展中心1号会议区内成功举办高交会同期专业沙龙活动。沙龙以“洞察物联·领先智造”为主题,针对企业在产品物联网化过程中遇到的诸多问题,现场...

玄学酱 ⋅ 05/08 ⋅ 0

Tsuru 1.5.3 发布,基于 Docker 的 PaaS 框架

基于 Docker 的 PaaS 框架 Tsuru 1.5.3 发布,更新内容如下: fec92e7 provision/kubernetes: add insecure flag to healthcheck calls 153d4e4 app: create default plan during service i......

达尔文 ⋅ 05/17 ⋅ 0

时速云企业级容器PaaS技术沙龙 第十期【上海站】

时代在抛弃你时连一声再见都不会和你说,而我们能做的就只有拼命奔跑,不断突破。企业亦是如此... 在数字化转型的大背景下,越来越多的企业开始使用基于 Kubernetes 技术构建企业级容器 PaaS...

tenxcloud ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Android JNI 读写Bitmap的方法

Java层创建Bitmap,通过JNI将Bitmap传到C/C++进行处理 Java部分 public static native boolean greenBitmap(Bitmap bitmap); C/C++部分 JNIEXPORT jboolean JNICALL Java_com_test_Test_gree......

国仔饼 ⋅ 16分钟前 ⋅ 0

一次性让你懂async/await,解决回调地狱

什么是async? 欢迎留言讨论 async 函数是 Generator 函数的语法糖。使用 关键字 async 来表示,在函数内部使用 await 来表示异步。相较于 Generator,async 函数的改进在于下面四点: 内置执...

阿K1225 ⋅ 16分钟前 ⋅ 0

angular常用命令

.下载更新操作 1.利用npm下载angular的命令行工具AngularCLI: npm install -g @angular/cli 2.下载jquery: npm install --save jquery 3.更新npm: npm i -g npm 4.更新angular: ng update ......

消散了的诗意 ⋅ 18分钟前 ⋅ 0

window.print 页面打印

定义和用法 print() 方法用于打印当前窗口的内容。 语法 window.print(); window.print() 实际上,是浏览器打印功能菜单的一种程序调用。与点击打印功能菜单一样,不能精确分页,不能设置纸型...

初学者的优化 ⋅ 19分钟前 ⋅ 0

魔兽世界 7.0版本上 PVE装备全攻略

  T套 因为大家应该都会打穿副本的所以具体是哪个boss我就不说了。   T1: 所有套装都在【熔火之心】出   T2: 头原来是在【奥妮克希亚的巢穴】改到黑翼之巢的奈法利安了,腿是在【熔火之...

wangchen1999 ⋅ 19分钟前 ⋅ 0

java.math.BigDecimal使用小结

原文地址 java.math.BigDecimal使用小结 divide方法 使用BigDecimal.divide方法时一定要考虑: 除数是否为0 商是否是无限小数 正确的使用方式 判断除数是否为0,是0做另外的处理逻辑 调用除法...

666B ⋅ 22分钟前 ⋅ 0

关于qstring转char乱码问题。

if (OpenClipboard(NULL)) { HGLOBAL hgClip; EmptyClipboard(); QByteArray byay = FValue.toLocal8Bit(); //转latin编码 char *bochsrc_line = byay.data(); hgClip = GlobalAlloc(GMEM_DD......

backtrackx ⋅ 22分钟前 ⋅ 0

了解SSH加密和连接过程

介绍 SSH或安全shell是安全协议,也是安全管理远程服务器的最常用方式。通过使用多种加密技术,SSH提供了一种机制,用于在双方之间建立加密安全连接,对彼此进行身份验证,以及来回传递命令和...

吴伟祥 ⋅ 29分钟前 ⋅ 0

微信小程序

小程序的全局配置app.json 微信小程序的全局配置保存在app.json文件中。开发者通过使用app.json来配置页面文件(pages)的路径、窗口(window)表现、设定网络超时时间值(networkTimeout)以...

上官清偌 ⋅ 32分钟前 ⋅ 0

【转】百度坐标坐标系之间的转换(JS版代码)

/** * Created by Wandergis on 2015/7/8. * 提供了百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换 *///定义一些常量var x_PI = 3.1415926535897932...

HAVENT ⋅ 34分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部