7

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

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

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


我想到了什么

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

1 回答 1

2

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

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

于 2013-08-29T13:43:24.410 回答