EventBridge Pipes 设计最佳实践 - 过滤与批处理的优化
介绍 EventBridge Pipes 的过滤设计、批处理大小优化、错误处理策略以及提高成本效率的实践最佳实践。
过滤设计原则
EventBridge Pipes 的过滤是防止不必要事件到达目标的第一道防线。被过滤排除的事件不计费,因此合理的过滤设计直接关系到成本优化。过滤模式使用 EventBridge 的事件模式语法,可对 JSON 字段指定精确匹配、前缀匹配、数值比较、存在性检查等条件。最佳实践是尽可能具体地编写过滤条件。例如,当以 DynamoDB Streams 为源时,设置仅通过 `eventName` 字段为 INSERT 的事件,排除 MODIFY 和 REMOVE,可大幅减少不必要的事件处理。还可以将多个过滤模式以 OR 条件组合,最多可指定 5 个模式。
批处理优化
Pipes 从源批量获取事件并分发到目标。批处理大小和批处理窗口的设置直接影响吞吐量和延迟的权衡。增大批处理大小可在一次轮询中获取更多事件,提高吞吐量,但需要等待批次填满,因此延迟会增加。将批处理窗口(最大等待时间)设置较短,即使批次未满也会在指定时间后开始分发。对于需要实时性的场景,设置批处理大小为 1、批处理窗口为 0 秒;对于注重吞吐量的批处理,设置批处理大小为 10、批处理窗口为 60 秒。SQS 源的批处理大小最大可指定 10,000 条消息。Kinesis 源最大为 10,000 条记录。
错误处理策略
Pipes 的错误处理行为因源类型而异。对于 SQS 源,处理失败的消息在可见性超时后返回队列并重新处理。超过最大接收次数的消息会移至死信队列 (DLQ)。对于 Kinesis 或 DynamoDB Streams 源,由于分片迭代器不前进,失败的记录会成为阻塞器,后续记录也无法处理。要解决此问题,需设置 `OnPartialBatchItemFailure`,启用仅重试失败记录的部分批次响应。如果使用 Lambda 进行丰富处理,请在 Lambda 函数中实现适当的错误处理,对临时故障进行重试,对永久故障进行跳过或发送到 DLQ。 如需深入了解事件驱动架构的设计,可参考专业书籍 (Amazon)。
成本优化要点
Pipes 的定价基于请求数(每 64KB 单位 100 万次 0.40 美元)。优化成本的主要要点有三个。第一,利用过滤。被过滤排除的事件不计费,因此尽早排除不必要的事件是最有效的成本削减措施。第二,通过输入转换器 (Input Transformer) 减小负载大小。不将源事件的所有字段传递给目标,而是仅提取必要字段进行转发,可增加在 64KB 计费单位内容纳的事件数。第三,重新审视丰富处理的必要性。使用 Lambda 进行丰富处理时,除 Pipes 费用外还会产生 Lambda 执行费用。如果目标端可以进行补充处理,则可省略丰富处理以降低成本。
总结
在生产环境中运行 EventBridge Pipes 时,请从过滤精度、批处理设置调优、错误处理的健壮性和成本效率四个方面应用最佳实践。特别是过滤是同时影响成本和性能的最重要设置。建议先在开发环境中调整各设置参数确认行为,在应用到生产环境之前建立通过 CloudWatch 指标监控处理量和错误率的体制。