我实际上在研究微服务,我面临一个问题。
上下文
我正在开发两个微服务:
/planning/{day}/{userId}或/planning/{startDate}/{endDate}/{idUser}
问题
>
我该怎么做才能只允许通过用户服务访问规划信息,而不耦合这两个服务?知道以后可以从其他地方访问规划服务,但不是现在。
如何从MySQL数据库中访问用户对应的帐单服务的帐单信息?我知道微服务是不耦合的,这一点让我很难受,因为它必须以某种方式耦合,不是吗?比如在帐单中引用iduser
?否则,我如何知道我应该公开API中的哪一个帐单?更确切地说,微服务如何在它们之间进行通信,而不需要耦合?
如何创建身份验证,而不重复来自其他服务的身份验证服务的身份验证请求?
另一种方法可以是构建另一个微服务,通过身份验证/授权来保护对其他服务的访问。这与API网关模式有关,更多信息请访问:http://microservices.io/patterns/apigateway.html。基本上,您的系统只有一个入口点,您可以使用oauth或json web令牌来处理客户机身份验证。
微服务之间的安全访问也可以通过http请求上的附加头和令牌(一种“内部”身份验证)来实现。
在我看来,微服务不应该承担这个责任,因为您可能必须在应用程序中共享/复制身份验证逻辑。
另外,将ID作为“外键”共享是解耦相关数据的好方法。
这里需要认识到的重要一点是,当涉及到实现用户身份验证、用户授权和用户会话管理解决方案时,微服务体系结构的解决方案与任何其他形式的分布式系统体系结构的解决方案在概念上没有显著区别。
从概念上讲,该解决方案将是Kerberos协议的实现,通过传递“票证”(或今天更常用的“令牌”)的概念来建立用户的身份。
因此,在您的情况下,您的用户管理服务将充当后端身份验证和授权服务器,所有其他服务都需要知道这一点。您的用户管理服务将负责颁发和验证用户令牌,以建立用户的身份和角色。
我该怎么做才能只允许通过用户服务访问规划信息,而不需要将两个服务耦合在一起?
当用户试图访问您的.NET服务时,您的服务将不得不依赖您的用户管理服务来建立用户的身份。换句话说,您的.NET服务将需要知道您的用户管理服务在哪里(即它的URL)。您可以利用诸如etcd或NAT之类的工具将用户管理服务的位置传播到生态系统的其他部分,而不需要将微服务耦合到它。
如何从Mysql数据库中访问与用户对应的帐单服务的帐单信息?
最简单的解决方案是传入(单?)键(例如用户ID)作为计费服务URL中的查询参数。当然,您的计费服务必须以这样一种方式实现,即期望密钥被附加到URL。如果您需要包含额外的键(例如,帐单日期、订单状态等),也许您可以使用memcached或redis之类的东西在运行时存储这些信息。当然,现在您必须考虑将这些单点故障添加到您的生态系统中的权衡:-)
如何创建身份验证,而不重复来自其他服务的身份验证服务的身份验证请求?
同样,一旦用户通过身份验证,其所有身份信息都可以存储在memcached或redis中,以避免重复身份验证和授权过程。
null null
我正在使用microservies Architect学习API。下面是关于设置的小描述 我有两个微服务应用程序和API网关 包括API网关在内的所有应用程序都是NodeJS-Express app。 Auth Logic-JWT,在API网关上处理 使用http-proxy将每个传入的API网关请求传递给每个微服务应用程序。 还将用户信息作为代理头传递。 客户端请求流: 客户端使用JWT令牌从m
“在微服务之间添加的同步依赖关系越多,例如查询请求,客户端应用程序的总体响应时间就越差。 “这是真的吗?我认为在同步通信中,我们比异步通信更直接地得到反馈。例如,假设一个用户向微服务a发送http请求,微服务a又异步地向另一个微服务B发送请求,并异步地等待它的答复。如果微服务B关闭,那么用户将等待到超时才能得到响应,而在同步通信中,他将立即得到响应。
基本 Nest 微服务是一种使用与HTTP不同的传输层的应用程序。 安装 首先,我们需要安装所需的软件包: $ npm i --save @nestjs/microservices 概述 通常,Nest支持一系列内置的传输器。它们基于 请求-响应 范式,整个通信逻辑隐藏在抽象层之后。多亏了这一点,您可以轻松地在传输器之间切换,而无需更改任何代码行。我们不支持具有基于日志的持久性的流平台,例如 Ka
我在微服务之间的通信上遇到了麻烦。我有许多spring boot应用程序,它们之间有许多请求HTTP和AMQP(RabbitMQ)。在本地(在dev中),我使用没有Docker图像的Eureka(Netflix Oss)。