用户服务保存有关商店用户的帐户数据(包括名字,姓氏,电子邮件地址等)
采购服务跟踪用户购买的细节.
每个服务都提供了一个用于查看和管理相关实体的UI.
采购服务索引页面列出了采购.每个购买项目应具有以下字段:
id,采购用户的全名,购买的商品标题和价格.
此外,作为索引页面的一部分,我想有一个搜索框让商店经理通过购买用户名搜索购买.
我不清楚如何收回采购服务所不具备的数据,例如:用户的全名.
当尝试通过购买用户名进行更多复杂的事情,如搜索购买时,问题变得更糟.
我想通过在用户创建之间广播某种事件(并且仅在采购服务端保存相关的用户属性),我可以明显地通过同步两个服务之间的用户来解决这个问题.这在我看来远非理想.当您有数百万用户时,您如何处理?您将在每个消耗用户数据的服务中创建数百万条记录?
另一个显而易见的选择是在用户服务端暴露一个API,它会根据给定的ID带回用户的详细信息.这意味着在采购服务中加载每一页,我必须打电话给用户服务才能获得正确的用户名.不理想,但我可以和它一起生活.
如何根据用户名实施购买搜索?那么我可以随时在用户服务端收到另一个API端点,该端点接收到查询项,对用户服务中的用户名进行文本搜索,然后返回与条件匹配的所有用户详细信息.在采购服务中,将相关的ID重新映射到正确的名称,并将其显示在页面中.这种做法也不理想.
解决方法
关于这里已经提到的建议模式,我将使用术语Data Decormalization而不是Polyglot Persistence,因为它不一定需要使用不同的持久性技术.关键是每个服务都处理自己的数据.是的,您有数据重复,您通常需要某种事件总线来跨服务共享数据.
还有另一种选择,这是一种首选 – 将搜索本身作为单独的服务.
所以在您的示例中,您有用于管理用户的用户服务.采购服务管理采购.每个都处理自己的数据,并且只处理它所需要的数据(因此,例如,采购服务并不真正需要用户名,只有ID).而且,您有第三个服务 – 搜索服务 – 消费其他服务生成的数据,并从组合数据创建搜索“视图”.