Cloud Foundry参赛博文——Cloud Foundry的架构浅析

来源:互联网 发布:淘宝网羊剪绒大衣中长 编辑:程序博客网 时间:2024/05/18 02:47

Cloud Foundry的架构浅析

Cloud Foundry简化了应用程序的开发、交付和运行,使开发者在云环境中部署、运行和扩展应用程序的能力得以大幅提升,并支持种类最为广泛的公共云和私有云、基于行业标准的高效开发框架和应用基础架构服务。

VMware的Cloud Foundry主要包含有几大组件:Router、DEA、Health_Manager、Cloud_Controller、Cloud Foundry的Service和NATS,对于这几大组件的认识加深,会让我们更加清楚Cloud Foundry架构的特点。


ü  在Cloud Foundry中,Router是对所有进来的Request进行路由,最早的版本router直接通过unix sock将httprequest通过nginx的proxy发到了router.rb中处理,后来换成了lua脚本代替原先的Ruby脚本,来接收请求,再由ruby程序将分析结果返回。这样一来,逻辑和数据完美分离,性能和稳定性都大幅提高了。

Router的代码不多,有一些主要目录结构,如下所示:


ü  DEA是应用运行的环境,一个DEA可以启动多个应用。

代码入口在lib/dea.rb:

EM.epoll

EM.run {

  agent = DEA::Agent.new(config)

  agent.run()

}

EM是Ruby有名的eventmachine,事件驱动网络框架。

当写入运行的脚本一切就绪之后,可以调用先前准备好的lambda:

File.open(startup,'w') { |f| f.write(new_startup) }

start_operation.call

之后,可以运行各种shell命令,包括启动应用。

ü  Health_Manager是外部模块,可以进行统计数据和合理分配资源,它与Router和DEA代码结构比较接近,都有一个bin目录,里面有可执行文件。在根目录下面有一个config目录,里面有以模块命名的yml配置文件。

ü  Cloud_Controller是管理模块,可以对apps的增删改读,修改Cloud的用户信息等等,它的文件结构有点复杂,不过也是可以找到config/cloud_controller.yml这个文件的。

ü  Cloud Foundry的Service模块本身是为了方便第三方服务提供商提供服务,service与base间可以透过继承关系来横向扩充,这里有很多的目录,mysql、rabbit、mongodb等,也就是说它可以提供的服务包含mysql、RabbitMQ、MongoDB、neo4j、Redis等等。

ü  NATS是一个基于事件驱动的轻量级支持消息发布、订阅的系统,用Ruby实现,在Cloud Foundry中,所有组件的互联通讯依靠nats-server。

EventMachine::start_server(NATSD::Server.host,

NATSD::Server.port,NATSD::Connection)

/lib/nats/server.rb是server包装类,Server包装类通过EventMachine启动了服务。如果需要使用DEA的某个功能,就只需要向NATS发布一个相对应的消息即可。

 

Cloud Foundry是完全模块化的设计,每个模块单独存在、运转,它的架构有很多可以借鉴的地方,了解的越多就越会发现很多精妙的地方。


原创粉丝点击