首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >微服务架构:跨服务数据共享

微服务架构:跨服务数据共享
EN

Stack Overflow用户
提问于 2015-04-06 02:03:50
回答 2查看 9.6K关注 0票数 29

考虑以下针对在线商店项目的微服务:

用户服务保存商店用户的帐户数据(包括名字、姓氏、电子邮件地址等)

购买服务跟踪用户购买的详细信息。

每个服务都提供了一个用于查看和管理其相关实体的UI。Purchase Service索引页面列出了购买。每个购买项目都应包含以下字段:

id、购买用户全名、购买商品名称和价格。

此外,作为索引页面的一部分,我希望有一个搜索框,让商店经理通过购买用户名搜索购买。

我不清楚如何获取购买服务不包含的数据-例如:用户的全名。当试图做更复杂的事情时,问题变得更糟,比如通过购买用户名进行搜索购买。

我认为我可以通过在两个服务之间同步用户来解决这个问题,方法是广播一些关于用户创建的事件(并且只在购买服务端保存相关的用户属性)。在我看来,这远远不是理想的。当你有数百万用户的时候,你怎么处理这个问题呢?您会在每个使用用户数据的服务中创建数百万条记录吗?

另一个明显的选择是在用户服务端公开一个API,它根据给定的ids返回用户详细信息。这意味着在Purchase Service中加载的每个页面,我都必须调用Users Service来获得正确的用户名。不是很理想,但我可以接受。

如何实现基于用户名的购买搜索?我总是可以在Users Service端公开另一个接收查询条件的API端点,对Users Service中的用户名执行文本搜索,然后返回符合条件的所有用户详细信息。在购买服务中,将相关in映射回正确的名称,并在页面中显示它们。这种方法也不是很理想。

我是不是遗漏了什么?有没有其他方法来实现上面的方法呢?也许我面临这个问题的事实是一种代码的味道?希望听到其他的解决方案。

EN

回答 2

Stack Overflow用户

发布于 2015-04-06 03:55:14

将适当的数据保存在不同的数据库中是完全可以的,这就是所谓的Polyglot Persistence。是,您希望将用户数据和购买数据分开保存,并使用消息队列进行同步。数百万用户在我看来很好,这是可伸缩性,而不是设计问题;-)

在搜索的情况下-你可能想搜索不仅仅是用户名,对吧?因此,如果您使用消息队列在服务之间更新数据,您还可以轻松地将此数据路由到ElasticSearch。从ElasticSearch的角度来看,索引哪个字段并不重要-用户名还是产品名称。

票数 4
EN

Stack Overflow用户

发布于 2016-04-22 21:22:26

我通常使用这两种方法。有时,我有另一个服务,它位于x个其他服务之上,并组合数据。我真的不喜欢这种方法,因为它会导致服务之间的依赖和耦合。因此,总的来说,在我的上一个项目中,我们试图坚持多语言持久性。

还要考虑一下,如果你需要在某种中间件服务中有x个子http请求来组合数据,这将导致更高的延迟。我们总是试图减少一个任务的请求量,并通过异步队列处理所有可能的事情。(尤其是数据同步)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29460485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档