微服务中的异步处理

时间:2019-05-24 06:49:37

标签: asynchronous callback architecture microservices jobs

我正在寻找工作和服务之间通信的良好设计。 常见的方法是通过支持JSON数据(作为API)或使用队列来公开http端点。 通话时间长且需要响应时,我遇到问题。

让我们想象一下,我们有一项工作可以将文本从mp3中提取出来并将其翻译为另一种语言。我们已经有微服务:

  1. 提供文件(mp3文件)
  2. 从文件中提取文本(耗时)
  3. 将文本翻译成另一种语言(很耗时)
  4. 存储翻译后的文本

当然,每个服务都可以成倍增加规模。

在这样的例子中应该如何实施这项工作?

更清楚地说,我将在互联网上阅读一些内容后写下并举例说明解决方案:

  • 所有使用REST端点的通信
  • 创建第五个微服务作业管理器,它将在共享数据库上工作(因此,如果将部署该服务的多个实例,则作业将仅在一个实例上运行一次)。它只会触发远程方法,此处没有作业类
  • 在第4个服务器上创建一个实际上是工作的方法,但工作主管将根据cron表达式调用它
  • 时间到了,主管开始工作,工作同步地从第四台服务器调用方法
  • 方法将调用1个服务并下载文件,然后将其上传到2个服务并等待文本,然后将文本上传到3个并等待翻译,然后将翻译存储到数据库中
  • 因为所有事情都是同步完成的,所以我们所有服务之间的连接都很长

问题:

  • 超时可能发生并且方法失败,因此作业失败
  • 实施回调可以帮助实现同步通信,而不是同步通信,但是如何确保响应将到达发送请求的同一实例?

0 个答案:

没有答案