2

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

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

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

到目前为止我的想法:

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

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

有这方面的经验吗?

4

1 回答 1

0

第一种方法似乎更像是一种快速破解。检查辅助表时间戳几乎违背了缓存的目的。

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

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

如果父服务以与其子服务不兼容的配置开始运行,您可能会遇到崩溃或未定义的行为。为了避免这种情况,必须实施同步。

One way is let parent service to update it's configuration and then issue configuration update commands to child services. After all child services are updated, parent would resume processing. Advantage of this approach would be that a simple management console could instruct only parent services about the configuration changes.

Other way is let management console handle dependent services. It would send a command to parent services to pause execution, update config and wait for resume command. In a mean time it would update all child services and instruct parents to resume. This way service dependencies would be more flexible and their configuration would be decoupled from their implementation. This would require a more advanced administration tool.

于 2013-03-11T16:18:15.247 回答