版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、深度剖析CloudFoundry的架构设计2011-10-27 13:23 来源:博客VMware在今年4月份突然发布了业内第一个开源的PaaS CloudFoundry。发布至今 的这几个月里,笔者一直关注它的演进,并从它的架构设计中获益良多,觉得有必要写出来 与大家分享一下。本文会分为两个部份:第一部份主要介绍CloudFoundry的架构设计,从它所包含的模 块介绍起,到各部份的消息流向,各模块如何协调合作;第二部份会在第一部份的基础上, 以如何在你的数据中心里面用CloudFoundry部署一个私有PaaS为目标,把第一部分介绍到 的架构知识使用起来。第一部份讲的很多内容,会引用Pat
2、在10月12日的VMwareCloud Forum上面关于 CloudFoundry架构的演讲。Pat是CloudFoundry Core的负责人,他的那次演讲很值得一听。 如果你当时在场,并且理解他所说的内容,本部份可以选择直接跳过。我除了会把说的内容 讲具体点外,不太可能可以讲得比他好。、架构及模块从总体地看,CloudFoundry的架构如下:routernatsblob sic re:app lifecycle manag-ementapPII auth/service lifeeycle management这个架构图以及下文所用到的各模块架构图均来自Pat的PPT。从上图能够看到
3、CloudFoundry主要有以下几大组件组成:1、Router:顾名思义,Router组件在CloudFoundry中是对所有进来的Request进行 路由。进入Router的request主要有两类:首先是来自VMCClient或者STS的,由 CloudFoundry使用者发出的,管理型指令。例如:列出你所有apps的vmcapps,提交一个apps等等。这类request会被路由到 AppLife Management组件,又叫CloudController组件去;第二类是外界对你所部署的apps 访问的requesto这部份requests会被路由到Appexecution,又或者叫
4、做DEAs的组件去。 所有进入CloudFoundry系统的requests都会经过Router组件,看到这里可能会有朋友会 担心Router成为单点,从而成为整个云的瓶颈。但是CloudFoundry作为云系统,其设计的核心就是去单点依赖,组件平行扩充,且可 替代的以保证扩展性,这是CloudFoundry,甚至所有云计算系统的设计原则,后文会讨论 CloudFoundry如何做到这点,目前只要知道,系统可以部署多个Routers共同处理进来的 requests,但是 Router 上层的 LoadBalance 不在 CloudFoundry 的实现范围,CloudFoundry 只保证所
5、有的request是无状态的,这样就使上层均衡附载选择面非常非常大了,例如可以 通过DNS做,也可以部署硬件的LoadBalancer,或者简单点,弄台ngnix作负载均衡器, 都是可行的。Router组件,目前版本是对nginx的一个简单封装。熟悉ngnix的朋友应该知道,它 可以一个套接字文件(.sock文件)作为输入输出。所有安装CloudFoundry的Router组件 服务器都会安装一个nginx,其ngnix.conf文件有以下配置:upstream vcap renter (server unit/r out e r. soc k;从整体的来看,Router组件的结构如下:夕卜界
6、 httprequest 进入 CloudFoundry 服务器,nginx 会首先接到 request, nginx 通过 sock与router.rb进行交互,于是真正处理请求的是Router组件。router.rb里面根据传 入的url,用户名密码等,进行逻辑判断,到UCloudController组件或者DEA组件取数据并 且返通过与niginx连接的.sock文件返回。router.rb是对nginx进行了逻辑封装。熟悉CloudFoundry的朋友肯定知道, CloudFoundry给每一个app分配了一个url访问,如果直接使用VMware所托管的 CloudF的话,那你的app
7、的url可能就是,无论通过命 令给你的app扩展了多少个instances,都是从这个url访问的,这里面的url转换路由就 是由router.rb实现的。2、DEA(Droplet Execution Agency):首先要解析下什么叫做 Droplet。Droplet 在 CloudFoundry的概念里面是指一个把你提交的源代码,以及CloudFoundry配套好的运行环 境,再加上一些管理脚本,例如Start/Stop这些小脚本全部压缩好在一起的tar包。还有 一个概念,叫做Stagingapp,就是指制作上面描述这个包,然后把它存储好的过程。 CloudFoundry会自动保存这个D
8、roplet,直到你start 一个app的时候,一台部署了 DEA模块的服务器会来拿一个Droplet的copy去运行。所以如果你扩展你的app到10个 instances,那这个Droplet就被会复制十份,让10个DEA服务器拿去运行。下图是DEA模块的架构图:start/stop instancesfetch droplets 0J眼;Xfa.http request drrecicommunrcation VCAP;Component.ukjidi:host - =local ip.:port = instance:portt蛾=options! | | instance:yrfsj
9、.:tags =? (iframework i n Eta nee :f r m ework r xuntime = insta nce:runi:ime) Vto ison)Router模块在启动时就已经订阅” router.register”消息主题。rout&r.resister |eg冒 hash = YajkrParscr.prsat Hiss, jsvrnbolizs keys = tr-dc-)足lum un导恭 urig = rYlSJJ hft-ShLuridLJirifiachflurilregisteirdropltJurisg_hashljhostiriEgJiaEhl
10、ipoiftlmsghashil ;tag-111收到前面DEA发出的信息后,会触发register_droplet方法,去绑定Droplet。到此 启动一个Droplet的instance工作完成。我们可以看到整个CloudFoundry的核心就是一套消息系统,如果想了解CloudFoundry 的来龙去脉,去跟踪它里面复杂的消息机制是非常好的方法。另一方面,CloudFoundry是 一套基于消息的分布式系统,面向消息的架构是它节点横向扩展,组件自发现等云特性的基 础。Cloud Foundry的架构简单介绍至此,其实作为第一款开源的PaaS,CloudFoundry架 构有很多可以学习借
11、鉴的地方,很多细节上的处理是很精妙的,这些内容如果有可能会在后 续文章继续探讨,本文题虽为深入CloudFoundry,其实也只是浅尝即止,把总体架构介绍 一下,目标在于使我们有足够的背景知识去用CloudFoundry搭建企业内部的私有PaaS。总 结一下,笔者从CloudFoundry的结构中学到的东西:1、基于消息的多组件架构是实现集群的简单、且有效方法。消息可以使集群节点间解 耦,使自注册,自发现这些在大规模数据中心中很重要的功能得到实现;2、适当的抽象层,模板模式的使用,方便第三方可以方便在CloudFoundry开发扩展功 能。CloudFoundry在DEA及Service层都做
12、了抽象层处理,相对应地使开发者可以容易地 为CloudFoundry开发Runtime和Service。例如,在CloudFoundry刚推出的时候,只支持 Node.js,Java, Ruby,但第三方提供商、开源社区快速跟进,为CloudFoundry添加了PHP,Python的支持。这得益于CloudFoundry精巧的DEA架构设计,如何开发新的Runtime 支持,会在后续博文中有所论述.二、源码导读笔者一直觉得深入理解一个技术的最好方法就是读它的源码,而CloudFoundry是完全 开源的PaaS平台,而因为刚发展起来,代码量不多,主要作者们的代码功力也相当不错, 读起来很舒服,
13、很适合研读。而不得不再次表扬一下它完全基于消息机制的架构设计,对组 件扩展性,第三方接入等方面做得很好,读者可以从中学到不少思想性的东西。笔者很推荐 大家去读一下它的源代码。你可以在Github上找到CloudFoundry的全部代码: HYPERLINK /cloudfoundry%ef%bc%8c%e4%bd%a0%e4%bc%9a%e7%9c%8b%e5%88%b0%e5%87%a0%e4%b8%aa%e4%b8%8d%e5%90%8c%e7%9a%84 /cloudfoundry,你会看到几个不同的 Repositories,它们分别是:1、vcap: Cloud Foundry 的
14、Core,又或者称作 Kernel;2、vcap-service: Cloud Foundry 的 Service 组件。Cloud Foundry 的 service 是作为 插件提供的,这出于它方便第三方开发service而设计的;3、vmc: VMware Cloud CLI.是一个 Ruby 应用,与 Cloud Foundry 的 CLI 交互。主要 通过分析用户输入的CLI,向CloudFoundry发送Restful请求;4、vcap-java:如果你的app是用java开发,且需要与Cloud Foundry交互,例如取 得当前serviceserver的ip地址等,你可能需要这个jar,里面对我们Java开发常用框架 有所支持,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工业活动融资行业营销策略方案
- 扫描探针显微镜产业链招商引资的调研报告
- 去中心化身份认证服务行业市场调研分析报告
- 园艺学行业营销策略方案
- 家用空间降温装置出租行业营销策略方案
- 装钓鱼假饵用盒市场发展前景分析及供需格局研究预测报告
- 离心压缩机产品供应链分析
- 机械式起重葫芦产品供应链分析
- 动物清洁行业经营分析报告
- 美容霜市场分析及投资价值研究报告
- 自贡市盐化工产业发展研究
- GB/T 22890.1-2024皮革柔软皮革防水性能的测定第1部分:反复线压缩法(透度计法)
- 《光伏发电工程安全预评价规程》(NBT 32039-2017)
- 从局部到整体:5G系统观-完整版
- 第4课西汉与东汉统一多民族封建国家的巩固教学设计-高中历史必修中外历史纲要上册
- 团队建设创造和谐的人际关系与文化
- 陪诊项目商业计划书
- 小学科学项目式学习教学设计与实践研究
- 供电企业作业安全风险辨识防范课件
- 烘焙实训室设计方案
- 田径大单元教学计划
评论
0/150
提交评论