【发布时间】:2020-02-25 13:51:13
【问题描述】:
我有一个执行以下逻辑的单片应用程序:
Get a list A (Customer) from database
Validate data in A using some criteria, if it's not validated, throw an error
Do some operations on A to get a list B (e.g. Regional customers)
Do sth with B
现在我正在使用微服务改造我的应用,但在设计调用时遇到了麻烦。
由于 B 可以完全从 A 推导出来,我只想创建一个返回所有数据集 A 的微服务 getCustomerA。这意味着需要单个数据库访问。这将是一个性能优势。
但问题是,在 A 上检索列表 B 的操作也是 业务代码的一部分。所以把这些代码放在客户微服务端更符合逻辑,如果我们遵循领域驱动设计,在微服务Customer,也许getRegionalCustomer。
所以我想知道,在这种情况下,最佳做法是什么?我们应该优先考虑单个数据库调用(第一种情况)还是最好进行两次调用(但在这种情况下,是 2 个数据库调用)?
【问题讨论】:
-
也许我在这里遗漏了一些细微差别,但我看到一个微服务在完成所有步骤(除了数据库,它当然是它自己的微服务)。
-
嗨,是的,也许我不清楚。验证必须在主应用端,因为它与其他域相关,我不能将其完全放在客户微服务中
-
想想你做的或将来可能做的所有用例。如果不先获得As就获得Bs没有意义,那么我认为您不需要将它们分开。但是,如果您想遵循 micro 服务的想法,那就拆分它们。对可以在单一应用程序中一次完成的事情进行多次调用可能看起来效率低下,但在我看来,简洁的设计更为重要。
-
从A得到B的逻辑是什么?也许你正在尝试做你的微服务太微了
标签: java api microservices