【发布时间】:2015-06-10 05:08:01
【问题描述】:
考虑以下用于在线商店项目的微服务:
用户服务保留有关商店用户的帐户数据(包括名字、姓氏、电子邮件地址等)
Purchase Service 跟踪有关用户购买的详细信息。
每个服务都提供一个 UI,用于查看和管理其相关实体。
购买服务索引页面列出了购买。每个采购项目应具有以下字段:
id、购买用户全名、购买商品名称和价格。
此外,作为索引页面的一部分,我希望有一个搜索框,让商店经理通过购买用户名搜索购买。
我不清楚如何取回购买服务不保存的数据 - 例如:用户的全名。 当尝试通过购买用户名进行搜索购买等更复杂的事情时,问题会变得更糟。
我想我显然可以通过在用户创建时广播某种事件(并在购买服务端仅保存相关的用户属性)在两个服务之间同步用户来解决这个问题。在我看来,这远非理想。当您拥有数百万用户时,您如何处理这个问题?您会在每个使用用户数据的服务中创建数百万条记录吗?
另一个明显的选择是在用户服务端公开一个 API,它可以根据给定的 id 返回用户详细信息。这意味着购买服务中的每个页面加载,我都必须调用用户服务以获得正确的用户名。不理想,但我可以忍受。
如何实现基于用户名的购买搜索?好吧,我总是可以在接收查询词的用户服务端公开另一个 API 端点,对用户服务中的用户名执行文本搜索,然后返回所有符合条件的用户详细信息。在购买服务中,将相关 id 映射回正确的名称并在页面中显示它们。这种方法也不理想。
我错过了什么吗?是否有另一种实现上述方法的方法?也许我面临这个问题的事实有点代码味道?很想听听其他解决方案。
【问题讨论】:
-
我对这个问题有点困惑。字体端应用程序应该与服务分开。您应该能够在不更改服务的情况下更改前端应用程序。对于购买屏幕,应调用购买服务和用户服务来获取屏幕数据。或者,可以在服务前面放置一个单独的 api,它将调用这两个服务,然后将数据返回到屏幕。看一下图表here,它显示了它应该如何工作。
-
这里是 API 模式:microservices.io/patterns/apigateway.html
标签: web-services architecture microservices