什么是API
什么是API网关
服务治理经过微服务改造,会出现一定数量的服务,他们之间的访问不是单纯的直线链路,横向纵向的服务改造方式使得服务访问呈现了网状结构,为了解决这种复杂的访问逻辑,在访问者和被访问者之间,搭建一层网关进行权限控制,即API网关。
API网关作为一个微服务组件,它在微服务架构中充当客户端和后端服务之间的中介,是微服务架构的流量入口。即在微服务架构中,API网关提供了一个统一的访问点,用于访问多个API,简化了客户端代码并降低了整个系统的复杂性。此外API网关还提供了一些管理和保护API的功能,如身份验证、授权、限速和缓存等。
API网关的功能
早期的API网关主要作为反向代理,即将客户端的请求路由到适当的后端服务,并将响应返回给客户端。而随着微服务框架的发展,API在生命周期内的安全性,可观测,可分析性越来越受重视,API网关陆陆续续开始支持身份验证,鉴权,授权,限速,缓存等这些有助于管理和保护后端服务的功能。发展到云原生时代, 赋予API网关的功能也越来越多:
-
易于部署和扩展:可以轻松地部署在容器化环境中,并与其他云原生组件(如服务网格)集成,可以自动伸缩以满足不断变化的负载需求。
-
微服务友好:支持服务发现(例如dns,k8s, consul等)、负载均衡和故障转移等功能。这使得它们能够更好地管理和路由微服务之间的通信。
-
高性能:通常具有高性能和低延迟,这对于处理大量API请求和提供快速响应至关重要。
-
安全性:支持各种安全功能,如身份验证、授权、API密钥管理和限速,熔断,黑白名单等,以保护后端服务免受恶意访问和攻击。
-
可观测性:支持集成监控、日志记录和追踪工具,以提供对API请求和性能的实时洞察。这有助于识别和解决潜在的问题,以确保系统的稳定性和可靠性。
-
灵活性:支持多种协议和数据格式,如REST、gRPC和GraphQL,以满足不同应用程序的需求。此外,还可以通过插件和扩展来增强功能,以适应特定的业务场景。
-
开源和生态系统:许多云原生API网关是开源的,这意味着开发人员可以查看和修改其源代码,以满足自己的需求。此外,云原生API网关通常与广泛的开源工具和平台集成,以支持持续集成和持续部署(CI/CD)等工作流程。
API网关产品
以下是一些常见的API网关产品:
网关产品 |
产品定位 |
Spring Cloud Gateway |
传统微服务网关,完善SpringCloud生态,替代原Zuul 1.0网关,基于Java Filter扩展。 |
Zuul |
传统微服务网关,是 Netflix 开源的微服务网关,Spring Cloud Netflix 全家桶之一; |
APISIX |
是一个基于 OpenResty 和 etcd 实现的云原生、高性能、可扩展的微服务 API 网关。APISIX 通过插件机制,提供动态负载平衡、身份验证、限流限速、配置和插件热更新等功能,并且支持插件开发(插件可使用 Go/Python/Java 编写)。 |
Nginx |
传统的流量网关,以稳定性与高性能著称,采用Reload机制更新配置。 |
Traefik |
安全、可扩展的微服务API网关,提供Golang扩展机制。 |
Kong |
是一款基于 OpenResty(Nginx + Lua 模块)编写的高可用、易扩展的,由 Mashape 公司开源的 API Gateway 项目。Kong 通过插件(插件使用 Lua 编写)的形式提供负载均衡,日志记录,身份验证,速率限制,转换等功能。支持扩展功能,模块化,运行在任何基础设施上 |
gloo |
是一个基于 Envoy 的 Kubernetes 原生入口控制器和下一代 API 网关。Gloo 在函数级路由方面表现卓越,支持传统应用程序、微服务与 Serverless(Gloo 被选为 Knative 项目的首选 ingress 项目)。Gloo 设计独特,可支持混合应用,其中的多种技术、架构、协议和云可共存; |
tyk |
是一款基于 Golang 和 Redis 构建的开源 API 网关,拥有丰富的功能集和漂亮的 Web-UI 仪表板,但是文档和资料较少,对商业用途不是很友好; |
AWS API Gateway |
AWS API Gateway是亚马逊云服务(AWS)的一种托管式API网关,支持RESTful和WebSocket API。它提供了丰富的功能,如身份验证、授权、限速、监控和日志记录等 |