服务器到服务器一致性的最佳实践架构
问题描述:
我正在开发一个系统,其中有一个服务器从UI(客户端)获取请求,然后创建与另一个与外部Web API进行通信的服务器的调用。服务器到服务器一致性的最佳实践架构
我面临的问题是两台服务器之间的不一致,因为面向外部API的服务器可能无法使用外部API执行操作,有时它可能会在20分钟左右后失败。
这样的状态可以
服务器A发送请求到服务器是并得到200 OK - 在服务器A上状态可以是活动或挂起 服务器B发送一个API调用和失败 - 在服务器B状态现在是错误
告诉服务器A该行为实际上失败的最佳做法是什么?
答
高度依赖客户端和服务器设计。 如果我理解你的权利,从服务器B到外部的API(我称之为下,在下面的文本)API调用是异步设计:
A ---------> B
A <-- ACK -- B
B ---------> C
B <-- ERR -- C
(A <-- ERR -- B)
^ that is your question
根据消息通信,有多种可能性。如果您对REST调用操作,你来一个确认从B可以包含操作ID和端点,其中A可以要求操作的状态:
{
status: queued,
operationId: 12345
operationStatusUri: yourhost.com/api/queue/123456
}
客户端现在可以使用一个调用轮询状态。
如果您有某种基于消息的体系结构,可以使用消息总线系统将错误从B推送到A.