微服务服务到服务 - 通信需要知道的原则

时间:2016-04-26 17:32:34

标签: rest microservices

在调用服务API(又名需要知道)时,是否有最佳方法可以最小化(内部)微服务之间的交换数据?

如何实现这样的目标:

有三种服务:

  • 用户
  • 通知(让我们假设只是发送电子邮件)
  • 优惠

当通知服务需要用户的电子邮件地址时,它会查询用户服务的API,并且应该收到电子邮件(而不是完整的数据集)。

当送货服务需要用户的送货地址时,它会查询用户服务的API并获取送货地址(而不是完整的数据集)。

问题:

是否应该在用户服务中使用ACL的类型处理(什么服务" XYZ"允许查看)?

使用JWT进行身份验证时,根本需要交换密钥,因此在设置阶段,可以在团队之间讨论这些ACL。

1 个答案:

答案 0 :(得分:1)

  

是否应在具有ACL类型的用户服务中处理

我认为这是最好的选择。您可以将实际授权委托给单独的服务,用户服务可以使用呼叫者的身份和呼叫者正在进行的“声明”来调用该服务(例如“我可以看到用户的电子邮件地址”)。可以基于每个呼叫来评估权利要求。

但是,您是否真的需要查询用户服务是有争议的。这意味着对您的设计进行了更改,但想象一下Notifications服务已经知道用户的一分钟,例如用户ID和电子邮件地址,那么通知服务就不需要查询任何能够完成它的任务。

为了使通知服务已经拥有用户数据,必须在过去的某个时刻将该数据发送到通知服务。这样做的好时机是首次创建用户时,或任何时候更改用户详细信息。分发此类信息的最佳方式是以事件消息的形式,尽管您可以根据通知服务的http POST进行分发。