我有一个在服务器集群上运行的Web服务。这个Web服务会进行一些内部处理,然后可能会调用一个产生费用的外部服务。
我想要增加一些缓存,以便如果接收到相同的服务请求(这是肯定会发生的),那么就不必重复处理,既节省了处理时间/功率,也节省了在调用服务时产生的成本。
但是,在以下限制条件下如何管理此缓存我感到很困难:
- 为了高可用性和可扩展性,该服务在多个Web服务器上运行
- 该请求可能需要5秒钟才能响应,但在此期间,我可能已经收到2或3个相同的请求。
当在分布式环境中工作时,我该如何延迟执行其他服务调用,直到第一个已响应(因此可用于缓存)?
我考虑过使用前置代理模式并在代理中建立相同请求队列,这样当第一个请求返回时,它也可以将相同的响应返回给其他请求。这是正确的模式吗,还是有更好的并发模式来处理这种情况?