用于将配置更改推送到服务器的实用方法

时间:2013-03-11 11:24:07

标签: java database architecture

系统包含管理控制台和一组工作服务器。应用程序状态存储在数据库中。从管理控制台用户可以添加新作业,监视正在运行的作业等。工作服务器从数据库中获取作业并进行处理。

现在,一些配置也存储在数据库中。配置也会加载到每个工作服务器上,并且大部分都是高速缓存的,因为配置不会经常更改。

管理员可以更改配置(从管理控制台)。更改存储在数据库中。将更改推送到正常工作的服务器的最佳方法是什么?

到目前为止我的想法:

  1. 在更新/删除/插入时在配置表上添加触发器并更新某些aux表中的时间戳。访问缓存之前,每个工作服务器都会检查此辅助表以进行更改。 缺点:仍在访问数据库。

  2. 从管理控制台向所有正在更改配置的工作服务器发送请求,并且必须在下次调用时从db读取。 缺点:在管理员和服务器之间引入了http通信 - 到目前为止还不存在的新层 - 以及它的可靠性是多么可疑。

  3. 有关此主题的任何经验吗?

1 个答案:

答案 0 :(得分:0)

第一种方法似乎更像是一种快速黑客攻击。检查辅助表时间戳几乎会破坏缓存的目的。

第二种选择似乎是好的选择。这可以作为任务队列中的一个简单任务来实现,以更新自己的配置缓存。

更改多个服务配置的主要问题是它们的依赖关系。

如果父服务开始使用与其子服务不兼容的配置运行,则可能会出现崩溃或未定义的行为。为避免这种情况,必须实现同步。

一种方法是让父服务更新它的配置,然后向子服务发出配置更新命令。更新所有子服务后,父服务器将恢复处理。这种方法的优点是简单的管理控制台只能指示父服务有关配置更改。

其他方式是让管理控制台处理相关服务。它会向父服务发送命令以暂停执行,更新配置并等待resume命令。与此同时,它将更新所有儿童服务并指示父母恢复。这样,服务依赖性将更加灵活,并且它们的配置将与其实现分离。这需要更高级的管理工具。