同步集群中的 Web 应用程序

发布于 2025-01-05 08:14:54 字数 334 浏览 0 评论 0原文

我有一组 Web 服务器,每个服务器都运行相同的 Java Web 应用程序。所有这些 Web 应用程序实例共享相同的数据库(用于数据存储)和相同的网络文件存储(其中保存一些所需的文件)。

我需要能够同步 Web 应用程序的实例。例如,应用程序实例之一收到来自客户端的特定请求,它会进行一些重新计算并更新其内部缓存。此时,我需要更新集群中所有其他 Web 应用程序的内部缓存,以便每个应用程序都在同一数据集上运行。

实现此类功能的最佳方法是什么?当然,我可以实现一些自定义组件,该组件将定期轮询共享资源(数据库表中的标志或文件存储上的文件),并在满足条件后启动所需的处理。但也许我可以使用一些已经存在的库/组件/应用程序?

I have a cluster of web servers each one running the same java web application. All these instances of web application share the same database (for data storage) and the same network file storage (where they keep some required files).

I need to be able to synchronize instances of web applications. For example, one of the application instances receives a certain request from client, it does some recalculations and updates its internal cache. At this point I need to update internal caches for all other web applications in a cluster, so that each one of them operate on the same dataset.

What would be the best way to achieve such functionality? For sure I can implement some custom component that will periodically poll shared resource (flag in the database table or a file on file store) and initiate required processing once the condition is met. But maybe there's some already existing library/component/app that I can use?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

墨离汐 2025-01-12 08:14:54

有很多现有的库和组件。你可以google一下cache coherence。有不同的现成解决方案,Jboss缓存,Oracle coherence,GridGain等。

如果你想手写代码,方法很少,怎么办完成吧。集群中的每个节点都应该了解其他节点(在最简单的情况下)。数据可以通过不同的方式复制。

同步复制 仅当写入提交到其他节点时,才会在本地缓存中进行写入。

异步复制。写入发生在本地节点,然后复制到其他节点。

缓存失效。当数据发生变化时,所有节点都会收到信号,使数据无效并从数据库中重新读取。

自己实现它可能会很棘手,您需要特殊的协议(您可以使用JGroups),您的节点将使用它来交换数据。我建议你找到现成的解决方案

There are a lot of existing libraries and components. You can google about cache coherence. There are different ready-to-use solutions, Jboss cache, Oracle coherence, GridGain etc.

If you want to write hand-written code, there are few approach, how can be done. Every node in your cluster should know about others node (in simplest case). Data can be replicated in different ways.

Synchronous replication Writes occur in local cache only when writes submit to other nodes.

Asynchronous replication. Writes occurs in local node and later replicate on other nodes.

Cache invalidation. When data is changed, all nodes receive signal, invalidate their data and re-read it from database.

It could be quit tricky to implement it yourself, you need special protocol(you can use JGroups), which your nodes will use to exchange data. I suggest you to find ready solution

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文