2017-09-27 47 views
-1

我正在开发一个系统,其中有一个服务器从UI(客户端)获取请求,然后创建与另一个与外部Web API进行通信的服务器的调用。服务器到服务器一致性的最佳实践架构

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

这样的状态可以

服务器A发送请求到服务器是并得到200 OK - 在服务器A上状态可以是活动或挂起 服务器B发送一个API调用和失败 - 在服务器B状态现在是错误

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

回答

0

高度依赖客户端和服务器设计。 如果我理解你的权利,从服务器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.