java - 如何向所有运行 Web 应用程序的服务器广播缓存无效消息?

标签 java amazon-web-services load-balancing cache-invalidation

我有一个基于 Java 的 Web 应用程序托管在 AWS 上。它以读取为主,因此缓存从数据库中检索的对象以提高性能非常有意义。

当我更新一个对象时,我希望能够向所有服务器广播该对象已被保存并且它应该从所有本地缓存​​中失效。

不需要是实时的。陈旧的对象很烦人,需要在大约 20 秒内刷新。用户会注意到他们是否停留了几分钟。缓存失效不必在对象保存的毫秒级发生。


我的想法

  • 我研究过 jGroups 等广播技术,但 AWS 不支持 jGroups。
  • 我不认为 Amazon 的 SQS 消息服务可以做成广播服务。
  • 我正在考虑为此目的使用数据库:我会将事件写入数据库表并让每个服务器每隔几秒轮询一次该表以获取新的列表项。

最佳答案

我想到了两个选项。第一种是使用 Amazon SNS ,它可以使用 SQS 作为交付后端。不过,这可能有点矫枉过正,因为它被设计为许多交付类型的前端,包括电子邮件和 SMS。

我尝试的方法类似于 cometd 式推送通知。让每台带有缓存的机器打开与负责处理更新的服务器的长期 TCP 连接,并从该服务器向所有正在收听的人发送一条紧凑的“无效”消息。作为一种特殊用途的协议(protocol),这可以以最小的开销完成,也许只需发送对象 ID(如果需要,还可以发送类)。

关于java - 如何向所有运行 Web 应用程序的服务器广播缓存无效消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18512102/

相关文章:

java - SAS 内核无法在 Jupyter 上运行

java稀疏矩阵问题

linux - HAProxy 降低吞吐量

azure - Azure 负载均衡器是否允许连接耗尽

Java从HTTP正文中读取json

javascript - AWS API 网关返回 400 Bad Request,但 Postman 工作正常

amazon-web-services - 在生产中包含 aws-java-sdk jar

amazon-web-services - 如何通过 kubectl 连接在私有(private) PVC 上运行的 AWS RDS 数据库实例

apache2 - mod_proxy 超时 (502) 和故障转移

java - 在 javac 中强制执行包声明检查