Rails系统重构:从单一复杂系统到多个小应用集群
2010-10-09 08:15:34 来源:WEB开发网通过acts_as_readonly这个方法,可以让purchase的类CoursePackage从course数据库中读取数据。需要注意的是,为了保证数据维护的一致性,CoursePackage的数据库连接是只读的,这样可以避免数据在多个应用中被修改。
acts_as_readonly的核心实现如下(限于篇幅,设置连接为只读等代码并未列出):
def acts_as_readonly(app_name, options = {})
config = CoreService.app(app_name).database
establish_connection(config[Rails.env])
set_table_name(self.connection.current_database + "." + table_name)
end
app_name是每个应用在集群中的唯一标识。purchase通过CoreService来获取course的数据库配置并设置连接。那么,CoreService向什么地方发送请求,又是如何知道course的配置信息呢?
在应用集群中,为了降低应用间的耦合性,我们采用集中式的配置管理。选择某一个应用作为core,其他应用在server启动时将自己的配置信息发送到core集中存储。例如我们在示例程序中选择user做为core应用,purchase需要查询course的配置时,就通过 CoreService向user发送请求,user根据名称查询出course包括数据库在内的所有配置信息,并返回给purchase。交互过程如下图所示:
查看原图(大图)
采用集中式的配置管理后,应用之间的调用都通过core来进行,这样就把应用之间的交互由网状结构变成以core为中心的星型结构,降低了系统配置管理的复杂度。
应用程序的配置信息保存在config/app_config.yml中,示例如下:
更多精彩
赞助商链接