我正在开发的应用程序使用简单的HashMap作为缓存,用于存储来自数据库的某些对象。虽然这远非理想,但这些缓存列表中的数据量非常小(少于100),且很少更改。这种解决方案提供了最小的开销。当这些缓存列表中的项目更改时,其值会在HashMap中被替换。
我们即将在生产环境中启动此应用程序。为了提供一个合理可扩展的解决方案,我们提出了一种负载平衡解决方案。负载均衡器在多个Wildfly节点之间切换,每个节点都持有整个应用程序,除了数据库。
问题在于,当缓存项更改时,它只会在一个节点中更新。更改不会应用于其他节点中的缓存。可能的解决方案包括:
- 禁用缓存。不是一个选项。 - 使用Ehcache Server等缓存服务器。这样就会有一个缓存适用于所有节点。然而,由于REST调用过多,问题在于开销太大。 - 每个节点都有一个额外的Web服务。该Web服务将跟踪所有负载平衡节点。当节点中的缓存值更改时,节点会向其他节点发出信号以清除其缓存。 - 带有信号功能的现成解决方案,例如Ehcache。这种解决方案是否存在?
我的问题是:是否有产品提供最后一种解决方案(免费且具有开放许可证,可商业使用)?如果没有,我将实施第三种解决方案。是否有任何风险/错误需要注意?
我们即将在生产环境中启动此应用程序。为了提供一个合理可扩展的解决方案,我们提出了一种负载平衡解决方案。负载均衡器在多个Wildfly节点之间切换,每个节点都持有整个应用程序,除了数据库。
问题在于,当缓存项更改时,它只会在一个节点中更新。更改不会应用于其他节点中的缓存。可能的解决方案包括:
- 禁用缓存。不是一个选项。 - 使用Ehcache Server等缓存服务器。这样就会有一个缓存适用于所有节点。然而,由于REST调用过多,问题在于开销太大。 - 每个节点都有一个额外的Web服务。该Web服务将跟踪所有负载平衡节点。当节点中的缓存值更改时,节点会向其他节点发出信号以清除其缓存。 - 带有信号功能的现成解决方案,例如Ehcache。这种解决方案是否存在?
我的问题是:是否有产品提供最后一种解决方案(免费且具有开放许可证,可商业使用)?如果没有,我将实施第三种解决方案。是否有任何风险/错误需要注意?