2016-03-02 380 views
35

为了处理微服务体系结构,它经常与反向代理(例如nginx或apache httpd)一起使用,以及用于横切关注实现API gateway pattern is used。有时候,反向代理会执行API网关的工作。
很高兴看到这两种方法之间的明显差异。 它看起来像API网关使用的潜在好处是调用多个微服务并聚合结果。 API网关的所有其他responsibilities可以使用反向Proxy.Such为实现:API网关与反向代理

  • 认证(可以使用nginx的LUA脚本完成);
  • 运输安全。它本身就是反向代理任务;
  • 负载均衡
  • ....

所以在此基础上有几个问题:

  1. 是否有意义使用的API网关和同时放反向代理(如实例请求 - > Api网关 - >反向代理(nginx) - >具体mictoservice)?在什么情况下?
  2. 使用API​​网关可以实现哪些其他差异,无法通过反向代理实现,反之亦然?

回答

32

如果你意识到它们并不相互排斥,那么考虑它们会更容易。将API网关看作是特定类型的反向代理实现。

关于您的问题,将API网关视为位于反向代理后面的应用程序层进行负载平衡和运行状况检查时,并不罕见。一个例子就像WAF三明治体系结构一样,您的Web应用程序防火墙/ API网关夹在反向代理层之间,一个用于WAF本身,另一个用于与它交谈的单个微服务。

关于差异,它们非常相似。这只是命名。当你进行一个基本的反向代理设置,并开始在认证,速率限制,动态配置更新和服务发现等更多部分上进行连接时,人们更可能称之为API网关。

+0

纠正我,如果我错了,但我可以在同一个生态系统中使用。使用API​​网关更多的是协调对仪表板监视和安全约束添加的动态和常量更改,使用像nginx这样的反向代理可以更有效地服务静态和固定子域,从而为实例提供负载均衡。 – aelkz

12

我相信,API网关是可被配置成动态地经由API和潜在经由UI的反向代理,而传统的反向代理(喜欢的Nginx,HAProxy的或Apache)经由配置文件配置并且必须被当重新启动配置更改。因此,当路由规则或其他配置经常改变时,应使用API​​网关。你的问题:

  1. 只要在这个序列中的每个组件都符合其目的,这是有道理的。
  2. 差异不在功能列表中,而是以应用配置更改的方式进行。

另外,API网关通常以SAAS的形式提供,例如ApigeeTyk

而且,这里是我的关于如何创建一个简单的API网关与Node.js的https://memz.co/api-gateway-microservices-docker-node-js/

希望它可以帮助教程。