存储和转发具有多个微服务实例的设计模式

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (29)

我正在设计一个服务,它将接收只能执行一次的请求(由于唯一的id存在,可以多次接收)。

流程是:

外部世界 - > HTTP - > [一组Myservice实例] - > HTTP - >供应商服务

所以,我通过HTTP收到一堆请求,我希望进行一些转换,检查,将请求存储在数据库中,并通过HTTP发送给供应商服务。

我的问题是:

什么是在我的服务中实现存储和转发模式的有效方式,即接收请求并立即存储它,因此立即将其应用到“外部世界”,然后在我自己的时间将其转发到目标服务,重试尽可能多的根据需要的时间?

问题:

  • 如果myservice的一个实例在向供应商服务发送请求时发生故障,该怎么办?
  • 如果有一堆未被转发的请求,我将如何监控?
  • 如何避免另一个业务流程服务?
  • 如何避免另一个有效监视数据库并转发任何尚未转发的请求的单实例服务。
  • 如何最小化外部依赖 - 例如我知道这里的某种队列可能有助于解决这个问题,但我想知道我是否可以避免这种情况。
提问于
用户回答回答于

我建议不要使用NIH综合症,并依赖于成熟的技术,这些技术可以满足您的所有可靠性要求。

Cadence Workflow能够以最小的努力支持您的用例。

Cadence提供了许多难以匹配构建自定义任务编排解决方案的功能:

  • 构建指数重试,具有无限的到期间隔
  • 失败处理。例如,如果在配置的间隔期间两个更新都无法成功,则它允许执行通知另一个服务的任务。
  • 支持长时间运行的心跳操作
  • 能够实现复杂的任务依赖性。例如,在无法发生故障的情况下实现呼叫链接或补偿逻辑(SAGA
  • 提供对当前更新状态的完全可见性。例如,当使用队列时,您知道队列中是否有一些消息,并且您需要额外的数据库来跟踪整体进度。使用Cadence记录每个事件。
  • 能够取消飞行中的更新。
  • 分布式CRON支持

请参阅Cadence编程模型的演示文稿

扫码关注云+社区

领取腾讯云代金券