我知道服务之间的同步通信是一种反模式,所以我正在为我的用例寻找一个好的解决方案。微服务之间的同步REST通信的替代
我有这两个服务:
Location Service
管理用户位置Score Service
管理用户评分
现在,我必须建立另一个服务:Users Feed Service
(UFS)。它必须将用户返回给定位置,按照分数(降序)排序。
同步解决方案
- 给定的位置,UFS获取从位置服务(REST)
- 对于他们中的每一个附近的用户,它得到她的得分从分服务(REST)
- 最后,它对内存中的用户进行排序并返回它们
什么是替代方案?我一直在思考这样的事情:
事件队列解决方案
- UFS在数据库中,或内存缓存或东西
- 它侦听到的变化在队列中来店用户的位置和分数当得分服务和位置服务发布时更新其数据
这样,当客户端请求用户的feed时,用户的feed服务不必执行任何网络请求(它拥有必要的数据)
这是一个很好的解决方案吗?我该如何改进它?它会扩展到大量的用户吗?
它会比同步解决方案的规模更好。队列比API更好,处理量更大。但是,您必须克服排队运输基础设施的复杂性。你确定你没有过早优化吗? –
也许我是。但我担心未来的变化。从同步到基于队列的系统的迁移可能很难。无论如何,我认为你是对的。也许我试图解决不存在的可伸缩性问题。谢谢 –