我有无法解决的概念/设计问题。我将尝试在体育术语示例中解释它,但当然同样的问题可以应用于电子商店或任何其他系统。
我想用 API 构建 2 个“独立”微服务来执行所需的操作。服务 A 将处理球员管理,服务 B 将处理球队管理。
在 Service AI 中,例如可以执行球员训练、购买球员物品、设置球员外观等。在 Service BI 中,例如可以设置团队战术、雇用团队工作人员、设置团队外观(徽标、颜色)等。
我已经阅读了许多关于微服务的文章和主题,并在一篇文章中写道:“......关于微服务最难的部分 = 你的数据......”
我的问题来了。我应该如何以及在哪里存储玩家和团队之间的关系(将 TeamPlayer 表想象为包含 player_id、team_id 列的简单关系表)?所以这些是我的担忧:
- 表 TeamPlayer 应该是微服务 A 还是 B 的一部分?或者两个微服务应该共享同一个数据库?
- 如果它将是独立数据库,并且如果我决定微服务 B 将存储此关系,我如何验证该播放器是否存在?如果有人给我发送了错误的玩家标识符怎么办?还是我需要关心?我是否需要验证玩家是否存在或者这不是微服务 B 的问题?当然,微服务 B 知道团队,所以当提供错误的团队标识符时我可以返回错误。我不想从微服务 B 调用微服务 A,因为那样我会将它们紧密结合在一起,并依赖从微服务 B 到微服务 A。
- 如果它将是独立数据库,我将如何读取数据?想象一下,在 UI 中,我想要团队中的球员姓名列表。微服务 B 知道团队,只是关系和微服务 A 知道名称。我是否需要至少拨打两次电话才能收集数据?
- 如果是共享数据库,微服务B可以直接从数据库中读取玩家的一些数据吗?我可以想象在某些情况下,由于某些访问权限等原因而不允许这样做,但是所有这些业务逻辑都构建在微服务 A API 中,该 API 通常读取并返回有关播放器的数据。
如何以最好的方式解决这个问题?API网关是答案还是如何以最佳方式做到这一点?
我希望能弄清楚我的担忧是什么:)