Mik*_* S. 26 architecture web-services microservices
考虑以下针对在线商店项目的微服务:
用户服务保存有关商店用户的帐户数据(包括名字,姓氏,电子邮件地址等)
采购服务会跟踪用户购买的详细信息.
每项服务都提供用于查看和管理其相关实体的UI.购买服务索引页面列出了购买.每个购买项目应包含以下字段:
id,购买用户的全名,购买的商品标题和价格.
此外,作为索引页面的一部分,我想有一个搜索框让商店经理通过购买用户名来搜索购买.
我不清楚如何获取采购服务不具备的数据 - 例如:用户的全名.当尝试通过购买用户名来执行更复杂的搜索购买时,问题会变得更糟.
我想通过在用户创建时广播某种事件(并且只保存购买服务端的相关用户属性),我可以通过在两个服务之间同步用户来解决这个问题.从我的角度来看,这远非理想.当你有数百万用户时,你如何处理这个问题?你会在每个消费用户数据的服务中创建数百万条记录吗?
另一个明显的选择是在用户服务端公开API,它根据给定的ID返回用户详细信息.这意味着购买服务中的每个页面加载,我都必须调用用户服务才能获得正确的用户名.不理想,但我可以忍受它.
如何根据用户名实施购买搜索?我总是可以在Users Service端公开另一个API端点,它接收查询项,在Users Service中对用户名执行文本搜索,然后返回符合条件的所有用户详细信息.在采购服务中,将相关的ID映射回正确的名称并在页面中显示它们.这种方法也不理想.
我错过了什么吗?有没有其他方法来实现上述?也许我面临这个问题的事实是一种代码味道?我很乐意听到其他解决方案.
Rot*_*mon 14
在进入微服务时,这似乎是一个非常普遍和核心的问题.我希望有一个很好的答案:-)
关于这里已经提到的建议模式,我将使用术语数据非规范化而不是多语言持久性,因为它不一定需要在不同的持久性技术中.关键是每个服务都处理自己的数据.是的,你有数据重复,你通常需要某种事件总线来跨服务共享数据.
还有另一种选择,它是第一种选择 - 将搜索本身作为一个单独的服务.
因此,在您的示例中,您拥有用于管理用户的用户服务.购买服务管理购买.每个都处理自己的数据,只处理它需要的数据(例如,购买服务并不真正需要用户名,只需要ID).并且您有第三项服务 - 搜索服务 - 消耗其他服务产生的数据,并从组合数据创建搜索"视图".
| 归档时间: |
|
| 查看次数: |
8282 次 |
| 最近记录: |