Nginx 如何以及应该使用哪种工具为polyglot微服务平台创建API网关?
在微服务体系结构的情况下,有一组服务构建在不同的堆栈上,并通过REST与彼此以及客户机进行通信 所以我要求的是,使该网关成为来自客户端或消费者Nginx 如何以及应该使用哪种工具为polyglot微服务平台创建API网关?,nginx,load-balancing,microservices,haproxy,api-gateway,Nginx,Load Balancing,Microservices,Haproxy,Api Gateway,在微服务体系结构的情况下,有一组服务构建在不同的堆栈上,并通过REST与彼此以及客户机进行通信 所以我要求的是,使该网关成为来自客户端或消费者的单个入口点,例如api.domain.com,它将根据端点将请求重定向到相应的服务,正如我们知道的api网关的用途一样 好吧,通过负载平衡器,如nginx plus或HAProxy简单地平衡负载和传递代理,这是可能的。但我的期望值(主要是基于身份验证的授权)如下: 消费者将使用凭据进行身份验证,服务器将返回小的访问令牌(最小值,例如用户id作为有效负载
的单个入口点,例如api.domain.com
,它将根据端点将请求重定向到相应的服务,正如我们知道的api网关的用途一样
好吧,通过负载平衡器,如nginx plus
或HAProxy
简单地平衡负载和传递代理,这是可能的。但我的期望值(主要是基于身份验证的授权)
如下:
- 消费者将使用凭据进行身份验证,服务器将返回小的访问令牌
,该令牌将存储到客户端应用程序中。此外,每个请求客户机都将以JWT或基于令牌的身份验证的方式发送此令牌作为授权(最小值,例如用户id作为有效负载)
- 在将请求传递给另一个服务之前,
将解码该小身份验证令牌,并生成另一个授权令牌网关服务
与相关用户一起提供所有信息(通过解码的小令牌有效负载进行查询)它将作为授权传递给实际服务,并作为内部服务传递给内容提供服务的服务调用(比方说大令牌)
- (网关服务生成)
和有效负载将在Big-Token
中存储一段时间,以减少每次获取用户信息的api调用redis
- 请求缓存和平衡负载
nginx plus
或HAproxy
实现,可能不行因为在那里,我们几乎没有数据库查询、api调用和缓存到redis等,这是nginx
或HAProxy
或类似的东西所无法做到的
我为Node.js/Express.js找到了两个用于传递代理的服务,这两个服务只用于expressjsapi服务,但这里我使用的是polyglot框架或语言
注意:这里的服务是用PythonFlask、Django和ExpressJS构建的,很少有服务托管在Unix虚拟机中,使用nginx作为负载平衡器,很少有服务托管在azure应用服务中,使用IIS作为负载平衡器
感谢您的阅读和理解,如果您能提出任何建议或任何建议,那将是非常棒的 我建议你去看看Ambasador——听起来它很适合你的需要。另一个有很多支持和庞大社区的可靠选择是香港。其他的选择有,和。我建议你去看看Ambasador——听起来它很适合你的需要。另一个有很多支持和庞大社区的可靠选择是香港。其他的选择是,和。我真的会推荐 您可以为
api.domain.com
使用可以使用的节点服务器。它可用于消费微服务,例如serviceone.com
和servicetwo.com
。只要您将这些微服务作为REST/SOAPAPI公开,它就不会关心您用来构建这些微服务的内容(例如python flask、Django和ExpressJS)
假设您有一些端点,如serviceone.com/rone
和servicetwo.com/rtwo
,
您可以向自定义代理服务器将使用的api.domain.com/rone
或api.domain.com/rtwo
请求,并将请求发送到serviceone.com/rone
或servicetwo.com/rtwo
。您可以从请求中读取标题,并对其进行处理,在将请求发送到micro services之前更改标题。这将解决您的身份验证问题。您可以在这里使用redis和缓存
对我来说很好。希望有帮助。我真的会推荐 您可以为
api.domain.com
使用可以使用的节点服务器。它可用于消费微服务,例如serviceone.com
和servicetwo.com
。只要您将这些微服务作为REST/SOAPAPI公开,它就不会关心您用来构建这些微服务的内容(例如python flask、Django和ExpressJS)
假设您有一些端点,如serviceone.com/rone
和servicetwo.com/rtwo
,
您可以向自定义代理服务器将使用的api.domain.com/rone
或api.domain.com/rtwo
请求,并将请求发送到serviceone.com/rone
或servicetwo.com/rtwo
。您可以从请求中读取标题,并对其进行处理,在将请求发送到micro services之前更改标题。这将解决您的身份验证问题。您可以在这里使用redis和缓存
对我来说很好。希望有帮助。对于您提到的用例,我建议您: