Kubernetes IPC微服务AMQP和弹性

Kubernetes IPC微服务AMQP和弹性,kubernetes,microservices,event-driven,Kubernetes,Microservices,Event Driven,我正在为运行在Kubernetes上的微服务平台创建一个架构。 我当前的体系结构如下所示: 说明: 我使用Flask创建API RESTful 对于IPC机制和事件驱动,我使用RabbitMQ 微服务包含用于调用生产者和消费者RabbitMQ的代码 启动Flask应用程序时,将消费者实例化为子进程(具有多处理库)。在主应用程序(烧瓶)的所有生存状态下,该过程未加入,也未终止 仅当调用请求(POST/PUT)时,才会实例化生产者 我在想,如果我的RabbitMQ崩溃了怎么办: 微服务中的使

我正在为运行在Kubernetes上的微服务平台创建一个架构。 我当前的体系结构如下所示:

说明:

  • 我使用Flask创建API RESTful
  • 对于IPC机制和事件驱动,我使用RabbitMQ
  • 微服务包含用于调用生产者和消费者RabbitMQ的代码
  • 启动Flask应用程序时,将消费者实例化为子进程(具有多处理库)。在主应用程序(烧瓶)的所有生存状态下,该过程未加入,也未终止
  • 仅当调用请求(POST/PUT)时,才会实例化生产者
我在想,如果我的RabbitMQ崩溃了怎么办:

  • 微服务中的使用者将不再存在,因为它将引发连接到rabbitMQ的异常
  • 微服务API(FLASK)将继续有效
因此,我的问题如下:
将消费者流程分离到独立的容器中是一种好的做法吗

->容器将在同一个pod中沿着主应用程序运行。
->sidecar使用者将有一个活动端点,因此如果RabbitMQ再次崩溃,Kubernetes将只启动此容器。
->sidecar使用者将有权访问数据库以写入事件。
->制作人可以留在主应用程序(flask),对我来说更具弹性

这样做是正确的吗?

是的,我认为这是一种很好的方法,因为您依靠Kubernetes检查容器是否已启动(使用liveness probe),而不是从应用程序进行检查

您还可以使用集群的可观测性堆栈监视/警告类似事件(容器已关闭)