替代微服务之间的同步REST通信

时间:2017-07-25 12:10:16

标签: architecture microservices api-design

我知道服务之间的同步通信是一种反模式,所以我正在为我的用例寻找一个好的解决方案。

我有这两项服务:

    管理用户位置的
  • Location Service
  • 用于管理用户得分的
  • Score Service

现在,我必须构建另一项服务:Users Feed Service(UFS)。它必须返回给定位置附近的用户,按得分(降序)排序。

同步解决方案

  1. 根据位置,UFS从位置服务(REST)中提取附近的用户
  2. 对于他们中的每一个,它从得分服务(REST)获得她的分数
  3. 最后,它会对内存中的用户进行排序并将其返回
  4. 有什么替代方案?我一直在考虑这样的事情:

    事件排队解决方案

    • UFS将用户位置和分数存储在数据库或内存缓存或其他内容中
    • 当分数服务和位置服务在其中发布时,它会侦听队列中的更改以更新其数据

    这样,当客户端请求用户提供时,用户提要服务不必执行任何网络请求(它拥有必要的数据)

    这是一个很好的解决方案吗?我怎样才能改进它?它会在大量用户中扩展吗?

1 个答案:

答案 0 :(得分:1)

也许你有一些额外的要求你没有列出,但在我看来,在这种情况下,一个基于事件的解决方案可以复制来自其他服务的大量数据,这种方式超过了工程。

如果UFS在位置服务发生变化时获取位置,那么将其调用与来自位置服务的事件相关联的位置变化是有意义的

关于分数服务,我会保持同步,但让其界面接受客户列表,而不是让它成为“获得客户分数”的调用。