【发布时间】:2016-07-30 21:37:13
【问题描述】:
我从事微服务架构工作,我想解决一个小的数据共享问题(我不知道这个词是否正确)。
例子:
我有一个用户服务,是存储电子邮件、用户名、密码的数据库...
我有另一个服务和他的数据库,它使用用户数据来生成包含用户信息的文档。
第二种服务访问用户数据的最佳方式是什么?为她在数据库中复制用户数据(如果他的工作需要)?
【问题讨论】:
标签: database-design architecture microservices
我从事微服务架构工作,我想解决一个小的数据共享问题(我不知道这个词是否正确)。
例子:
我有一个用户服务,是存储电子邮件、用户名、密码的数据库...
我有另一个服务和他的数据库,它使用用户数据来生成包含用户信息的文档。
第二种服务访问用户数据的最佳方式是什么?为她在数据库中复制用户数据(如果他的工作需要)?
【问题讨论】:
标签: database-design architecture microservices
我不知道整个系统的设计,但我会让用户微服务在创建、更新或删除用户时发送一个事件。对此事件感兴趣的所有其他微服务都可以提取他们需要的必要用户数据。
使用微服务无法避免冗余数据,但每个微服务对数据有不同的看法。
您的用户微服务可能会将用户更多地视为具有完整用户数据(例如 ID、密码、名字、姓氏、电子邮件、地址、组织等)的身份 另一方面,您的文档生成微服务可能会将用户视为文档的接收者,并且不需要所有用户数据。
【讨论】:
警告顾问的回答是“视情况而定”。每个人对什么是微服务都有不同的描述,但对我来说,它们是可以独立部署的小型服务,可以很好地完成一件事(我通常订阅fowlers definition of microsevices)。
实际上,只要微服务在相同的“服务”边界内,我对微服务共享存储(无论是数据库、blob 存储等)都没有问题。我所说的服务边界是小型服务的逻辑分组,所有这些服务协作以实现某些目标或业务能力。对我来说,从团队外部来看,这种逻辑分组形成了“服务”。一项服务“用户服务”通常由许多小型微服务组成。
例如,您可能有一个由许多微服务组成的“用户”服务。一种用于从网站捕获兴趣并将其存储在数据库中,一种用于网站处理地址更改,一种用于运行定时作业并向系统中的其他服务发出事件。
但您不希望文档生成(报告服务?)从用户数据库读取和写入,在这种情况下(如 Stavreva 所说)服务之间的事件通信将是可行的方法。
只有具备业务领域知识的您才能决定两个微服务是否属于同一个服务,一个技巧是查看微服务所贡献的业务能力。
【讨论】: