为了处理微服务体系结构,它经常和一个反向代理(如nginx或apache httpd)一起使用,并且为了交叉关注使用API网关模式 。 有时候,反向代理会完成API网关的工作。
看到这两种方法之间的明显差异将是很好的。 看起来API网关使用的潜在好处是调用多个微服务并汇总结果。 API网关的所有其他职责都可以使用反向代理来实现,例如:
所以基于这个有几个问题:
如果你意识到它们并不相互排斥,那么考虑它们会更容易。 将API网关看作是特定类型的反向代理实现。
关于你的问题,看到这两者并用,API网关被视为一个位于反向代理之后的应用程序层,以进行负载平衡和运行状况检查,这并不罕见。 一个例子就像WAF三明治体系结构一样,Web应用程序防火墙/ API网关夹在反向代理层之间,一个用于WAF本身,另一个用于与其交谈的单个微服务。
关于差异,他们非常相似。 这只是命名。 当你进行一个基本的反向代理设置,并开始在认证,速率限制,动态配置更新和服务发现等更多部分上进行连接时,人们更可能称之为API网关。
我相信,API Gateway是一个反向代理,可以通过API动态配置,也可以通过UI动态配置,而传统的反向代理(如Nginx,HAProxy或Apache)通过配置文件配置,并且在配置更改时必须重新启动。 因此,当路由规则或其他配置经常改变时,应该使用API网关。 对你的问题:
另外,API网关通常以SAAS的形式提供,例如Apigee或Tyk 。
另外,这里是我的教程,介绍如何使用Node.js创建一个简单的API网关https://memz.co/api-gateway-microservices-docker-node-js/
希望能帮助到你。
就个人而言,我经常发现API网关是一种反模式。
我通常会推荐采用反向代理优先的方法,并建议在每个服务上实现JWT认证,并在CDN端处理速率限制,虽然DDoS防护当然是昂贵的。
API网关是有好处的,当然也有一些你提到的。 我会添加这些:
一般来说,我建议使用反向代理作为默认方法 – 这应该是半自动的 – 开发人员应该始终能够将任何服务标记为仅在群集内可访问。
另外,我建议仅在需要时才制作API网关,并根据业务领域接缝创建单独的网关。
另外,如果你还没有使用Kubernetes,那么你正在设法解决各种麻烦。