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

Ste*_*ler 6 java load-balancing amazon-web-services cache-invalidation

我在AWS上托管了一个基于Java的Web应用程序.它被读取 - 大多数情况下,缓存从数据库中检索的对象以获得性能是很有意义的.

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

不需要是实时的.过时的物体很烦人,需要在大约20秒内冲洗.用户注意他们是否坚持了几分钟.缓存失效不必发生在保存对象的毫秒之后.


我一直在想什么

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

chr*_*ke- 2

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

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