在AWS ASG中处理Java RMI



我们有两个服务前端api服务和一个后端服务。为了获得高tps,我们使用异步调用。

  1. 最终用户http调用位于前端的tomcat服务器之一
  2. 前端使用服务器ip的上下文调用异步中的后端,并使请求线程进入睡眠状态
  3. 一旦后端完成作业,它就会使用rmi和上下文中获得的服务器ip向前端进行回调
  4. 在回调中,将调用原始http线程
  5. 被调用的http请求线程使用缓存中准备好的数据并完成响应

在我们处于物理DC之前,这很好,因为我们过去不缩放或去缩放。使用AWS ASG,当后端服务尝试进行回调时,服务器ip可能不存在。因此,用户端的请求需要重试。

我们希望在这里脱离RMI,并且仍然保持异步。想得到这个的任何解决方案

完全去掉响应线程。让客户端无状态地轮询缓存以获取完整响应,这样就不需要在中间件(tomcat(中维护状态。从后端将您的响应粘贴到ElastiCache或Redis中,当它们出现时,客户端会找到它们。

如果你想避免从客户端进行轮询,你可以在中间件中进行长时间的等待,但仍然可以让它们成为无状态的,并让它们在计时器上轮询缓存,但实际上你只是在制造另一个瓶颈,你最好是完全无状态的。

最新更新