设计非真实时间,非阻滞,结果依赖性系统



上下文:

1(我们有一个调度程序,该调度程序可以通过以阻塞方式致电另一个休息电话来接工作并处理它们。

2(调度程序线程需要等待剩下的电话完成并根据结果完成其他任务。

3(没有任何限制是实时的。

问题语句:

1(我们想要的是,一旦进行外部呼叫作为外部呼叫,请立即释放调度程序线程。

2(我们应该根据结果进行一些处理,以了解外部呼叫的结果。

在我心中的想法:

1(而不是使用同步http调用来调用外部系统,我们 可以将事件推到队列。

2(另一个系统的API消费者将从队列中读取事件,并执行长期运行的任务。后处理后将结果推回了另一个主题的队列。

3(现在,我们的系统可以阅读队列中的响应(第二个主题(并执行必要的操作。

这是我的设计方法之一

我需要有关我们是否可以以某种方式改进设计的建议。

1(可以在不引入队列的情况下完成此操作?

2(有什么更好的方法来实现异步处理?

如果要避免使用队列,我可以想到其他两个替代方案,例如:

1(而不是使用同步HTTP调用调用外部系统,我们可以将事件推到队列。

替代a(

您进行同步的HTTP可以告诉另一个系统,您希望执行某些工作(其他系统以" 200 OK"回复,以确认已收到请求(。

替代性b(

您执行同步的HTTP可以告诉其他系统您希望执行某些作业(其他系统以" 200 OK"和一个唯一的ID回复以识别要执行的作业(

2(另一个系统的API消费者将从队列中读取事件,并执行长期运行的任务。后处理后将结果推回了另一个主题的队列。 3(我们的系统现在可以阅读队列(第二个主题(的响应并执行必要的操作。

替代a(

收到请求后,另一个系统执行长期运行的计算,然后在准备就绪时,将对您的原始系统进行同步http调用,以告知作业已准备就绪。

替代性b(

收到请求后,另一个系统执行长期运行的计算。原始系统不知道该作业是否完成,因此在某些时间进行轮询(执行同步的HTTP到另一个REST API(提供了工作ID,以找出是否准备好工作。

<。

最新更新