容器部署高级主题:消息队列与安全实践
1. 基于套接字系统的局限性
将每个集群服务视为一系列连续的转换步骤时,基于套接字的系统会经历如下循环步骤:
1. 打开监听套接字。
2. 进入无限循环:
- 等待上一阶段套接字的数据。
- 处理该数据。
- 将处理后的数据发送到下一阶段的套接字。
然而,若下一阶段已达到最大容量,大多数基于套接字的系统要么抛出异常,导致该数据的处理管道完全失败;要么阻止执行继续,不断重试将数据发送到下一阶段,直至成功。为避免处理管道失败,且不让工作进程等待下一阶段解锁,需要一种有序结构来保存各阶段的输入,使上一阶段能继续处理新输入。
2. 容器消息传递:消息队列的解决方案
对于单个处理阶段的背压导致级联回流停止的情况,消息队列(通常也称为发布/订阅消息系统)提供了所需的解决方案。消息队列通常以先进先出(FIFO)的队列结构存储数据,允许发送者将所需输入添加到特定阶段的队列(“入队”),工作进程(监听器)对队列中的新消息做出响应。
当工作进程处理消息时,队列会对其他工作进程隐藏该消息;处理成功后,消息将从队列中永久移除。通过异步处理结果,发送者可继续处理自身任务,实现数据处理管道的完全模块化。
以下是消息队列工作流程的mermaid流程图:
graph LR A[发送者] -->|入队| B(消息队列) B -->|出队| C[工作进程] C -->|处理完成| B C -->|发送结果| D[下一阶段] </