IPC 微服务 AMQP 和弹性
IPC microservices AMQP and resilience
我正在通过 Kubernetes 为我的微服务平台创建架构 运行。
我当前的架构如下所示:
描述:
- 我用 Flask 创建了一个 API RESTful.
- 对于我的 IPC 机制和事件驱动,我使用 RabbitMQ。
- 微服务包含调用生产者和消费者 RabbitMQ 的代码。
- 启动 Flask 应用程序时,将在子进程(使用多处理库)中实例化消费者。在主应用程序(烧瓶)的所有活动状态下,进程未加入,也未被终止。
- 生产者仅在调用请求 (POST/PUT) 时实例化。
我想知道,如果我的 RabbitMQ 崩溃了怎么办:
- 微服务中的消费者将不再存在,因为它会引发连接到 rabbitMQ 的异常
- 微服务API (FLASK) 将继续存在
所以我的问题如下:
将消费者进程分离到一个独立的容器中是一种好的做法吗?
-> 容器将 运行 与同一 pod 中的主应用程序一起。
-> Sidecar consumer 会有一个 liveness 端点,所以如果 RabbitMQ 再次崩溃,Kubernetes 将只启动这个容器。
-> Sidecar 消费者将有权访问数据库以写入事件。
-> 生产者可以留在主应用程序(烧瓶)中,对我来说更有弹性。
这样做是正确的吗?
是的,我认为这是一个很好的方法,因为您依靠 Kubernetes 来检查该容器是否已启动(使用活性探测器),而不是从应用程序中执行此操作。
您还可以使用集群的可观察性堆栈 monitor/alert 类似的事件(已关闭的容器)。
我正在通过 Kubernetes 为我的微服务平台创建架构 运行。
我当前的架构如下所示:
描述:
- 我用 Flask 创建了一个 API RESTful.
- 对于我的 IPC 机制和事件驱动,我使用 RabbitMQ。
- 微服务包含调用生产者和消费者 RabbitMQ 的代码。
- 启动 Flask 应用程序时,将在子进程(使用多处理库)中实例化消费者。在主应用程序(烧瓶)的所有活动状态下,进程未加入,也未被终止。
- 生产者仅在调用请求 (POST/PUT) 时实例化。
我想知道,如果我的 RabbitMQ 崩溃了怎么办:
- 微服务中的消费者将不再存在,因为它会引发连接到 rabbitMQ 的异常
- 微服务API (FLASK) 将继续存在
所以我的问题如下:
将消费者进程分离到一个独立的容器中是一种好的做法吗?
-> 容器将 运行 与同一 pod 中的主应用程序一起。
-> Sidecar consumer 会有一个 liveness 端点,所以如果 RabbitMQ 再次崩溃,Kubernetes 将只启动这个容器。
-> Sidecar 消费者将有权访问数据库以写入事件。
-> 生产者可以留在主应用程序(烧瓶)中,对我来说更有弹性。
这样做是正确的吗?
是的,我认为这是一个很好的方法,因为您依靠 Kubernetes 来检查该容器是否已启动(使用活性探测器),而不是从应用程序中执行此操作。
您还可以使用集群的可观察性堆栈 monitor/alert 类似的事件(已关闭的容器)。