2016-06-08 49 views
1

应用程序体系结构有三个微服务;我们称他们为A,B和C.微服务不同步

A是持有用户权限(包括发送SMS的权限)的权限,当权限更新时,它会为感兴趣的服务发布事件。

B和C监听权限更改,以控制发送短信。

主轨应用程序是与A,B,C.

积分

应用与权限,以防止学生甲接收任何SMS, 然后甲公布它获取在Queueworker延迟事件更新A; 应用程序开始通过B发送短信,由于Queueworker延迟,该信息尚未更新。

一旦权限更改为false,我们如何确保(或者需要在设计中更改哪些内容以确保)用户不会收到SMS?

回答

2

您正遇到分布式系统的最大挑战 - the CAP theorem。总之,分布式系统(像你这样)不能保证所有三个如下:

  • Ç onsistency - 所有的服务看到相同的数据在同一时间
  • 一个 vailability - 所有服务要求对方接收成功或失败响应
  • P artition耐受性 - 系统继续即使服务无法到达对方
0的功能

在你的具体问题中,缺乏一致性会伤害你。你可以修复它,但你必须放弃其他的一点。例如,在发送每个SMS之前,您可以让服务B对服务A执行同步HTTP请求,以验证目标收件人是否仍然有权接收SMS。这将解决您的一致性问题,但会创建一个依赖项,A必须启动并运行B才能运行(即,您已从CAP中丢失了该代码)。

您还可以通过发送SMS请求作为事件,通过权限更新所经过的同一队列来缓解此问题。在权限被禁用后,仍然可以发送短信,但只有在发送短信后允许更新才会发生。这仍然缺乏一致性,但影响不那么严重(以SMS延迟为代价)。