我们有一些 Spring Boot 服务在其中运行,GCP Kubernetes Engine
它们将它们的 HTTP(通过 gRpc)API 暴露给客户端。一项任务是导入非常大的数据文件。建议的方法是将文件上传到 Google 存储,并通过提供导入位置的文件路径来触发,asynchronous import
并在请求有效的情况下返回 HTTP 202。
接下来,我们在持久层(spanner)中将导入的状态设置为挂起,并触发异步解析和批量摄取过程。如果导入成功,我们将状态设置为已完成。客户知道导入是否成功的唯一方法是返回并poll our API for the current status.
那么问题就来了。有好几个load-balanced pods
同种。如果导入服务崩溃(我的意思是崩溃,而不是异常处理),我们没有直接的方法最终将状态设置为中止。状态将永远保持挂起。
如果可能的话,我们希望避免使用像 hazelcast 这样的附加层。此外,我们希望避免让另一个服务直接与一个或其他 pod 通信、观察状态并执行一些花哨的回调操作。
谁能提示如何以最佳实践方式解决该问题?
非常感谢。