在微服务架构的情况下,有一堆服务构建在不同的堆栈上,并且彼此之间以及通过REST与客户端进行通信。
所以我要的是使该网关成为来自客户端或使用者weights
的单个入口点,这将根据我们了解的api-的目的将请求重定向到基于端点的相应服务。网关。
嗯,像e.g api.domain.com
或nginx-plus
这样的负载均衡器可以简单地平衡负载并传递代理。但是我的期望HAProxy
如下:
(mostly about authentication-authorization based)
并将其存储到客户端应用中。进一步来说,每个请求客户端都会将此令牌作为授权发送给JWT或基于令牌的身份验证。(minimal e.g user_id as payload)
之前,将解码该小auth_token并将与相关用户一起制作另一个授权令牌Gateway-service
的所有信息(通过小令牌解码的有效负载查询)将作为授权传递给实际服务和内部服务之间的通话,将在其中服务内容。(let's say Big Token)
和有效载荷将在Big-Token
中存储一段时间,以减少每次都获取用户信息的api调用。我不确定redis
或nginx-plus
能否实现,可能是否!,因为我们很少有数据库查询,api调用和缓存到redis等内容。 HAproxy
或nginx
或类似的东西是不可能的。
我为HAProxy
找到了两个用于传递代理Node-HTTP-Proxy和Express-Gateway的服务,这两个服务仅用于expressjs api服务,但是这里我使用的是多语言框架或语言。
注意:这里的服务是使用python flask,Django和ExpressJS构建的,其中很少托管在Unix VM中,其中使用nginx作为负载均衡器,而很少托管在Azure应用服务中,它们使用IIS作为负载均衡器。
感谢您的阅读和理解,如果您可以提出建议或推荐任何东西,那就太好了。
答案 0 :(得分:1)
我建议您检查一下大使-Display a decimal in scientific notation-听起来很适合您的需求。拥有大量支持和广泛社区的另一个可靠选择是Kong-https://www.getambassador.io。其他选择是https://konghq.com,Nginx和Loopback。
答案 1 :(得分:1)
我实际上会推荐Node-HTTP-Proxy。
您可以为api.domain.com
使用可以使用Node-HTTP-Proxy的节点服务器。它可以用于消费微服务,例如。 serviceone.com
和servicetwo.com
。只要您将它们公开为REST / SOAP api,它就不会在意您用于构建此微服务的内容(例如python flask,Django和ExpressJS)。
假设您有一些端点,例如serviceone.com/rone
和servicetwo.com/rtwo
,
您可以向api.domain.com/rone
或api.domain.com/rtwo
发出请求,您的自定义代理服务器将使用Node-HTTP-Proxy并将请求发送到serviceone.com/rone
或servicetwo.com/rtwo
。您可以从请求读取标头并对其进行处理,并在将请求发送到微服务之前更改标头。这将解决您的身份验证问题。您可以在此处使用redis和缓存。
对我来说很好。希望对您有所帮助。
答案 2 :(得分:0)
对于您提到的用例,我建议使用Kong:
对于您提到的特定身份验证方式,您将需要使用Lua编写插件。 Kong有很多内置的身份验证支持,但是您的要求有所不同。
Kong将所有数据(包括使用者)存储在内存中。因此,您无需实现其他基于Redis的解决方案。拥有新用户后,您需要使用该用户的admin API将其添加为Kong的用户。
Kong具有负载平衡支持。而且由于它是基于Nginx构建的,因此您还可以根据需要配置核心Nginx。
对于网关级别的请求缓存,Kong有一个企业版插件。也有一些开源社区构建的插件。
关于自定义身份验证,您应该三思而后行为什么需要两个级别的身份验证。在网关级别,您可以验证和使用ACL,基础服务可以信任即将到来的请求。您可能需要实现服务级别中间件来识别Kong所经过的用户,以进行资源级别授权。
一个警告:与Kong一起工作时,我觉得有必要进行适当的彻底记录。