如何为事件驱动的微服务实现“去抖动”?
Posted
技术标签:
【中文标题】如何为事件驱动的微服务实现“去抖动”?【英文标题】:How to implement "debouncing" for event-driven microservices? 【发布时间】:2021-03-07 02:30:46 【问题描述】:我在 Azure 上的 Kubernetes 集群中运行了 2 个微服务。当项目更新时,“项目”微服务会向 Kafka 发送一个事件。 “分析”-微服务消费事件,进行一些昂贵的计算,最后发送一封包含结果的电子邮件。
为了避免向接收者发送垃圾邮件,我想实现某种去抖动模式,以便仅在收到最后一个更新事件后一个小时后才进行计算。由于“分析”-微服务大部分时间都是空闲的,冷启动也不成问题,如果资源在不活动时不保留,那将是有利的。
在使用 Kafka 时如何实现去抖动场景?我曾想过引入一个资源密集度较低的微服务,其唯一目的是在内部时钟到期后触发“分析”微服务。这是一个明智的解决方案吗?我很感激以前处理过类似问题的人的意见。
【问题讨论】:
为什么你只每小时处理一次它们,这个事件是如何驱动的?如果这是一项要求,为什么不直接实现一个 GET 端点并每小时轮询一次呢? 用户通过 REST 端点更新项目。 “Project”微服务向 Kafka 主题发送“ProjectUpdated”事件。 “分析”-微服务会监听它。它是事件驱动的,因为生产者和消费者彼此不认识。由于事件是由用户行为发起的,因此它们通常间隔很短。我想避免执行昂贵的分析计算并为每个事件发送一封电子邮件。如果在一个时间范围内完成一次就足够了。定期调用的 GET 端点会发现处于中间状态的项目。 【参考方案1】:您是否考虑过 Temporal 的耐用计时器。见这里:https://docs.temporal.io/docs/workflows/
您还可以考虑将 Temporal 与 Spiderwiz 结合使用以简化您的整个工作流程。
【讨论】:
以上是关于如何为事件驱动的微服务实现“去抖动”?的主要内容,如果未能解决你的问题,请参考以下文章