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

Java 将配置更改推送到服务器的实用方法,java,database,architecture,Java,Database,Architecture,该系统包含一个管理控制台和一组工作服务器。应用程序状态存储在数据库中。从管理控制台,用户可以添加新作业、监视正在运行的作业等。工作服务器从数据库获取作业并对其进行处理 现在,一些配置也存储在数据库中。配置也会加载到每个工作服务器上,并且大部分都会缓存,因为配置不会经常更改 管理员可以更改配置(从管理控制台)。更改存储在数据库中。将更改推送到工作服务器的最佳方式是什么 到目前为止,我的想法是: 在更新/删除/插入时在配置表上添加触发器,并在某些辅助表中更新时间戳。每个工作服务器在访问缓存之前都会检

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

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

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

到目前为止,我的想法是:

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

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


  • 有没有这方面的经验?

    第一种方法似乎更像是一种快速破解。检查aux表时间戳几乎无法达到缓存的目的

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

    改变多个服务的配置的主要问题是它们的依赖性

    若父服务在其子服务配置不兼容的情况下开始运行,则可能会出现崩溃或未定义的行为。为了避免这种情况,必须执行同步

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


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

    为什么管理控制台不能启动更新?它安装在工作计算机集群之外的单独计算机实例上。因此,基本上,想法2是管理控制台启动更新的地方。将澄清我的问题。让数据库关闭所有连接,并告诉服务器在发生这种情况时重新配置。Thanx指出同步问题,我忽略了它。我会再等一会儿,这似乎是我正在寻找的解决方案(同步父->子通知)。我担心另一种方式(暂停)可能不好,因为它可能会很昂贵(从业务角度)。@IgorSpasic,如果您并行更新子服务,暂停应该是毫秒的事情。除非你正在做一些实时处理,否则这根本不是问题。没有其他方法可以在不等待所有相关服务更新的情况下进行同步。要知道,暂停一个父服务器似乎比暂停工作服务器要便宜,因为它们已经有许多并发工作会话,正在做一些实时工作。非常感谢。