我是微服务架构的新手,我正面临这个问题:
我有一个平台,基本上用户可以管理其客户的帐户。
我有一个微服务负责安全性。这个管理哪些用户有权访问哪些客户端。
然后,我还有另一个微服务可以管理客户的发票。 这里的功能之一是:给用户登录后,列出该用户有权访问的所有客户的所有发票。
为此,我认为我应该请安全微服务向我提供用户有权访问的客户端列表。然后,我进入“发票”数据库并进行查询,并按所有这些客户进行过滤。
问题是我最终遇到了一个可怕的查询,因为它就像:
选择*从发票上的clientId IN(CLI1,CLI2,CLI3等)中-可能有200个客户端
我想在发票数据库中保留用户-客户关系的副本。或者让两个微服务共享同一个数据库。但是没有一个使我信服,因为我有更多的微服务可能面临相同的问题,从而导致数据的大量重复或庞大的整体数据库。
有更好的方法吗?
谢谢!
答案 0 :(得分:0)
通常,跨服务的数据库访问受到限制,并且保留不属于您的信息的过程往往很麻烦,因为您将一直在努力将这些数据与其预期的真实来源同步。
因此,您唯一的选择就是问题中已经提到的内容。
您最终得到一个可怕的查询。
但是当您编写它时会感到恐怖吗?还是会落后于性能?
这取决于,是的,如果您使用的是MySQL,则始终可以通过子查询执行联接
但是联接要有自己的成本。
甚至在这种情况下检查子查询是否能为您带来预期的性能也是可以的。
如果可行,您可以探索其他可以针对此类查询进行优化的数据库。
或者在最坏的情况下,您可以复制数据,但必须付出很多努力以确保它们保持同步。
大多数选择都不是直截了当的,您需要权衡取舍。