事件驱动与请求响应微服务集成:原理、模式与实践
1. 事件驱动模式的优缺点
使用事件驱动模式有诸多好处:
- 允许在应用业务逻辑时将事件处理与请求 - 响应 API 混合。
- 服务可以按需调用任何外部 API。
- 可以通过向端点发出多个非阻塞请求并行处理事件。服务在发送每个请求后等待结果,获取结果后更新偏移量并处理下一批事件。不过,并行处理仅适用于队列式流,因为处理顺序无法保证。
但这种方法也存在一些缺点:
- 向外部服务发出请求会给工作流引入不确定性因素。重新处理事件,即使只是失败的批次,也可能产生与原始处理不同的结果。
- 当请求 - 响应端点由组织外部的第三方控制时,API 或响应格式的更改可能导致微服务失败。
- 请求频率也是一个问题。例如,微服务出现 bug 需要重新处理输入流时,事件驱动的微服务通常会尽可能快地处理事件,这可能导致对外部 API 的请求激增,使远程服务失败或阻止来自该 IP 地址的流量,导致许多请求失败和微服务的紧密重试循环。可以使用配额来限制消费和处理速率,但处理请求的微服务也需要严格的限流。
2. 处理和服务有状态数据
可以创建事件驱动的微服务,通过请求 - 响应端点实现对状态的随机访问。微服务从输入事件流中消费事件,处理它们,应用业务逻辑,并根据应用需求将状态存储在内部或外部。请求 - 响应 API 提供对这些底层状态存储的访问。这种方法主要分为两部分:从内部状态存储提供状态服务和从外部状态存储提供状态服务。
2.1 使用内部状态存储服务实时请求
微服务可以提供来自其内部状态的结果。客户端请求被发送到负载均衡器,负载