服务器到服务器一致性的最佳实践架构

时间:2017-09-27 10:28:24

标签: architecture server consistency

我正在开发一个系统,其中有一个服务器从UI(客户端)获取请求,然后它创建对另一个与外部Web API通信的服务器的调用。

我面临的问题是2台服务器之间的不一致,因为面向服务器的外部API可能无法使用外部API执行操作,有时它会在20分钟左右后失败。

所以状态可以是

服务器A向服务器发送请求并获得200 ok   - 服务器A上的状态可以是ACTIVE或PENDING 服务器B发送API调用并失败   - 服务器B上的状态现在是错误

告诉服务器A该操作实际失败的最佳做法是什么?

1 个答案:

答案 0 :(得分:0)

高度依赖于客户端和服务器设计。 如果我理解你的话,从服务器B到外部API的API调用(我在下文中称之为C)是异步设计的:

 A ---------> B
 A <-- ACK -- B
              B ---------> C
              B <-- ERR -- C

(A <-- ERR -- B) 
^ that is your question

根据消息通信,有多种可能性。如果您使用REST调用,则从B到A的确认可能包含操作ID和A可以询问操作状态的端点:

{
    status: queued,
    operationId: 12345
    operationStatusUri: yourhost.com/api/queue/123456
}

客户端现在可以使用A调用来轮询状态。

如果你有某种基于消息的架构,你可以使用消息总线系统将错误从B推送到A.