坚信科学,分享技术

2018全新版本,未来在blog.54chen.com更新博客!

>>>尝试更加利于阅读的2014版科学院,以后都在新版上写。

cloud foundry之cloud_controller代码解读

cloud
简介
cloudfoundry是vmvare推出来的开源PaaS平台,cloud_controller是其管理界面的http rest api入口。

补课 rails
Rails基于MVC(模型- 视图- 控制器)设计模式。从视图中的Ajax应用,到控制器中的访问请求和反馈,到封装数据库的模型,Rails 为你提供一个纯Ruby的开发环境。
习惯约定大于配置:
model类位置app/models/xxx.rb
controller位置app/controllers/xxx_controller.rc
help位置app/helpers/xxx_helpers.rb
view位置app/views/xxx
对应布局app/views/layouts/xxx.rhtml xxx.rxml

开始cloud_controller

https://github.com/cloudfoundry/cloud_controller

里面有两个项目,一个是cloud controller另一个是health_manager,今天要研究的是前者,下节说后者。

入口
bin/cloud_controller -> config/boot.rb
cloud_controller必需要求ruby1.9以上,因为其中有一个fiber需要ruby支持(传说中的Coroutine)。
如果没有配置 cloud_controller使用nginx,则会启用Thin去启动Rack。(Thin是ruby内置的network server,Rack: a Ruby Webserver Interface)

app
以vmc push举例:
vmc push的关键一请求:post apps
对应app/controllers/apps_controller.rb

def create
update_app_from_params(app)
检查各种参数并赋值
app.save! (app使用了ActiveRecord::Base,ActiveRecord是ruby用来做orm的东东,具体可以认为save!就是入库了)
stage_app(app)
去nats注册:result = client.stage(request, AppConfig[:staging][:max_staging_runtime])

关键点
cloud_controller接收到请求记录到db:postgresql/sqlite(cloud_controller.yml中定义)。
请求同时发送到nats等进一步处理。

vmc push所做的事情

1.发一个POST到”apps”,创建一个app; (本文只做了这一步的分析)
2.发一个PUT到”apps/:name/application”,上传app;
3.发一个GET到”apps/:name/”,取得app状态,看看是否已经启动;
4.如果没有启动,发一个PUT到”apps/:name/”,使其启动。


原创文章如转载,请注明:转载自五四陈科学院[http://www.54chen.com]
本文链接: http://www.54chen.com/architecture/cloud-foundry-cloud_controller.html

This entry was posted in 架构研究 and tagged , . Bookmark the permalink.

Leave a Reply