新版本cloudcontroller分析(cloudcontroller_ng)

Cloudfoundry社区目前(写文档时间:2013.03.05)在Githup(https://github.com/cloudfoundry)源码库中组件DEA和Cloud_controller分别有个临时代码库dea_ng和cloudcontroller_ng,是为下一个版本对组件做的重构。一旦完成将替换原来的代码库。
下面对dea_ng和cloudcontroller_ng与原来版本的重构内容做分析(以下对ng版本简称V2版,旧版本简称V1版):
cloudcontroller_ng:
1.整体架构的变化:
(1)原来版本使用Rails框架,全栈包括Web服务器(WEBrick)、处理HTTP请求和响应、以及数据库持久化存储到关系数据库的ORM工具ActiveRecord,使用Rails实现的RESTful web service。这一切在cloud_controller V2版本中都改变了。

(2)V2版本采用轻量级的Web框架Sinatra,V2版本APIs依旧遵循RESTful原则,采用Sinatra目的是增加一些新的特性,以及解决V1版在术语特征和一致性方面的问题。V2版本在一些高级目标如下:

The specific high-level goals are as follows:

  • Consistency across all resource URLs, parameters, request/response bodies, and error responses.(一致性)

  • Partial updates of a resource can be performed by providing a subset of the resources' attributes. This is in contrast to the V1 API which required a read-modify-write cycle to update an attribute.(局部更新)

  • Pagination support for each of the collections.(分页支持)

  • Filtering support for each of the collections.(过滤支持)


笔者分析这种重构还有一下几点好处:
将集成的MVC框架Rails拆分开,每一层分别采用一个成熟的开源组件,减小组件之间的依赖关系;Sinatra组件可以使用多种Web服务器,像Mongrel, Thin, Webrick等Web服务器(V2版使用Thin作web服务器);而且Sinatra更轻量级,使用起来更灵活

采用数据库操作工具Sequel,因为Sequel项目启动的初衷就是解决Rails中ActiveRecord的一些不足之处,包括多线程和连接池的特性等。

还有一点,Rails框架约定的条目太多,代码可读性较差。
(3)当前V2版本cloud_controller使用Thin作为一个Web服务器,特点:一个请求一个线程。
(4)依旧使用NATS消息中间件作为CF各组件之间的通信。
(5)日志框架steno,为cloudfoundry专门开发的一个日志框架steno。

2.身份认证:
V2版本cloudcontroller需要配置UAA服务,通过一个在HTTP的头信息设置UAA token作为身份认证。

3.数据库调整:
V1版本数据库表:
app_collaborations
apps
binding_tokens
products
routes
service_configs
services
users
V2版本数据库表:
billing_events
quota_definitions
service_auth_tokens
services
organizations
frameworks
runtimes
service_plans
domains
spaces
apps
domains_organizations
domains_spaces
routes
service_instances
users
apps_routes
service_bindings

这个数据库表之间的关系也不是最新数据库设计(缺少billing_events表)。
根据数据库及数据表的变化需要说明的几点:
1.数据库部分采用的ORM变化,原来使用的是ActiveRecord(Rails默认使用的ORM),V2版使用Sequel来处理数据库的操作;
2.新增billing_events,为计费系统提供数据;
3.新增organizations(组织),根据它和users的关系,笔者推测为实现多租户架构准备的;
4.新增spaces(暂未理解);
5.在V1中runtime和framework信息在程序中通过列表方式枚举,在V2版本中将这两块的信息也在数据库中进行持久化。

你可能感兴趣的:(云计算)