我正在寻求一个设计问题的答案,我在这个问题上没有找到任何文献的答案。请允许我解释用例,我的解决方案,并征求您作为主题专家的意见。在微服务之间共享数据
用例: 我们有几个微服务,都返回来自不同业务领域的某种形式的内容。我们使用Spring Cloud Netflix,因此网关服务将流量路由到内容服务。这些服务中的一部分(如果不是全部)需要从请求派生的数据,并且是不可变的。一个简单的例子是语言环境,但也有其他专有信息。
解决方案: 我目前获得的共享数据的网关服务,并在NoSQL的数据库具有独特的键作为持续JSON。然后,我在将请求路由之前将该密钥添加为请求标头。我有一个内容服务在构建时包含的共享库,它包含一个Spring bean,它从请求头中读取密钥,使用密钥读取存储的数据并初始化它自己。这使得内容服务可以在不知道底层机制的情况下访问共享数据(通过简单地注入前面提到的bean)。 如果内容服务调用另一个内容服务,它负责将唯一密钥添加为请求标头。
辩论: 我与同事们的辩论是,为此目的使用共享数据存储是否合适。我认为服务将域特定的数据泄漏给其他服务是不好的,但是所讨论的数据并不是域特定的,所以拥有共享数据库并传递密钥没有任何问题。另一种方法是通过所有我认为是多余的共享数据。
你的想法是什么?
编辑:我看到有人投来关闭的问题。除非他们能够指出我讨论微服务之间数据共享的参考,否则这种警务是妨碍有意义讨论的障碍。并非每个问题都是布尔型的是/否答案,有些则需要更深入的思考。
我想说一个服务应该拥有和管理数据存储。数据存储本身不应该共享。 – duffymo
@duffymo数据认证的结果呢?你认为每个服务应该解析一个JWT令牌来提取相同的信息,或者它应该被完成一次并存储以备后用?我为共享数据创建抽象没有任何问题,这就是我的问题中的Spring bean正在做的事情。 –
我相信VTC与这张贴在StackOverflow上相关。 [Programmers SE]的设计参数[更适合](http://meta.stackexchange.com/questions/124867/where-should-i-ask-software-architecture-design-questions)(http://程序员.stackexchange.com /)。 – Mitch