`
timeson
  • 浏览: 146433 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

从项目开发到云端架构(12)

 
阅读更多

 4.3 CloudFoundry

       Cloud FoundryVMware主导使用Ruby开发的一款开源PaaS云计算平台,它提供了各种各样的云平台、开发框架以及应用程序服务。开发人员可以在该平台上迅速部署及运行Web应用程序。Cloud Foundry能够帮助开发者使用Java或者其他的基于JVM的架构构建应用,它支持的应用程序框架包含SpringGrailsRuby on RailsNode.js ScalaNET的支持。 Cloud Foundry遵从OpenStack云计算平台规范,作为业内第一个开源的PaaS,它给我们打开了一扇研究云计算环境下PaaS平台架构设计的窗户,让我们管中窥豹,学习和借鉴。

       Cloud foundryVmware的开源PaaS产品,Vmware还有自己的商业版本:VMwarevFabric Cloud Application Platfor,这和Cloud Foundry属于两个产品,分别由两批团队开发。比较而言,vFabric作为商业产品,完善很多,而且发展已久,和STS深度整合。

4.3.1            简单介绍

 



 

43-01 Cloud foundry 概念图

 

       从图能清晰的看到Cloud foundry3大能力,这也是业界标准PaaS平台通常能提供的能力。

 

  • 部署应用云的选择性。灵活性是云计算的重要特点,而应用部署到云的选择是PaaS平台被广泛接受的重要前提。用户需要在不同云服务器之间切换,不被某家厂商锁定。CloudFoundry无论是公有云还是私有云,基于VMware的云和非VMware云都支持。在图中的右边斜线对应了公有云/私有云/混合云。
  • 行业标准架构的选择性。以前,开发者只能在几种开发框架中进行选择,现在根据需求自由选择。据了解,Cloud Foundry当前版本已经支持Spring for JavaRailsRuby上的SinatraNode.js,也支持其他基于JVM的框架,如Grails。当然了,vmware收购了spring,自然Spring for Java的代码有了天然的支持,现在spring 3.1.1版本已经支持了这种for cloud的模式,启用了<cloud>标签。根据我们公司的这么多年的积累和技术储备,最看中的是java能力,并且在项目中都会使用spirng。当前Cloud FoundryJEE支持比较弱。这点应该是openShiftredhat)的强项。
  • 应用架构服务的选择性。Cloud Foundry目前支持MySQLMongo DBRedisPostgresRabbitMQ,其中Postgres是定制化的版本。以后将逐步支持其他应用服务及第三方技术。

 

      

基于Cloud Foundry的项目部署架构。特点如下:

 

  • 系统分2大部分:前端业务和后端业务作分布处理,彼此用消息作为异步关联。
  • 使用CF提供的缺省服务,包括redismysqlmongodb
  • 前端通过负载均衡来实现集群,如前文所言,load balancernigix做的,是通过粘性会话来实现有限扩展。

 

      

       CF的多层部署的模式去看,并没有超出我们曾经熟知的集群和分布式的理念,CF作了一些封装和提供了一些自动部署的能力

 

 



 

43-02 CF推荐的软件架构,多层部署模式

 

       结合CF的功能结构图,程序员设计完毕的代码,通过cloud controller上传到cf,并通过一定的规则部署在DEA区,前端route根据路由的分发,把请求给分解,如果有后端应用(no web)也同样部署在DEA区(可以理解一下上下2张图中的红圈圈,即程序部署的位置),并用rabbitMQ进行关联,这样根据CF提供的通用架构模式和基础服务的支撑,达到了一种系统通用分布式的架构能力,并能达到一定高度的并发访问的要求,并极大的简化了部署和监控的工作。

 

 



 

43-03 逻辑视图

 

4.3.2            总体架构

 

 



 

43-04 CloudFoundry的总架构图

 

       CloudFoundry的核心就是一套消息系统,以及多模块的分布式系统,支持模块自发现,错误自检,且模块间低耦合,面向消息的架构是它节点横向扩展,组件自发现等云特性的基础。中心位置有个叫nats的组件,基于EventMachine的消息系统。每个台服务器上的每个模块会根据自己的消息类别,向MessageBus发布多个消息主题;而同时也向自己需要交互的模块,按照需要的信息内容的消息主题订阅消息。

 

 

 



 

43-05 CF内部控制,指令,数据流向图

4.3.3            组件说明

Router

       Router组件对所有进来的Request进行路由。进入Routerrequest主要有两类:

 

  • 首先是来自VMCClientSTS,由CloudFoundry使用者发出的管理型指令。例如:列出某个appsvmcapps,提交一个apps等。这类request会被路由到CloudController组件。
  • 第二类是外界对你所部署的apps访问的request。这部份requests被路由到DEAs的组件。

 

 

 

 



 

43-06 Route架构:(左图为老版本设计,右图为新版本设计)

 

       所有进入CloudFoundry系统的requests都会经过Router组件,Router被设计成去单点依赖,组件可平行扩充,且可替代,以保证扩展性。这是CloudFoundry,也是所有云计算系统的设计原则。云系统可以部署多个Routers共同处理进来的requestsCloudFoundry保证所有的request是无状态的,这样负载均衡可采用DNS,硬件LoadBalancerngnix,都是可行的。目前Router组件,是对nginx的一个简单封装。

 

Cloud Controller

       CloudControllerCloudFoundry的管理模块。主要工作包括:

 

  • apps的增删改读;
  • 启动、停止应用程序;
  • Staging apps(把apps打包成一个droplet);
  • 修改应用程序运行环境,包括instancemem等等;
  • 管理service,包括serviceapp的绑定等;
  • Cloud环境的管理;
  • 修改Cloud的用户信息;
  • 查看Cloud Foundry,以及每一个applog信息。

 

           

       Cloud Controller就是与VMCSTS交互的服务器端。VMCSTSCloudFoundry通信采用的是restful接口,从VMC或者STS接到JSON格式的协议,数据持久化到CloudController Database,并发消息到各模快去控制管理整个云。

 

       Health ManagerDEA是外部模块,CCDatabase就是CloudController Database,这里是个单点。CloudController Database的并发性不会很多,应用级别的数据库访问是由底下的Service模块处理的,这个数据库存的是Cloud的配置信息。读操作主要来自DEA启动,作为初始化DEA的依据;以及healthmanager模块会从这里读取预期的状态信息,这部份数据会与从DEA得到的实际状态信息进行比对。

 


 

 


43-07aCloud control架构(old  

 


43-07bCloud control架构(new

      

Health Manager

       HealthManager: 做的事情不复杂,简单的说是从各个DEA里面拿到运行信息,然后进行统计分析,报告等。统计数据会与CloudController的设定指标进行比对,并提供Alert等。

 

DEA

       Droplet Execution AgencyDroplet是指提交的源代码 + 配套好的运行环境 +管理脚本,例如Start/Stop这些小脚本全部压缩好在一起的tar包。还有一个概念,叫做Stagingapp,就是指制作上面描述这个包,然后把它存储好的过程。CloudFoundry会自动保存这个Droplet,直到你start一个app的时候,一台部署了DEA模块的服务器会来拿一个Dropletcopy去运行。所以如果你扩展你的app10instances,那这个Droplet就被会复制十份,让10DEA服务器拿去运行。

 


43-08 DEAs架构(左图为老版本设计,右图为新版本设计)

 

Services

       Service模块是一个独立的、可Plugin的模块,以方便第三方把自己的服务整合入CloudFoundry生态系统。在Github上看到service是与CloudFoundry Core项目vcap独立的一个repository,为vcap-serviceService模块其中设计原则是方便第三方服务提供商提供服务。

       Github上看,已有以下服务提供:MongoDBmysqlPostgreSqlRabbitMQRedis等。基类都是放在base文件夹中,第三方如果需要自己开发CloudFoundry的服务,需要继承改写它里面的两个基础类:NodeGateway;而里面一些操作,如:Provision,可以在baseprovisioner.rb基础上加入自己的逻辑,同样的还有Service_ErrorService_Message等。

       从架构了解上来说,只要知道服务间的关系,知道个服务与base间透过继承关系来横向扩充,而CloudFoundryapps调用Service是通过base来完成这一简单的架构方法即可。

 

CF的架构以及CF组件有了个初步的了解,CF的特点为:

 

  • 基于消息的多组件架构是实现集群的简单、且有效方法。消息可以使集群节点间解耦,使自注册,自发现这些在大规模数据中心中很重要的功能得到实现;
  • 适当的抽象层,模板模式的使用,方便第三方可以方便在CloudFoundry开发扩展功能。CloudFoundryDEAService层都做了抽象层处理,相对应地使开发者可以容易地为CloudFoundry开发RuntimeService。例如,在CloudFoundry刚推出的时候,只支持Node.js,Java, Ruby,但第三方提供商、开源社区快速跟进,为CloudFoundry添加了PHP,Python的支持。这得益于CloudFoundry精巧的DEA架构设计。

 

 

4.3.4 业务流程

       CF从本质来说就是应用和服务的管理系统(mis系统),只是管理的不是二维表中的数据,而是我们上传的web应用和它自身的服务,从一个应用上传到CF,就启动了CF的流程,下图其实是vmc push命令在CF的内部组件之间的交互过程。



43-09CF部署应用的内部流程

 

4.3.5 部署模式

       在传统方式中,程序员把商业或开源工具安装在本地系统上,编写代码,然后把开发的应用程序部署到他们自己的基础设施上并管理它们;基于PaaS的部署,开发人员不必为定义可伸缩性要求去操心,他们也不必用XML编写部署说明,这些工作全部由PaaS提供商处理     

       CloudFoundry官方用Chef作为部署工具 ChefOrchestrationEngine的一种,可以自动化管理、部署复杂的云环境。工作过程大概就是部署人员写一系列的“recipes”,这些“recipes”描述我们需要把我们的服务器部署成什么(Apache,Mysql还是Hadoop),然后Chef可以自己执行这些配置。现在数据中心变得越来越庞大,原来那种通过自己写脚本完成自动部署的IT管理方式日渐不堪重负,帮助管理、部署数据中心服务器集群的中间件变得越来越重要,这也是DevOps的范畴,.在以后的篇幅中在阐述。

 

       部署有2种方式,软部署和硬部署。项目开发完毕,会有war包和数据库脚本,如果是软部署,提交给相依的云平台部署人员即可。他们根据软件部署模型来部署,由云平台部署人员控制ip以及route的分派,以及数据库和应用的绑定。

       如果是硬部署,则是直接面向主机的操作系统,划分主机的ip地址以及网络规划,部署应用服务器并且调优,设定好war中的数据库连接方式,自行确定前端派发的分派方式。下面用个切图比较方式,比较一下传统模式部署(硬部署)和基于paas的部署(软部署,以CF为范例)。

 

开发模式

传统部署

云部署


43-10:单一部署

[mysqld]

user = foobar

port = 3306

basedir = /usr

bind-address=192.168.0.8

key_buffer = 16M

…..

[nginx]

http.include mime.types;

default_type:

keepalive_timeout 65;

…..

[tomcat]

…..

[frontend]

dependencies:

mysqlclient

ruby

files:

core/app/fe/**/*

core/common/**/*

# 登录到CF

vmc target http://api.cloudfoundry.com

vmc login

 

# 创建并启动应用

vmc push myapp –instances 2 –mem 64M –path ../code

 

# 创建数据库实例并绑定

vmc create-service mysql –name mydb –bind myapp

 

# 升级应用的代码

vmc update myapp –path ../code


43-11:分布部署

更多。。。

 

这里省略

# 创建多实例的前后端应用

vmc push fe –instances 8 –mem 64M –path ../fe_code

vmc push be –instances 2 –mem 256M –path ../be_code

# 创建服务并绑定

vmc create-service mysql –name mysql –bind fe

vmc create-service mongodb –name mongo –bind be

vmc create-service rabbit –name rabbit –bind fe

vmc create-service redis –name redis –bind fe

vmc bind-service redis be

vmc bind-service rabbit be

# 执行代码更新

vmc update fe –path ../new_fe_code

vmc update be –path ../new_be_code

4.3.6 开发方式

       Github上找到CloudFoundry的全部代码:https://github.com/cloudfoundry,你会看到几个不同的Repositories,它们分别是:

 

  • vcap: Cloud FoundryCore,又或者称作Kernel
  • vcap-service: Cloud FoundryService组件。Cloud Foundryservice是作为插件提供的,这出于它方便第三方开发service而设计的;
  • vmc: VMware Cloud CLI. 是一个Ruby应用,与Cloud FoundryCLI交互。主要通过分析用户输入的CLI,向CloudFoundry发送Restful请求;
  • vcap-java: 如果你的app是用java开发,且需要与Cloud Foundry交互,例如取得当前serviceserverip地址等,你可能需要这个jar,里面对我们Java开发常用框架有所支持,它底层也是对CloudFoundryRestful请求的包装;
  • vcap-java-client: Cloud FoundryRestful APIJava封装,与上面的项目不一样,它只是个简单的读取CloudFoundry信息,并放如JavaBean中;
  • vcap-test: Cloud Foundrytest cases;
  • vcap-test-assets: Cloud Foundry一些apps示例。

 

       程序员如果基于CF作开发,以下书籍可以参考,这些书籍不在1.5章节中声明的辅助文档之列,因为这些都是CFPPT课件:   

AM-1 从开发者的角度看CloudFoundry.pdf》,

AM-2 Cloud Foundry BootCamp.pdf

PM编程语言与架构专场 Spring带你步入云端 Chinese.pdf

PM解决方案和合作伙伴专场 3 CloudFoundry服务网关的架构.pdf

PM数据库专场 CloudFoundryMongoDB的应用.pdf

 



43-12 开发部署

 

 


43-13 物理部署图

 

4.3.7 后续工作

       要搭建一个完整的私有云系统,还有很多缺少的地方,譬如下层的IaaS如何集成?如果CloudFoundry一个组件负载过高,应该如何扩容?能否做到自动化?如何检测、管理CloudFoundry的服务器集群?这些都是需要解决的问题。

       CloudFoundry是与底层IaaS无关的,可以用vSphere或者OpenStack来作为IaaS方案。为了实现云计算的可伸缩性,IaaS层需要提供如下功能:

 

  • CloudFoundry某些组件的发出性能警报,或者到达我们设定的某些指标时,我们需要用IaaS创建部署该组件的虚拟机,并把它启动加入CloudFoundry集群中(由OrchestrationEngine来做);
  • 当某些组件有大量资源盈余,而物理资源出现紧张情况的时候,IaaS需要删除虚拟机,把计算资源归还到资源库;
  • IaaS需要提供虚拟机的注册、存储、查找、导入、启动等功能。

 

        私有云有了IaaSPaaS,有了自动化管理工具(也就是OrchestrationEngine),但中间还缺少监控管理工具。有了监控管理工具,我们才可以知道现在CloudFoundry每个服务器的资源使用情况,才可以向IaaS请求计算资源。

 

 

 

 

上一篇 从项目开发到云端架构(11)  : http://timeson.iteye.com/blog/1689462

下一篇 从项目开发到云端架构(13)  :  http://timeson.iteye.com/blog/1696300

  • 大小: 39.7 KB
  • 大小: 34.1 KB
  • 大小: 41.3 KB
  • 大小: 25 KB
  • 大小: 43.3 KB
  • 大小: 41.4 KB
  • 大小: 20.9 KB
  • 大小: 34.9 KB
  • 大小: 31.1 KB
  • 大小: 33.1 KB
  • 大小: 13.8 KB
  • 大小: 35.3 KB
  • 大小: 54.4 KB
  • 大小: 44.2 KB
分享到:
评论

相关推荐

    模拟云端系统项目

    【模拟云端系统项目】是一个综合性的IT项目,它结合了前端和后端技术,旨在构建一个功能完善的云端应用。...这样的项目实践能帮助开发者深入理解云端应用的开发流程和架构设计,提升在分布式系统中的实战能力。

    云端第三代系统开发

    在当前数字化时代,"云端第三代系统开发"是一个重要的议题,它涉及到如何利用先进的技术构建高效、易用且灵活的云服务平台。在这个系统开发过程中,Java作为主要编程语言扮演着核心角色。下面我们将深入探讨这个话题...

    云端系统源码第二版

    云端系统源码第二版是一个...综上所述,云端系统源码第二版是一个涉及多方面技术和实践的综合项目,涵盖了从底层基础设施到上层应用服务的全方位设计。深入理解和掌握这些知识点对于开发、运维和管理云端系统至关重要。

    android基于webservice云端运用最新代码EasyEnglish

    在Android开发中,结合Web服务(Webservice)可以实现丰富的云端功能,比如数据同步、远程API调用等。"android基于webservice云端运用最新代码EasyEnglish"是一个示例项目,展示了如何在Android应用中集成Webservice...

    wiki云端知识库平台项目

    以上内容仅是对“wiki云端知识库平台项目”可能涉及的技术栈和概念的一个概述,具体实现可能根据开发团队的选择和技术栈有所不同。对于学习者来说,深入理解并掌握这些知识点,将对个人的技能提升和未来职业发展...

    鸿蒙Linux+项目文档+开发工具+harmonyOS+在线开发地址.rar

    综上所述,这个压缩包是鸿蒙OS开发者的一站式资源库,涵盖了从系统底层到应用开发的各个环节,对于想要涉足鸿蒙OS领域的开发者而言,是一个宝贵的资料集合。通过深入学习和实践,开发者可以更好地掌握鸿蒙OS的开发...

    自制云端脚本获取器

    “云端”意味着它涉及到云存储或云计算的服务。“脚本”指的是可执行的代码文件,如JavaScript、Python等,可能是网页脚本或者其他类型的程序。“获取器”和“下载器”则说明了工具的功能,即获取并下载云端的脚本...

    悟空项目管理-基于Spring Cloud Alibaba微服务架构 +vue ElementUI的前后端分离项目管.zip

    9. **部署与运维**: 项目可能还包含了部署和运维相关的文档,例如Dockerfile或者Kubernetes配置,帮助开发者将应用部署到云端或本地环境。 这个项目不仅提供了实际的代码实现,还可以作为学习微服务架构、前后端...

    C#项目开发全程实录-源代码

    通过研究这些源代码,初学者可以学习到实际项目开发中的最佳实践,而有经验的开发者则可以借鉴其中的设计模式和问题解决策略。无论是独立学习还是团队协作,这个资源都能提供宝贵的经验和洞察。

    云计算系统架构文档 汇总上

    DevOps 从云端到地面 熊节 pdf DevOps 让持续交付成为可能 乔梁 pdf eBay技术平台:掌控十亿级交易数据 Tony Ng pdf Facebook大数据实时分析案例分享 Uri pdf Java EE 7 平台:应云而生 Tyler Jewell pdf JS ...

    SRA2021-G03-项目开发计划1.81

    总结,SRA2021-G03-项目开发计划1.81是一个旨在构建云端知识库APP的详尽蓝图,涵盖了项目从需求分析到实施、测试、上线及后续维护的全过程。通过这个计划,团队能够有序地进行开发工作,确保知识库应用能高效、安全...

    SRA2021-G03-项目开发计划1.71

    【SRA2021-G03-项目开发计划1.71】是关于一...总之,"SRA2021-G03-项目开发计划1.71"是一个全面的项目管理文档,它涵盖了项目从启动到完成的所有关键环节,旨在确保团队高效协作,成功开发出满足需求的云端知识库APP。

    JSP+SSM项目-云端学习系统的Java毕业设计.rar

    JSP+SSM项目-云端学习系统的Java毕业设计.rar 【项目技术】 开发语言:Java 框架:ssm+jsp 架构:B/S 数据库:mysql 【演示视频-编号:345】 https://pan.quark.cn/s/b3a97032fae7 【实现功能】 端学习系统在...

    SAAS架构设计模式SAAS架构设计模式

    它的出现是为了解决软件开发和维护的成本问题,通过将软件部署到云端,提供基于互联网的软件服务,用户可以通过互联网访问和使用软件。 SAAS 架构设计模式的优势包括: 1. 用户方面:拿来即用,无须维护,按需使用...

    构筑大语言模型应用:应用开发与架构设计.zip

    《构筑大语言模型应用:应用开发与架构设计》是一份深度探讨大语言模型在实际应用中的开发和架构设计的资源集合。这份资料来源于GitHub上的开源项目phodal/aigc,旨在帮助开发者理解和利用大语言模型的技术,提升...

    Android-物联网环境监测数据中心-物联网项目开发

    在物联网项目开发中,可能还需要特定的物联网协议解析或设备模拟插件。 3. **物联网架构**: 物联网环境监测系统通常包含传感器节点、网关和云端平台三个部分。传感器节点负责采集环境数据,如温度、湿度、光照等...

    微信小程序项目源码云开发cloudtest.zip

    9. **版本控制**:在项目开发过程中,版本控制非常重要。微信开发者工具允许开发者进行代码版本管理,便于团队协作和回滚更改。 10. **发布与更新**:完成开发后,开发者可以在微信开放平台上提交审核,待审核通过...

    Android项目开发报告 (2).pdf

    总结,本Android项目开发报告全面展示了项目开发的各个方面,从底层的平台架构到上层的功能实现,再到数据库和项目组织,为开发者提供了清晰的开发指南。通过这样的报告,不仅可以评估项目的成熟度,也便于团队协作...

    springboot集成netty,使用protobuf作为数据交换格式,可以用于智能终端云端服务脚手架

    本项目“springboot-netty-protobuf-master”旨在提供一个基础架构,它利用了Spring Boot的便捷性以及Netty的高效网络通信能力,同时采用Google的Protocol Buffers(protobuf)作为数据交换格式,确保数据传输的高效...

Global site tag (gtag.js) - Google Analytics