算法:在平行中启动两个服务,但按顺序运行它们



我有两个服务,我想在parrallel开始,但按顺序运行。也就是说,服务 B 将在服务 A 运行时休眠,反之亦然。这些服务调用具有速率限制的外部 REST API。当服务达到其限制时,它将进入睡眠状态。

我想实现这一目标的一种天真方法是让服务不断轮询彼此的状态,但我可以想象遇到两个服务发送sleep状态并尝试同时start的情况。

编辑:服务在不同的机器/jvm 环境中运行。

编辑:速率限制是按IP地址

有什么想法吗?

假设 API 每 20 秒轮询一次。

我会让服务相互发送"抑制"消息 - 让每个服务在启动时随机休眠几秒钟,然后第一个唤醒的服务向另一个服务发送一条消息,说"我正在调用 API,在接下来的 30 秒内不要调用它",然后轮询 API,如果它没有达到限制, 休眠 20 秒,然后发送另一条消息并再次轮询 API,依此类推,直到达到限制。达到限制时,第一个服务将休眠(假设)5 分钟,因此第二个服务将不再接收抑制消息,并将开始轮询 API 并向服务 A 发送抑制消息。当第一个服务完成休眠时,它将查找抑制消息,并且仅在未收到消息时才开始轮询 API。

最新更新