API网关
分享
输入“/”快速插入内容
API网关
1.
网关的定义
微服务背景下,一个系统被拆分为多个服务,像安全认证、流量控制、日志、监控等功能是每个服务都需要,若没有网关,我们需要在每个服务中单独实现,这使我们做了很多重复的事情却没有一个全局的视图来管理这些功能
网关主要做两件事:
请求转发
+
请求过滤
引入网关后,会多一步网络转发,因此性能会有一点影响,我们需要保障网络服务的高可用,避免单点风险
网关服务外层通过Nginx进行负载转发以达到高可用
2.
网关的功能
绝大部分网络可以提供以下功能
•
请求转发:将请求转发到目标微服务
•
负载均衡:根据各个微服务实例的负载情况或者具体的负载均衡策略配置对请求实现动态负载均衡
•
安全认证:对用户请求进行身份验证并仅允许可信客户端访问API,并且还能够使用类似RBAC等方式来授权
•
参数校验:支持参数映射与校验逻辑
•
日志记录:记录所有请求的行为日志供后续使用
•
监控告警:从业务指标、机器指标、JVM指标等方面机械能监控并提供配套的告警机制
•
流量控制:对请求的流量进行控制,限制某一时刻内的请求数
•
熔断降级:实时监控请求的统计信息,达到配置的失败阈值后,自动熔断,返回默认值
•
响应缓冲:当用户请求获取的是一些静态或更新不频繁的数据时,一段时间内多次请求获取到的数据很可能时一样的。对于这种情况可以将响应缓冲起来。这样用户请求可以直接在网关层得到响应数据,无需再去访问业务服务,减轻业务服务的负担
•
响应聚合:某些情况下用户请求要获取的响应内容可能会来自多个业务服务,网关作为业务服务的调用方,可以把多个服务的响应整合起来,再一并返回给用户
•
灰度发布:将请求动态分流到不同的服务版本(最基本的一种灰度发布)
•
异常处理:对于业务服务返回的异常响应,可在网关层在返回给用户前做转换处理,把一些业务侧返回的异常细节隐藏,转换成用户友好的错误提示返回
•
API文档:如果计划将API暴露给组织以外的开发人员,那么必须考虑使用API文档,例如Swagger、OpenAPI
•
协议转换:通过协议转换整合后台基于REST、AMQP、Dubbo等不同风格和实现技术的微服务,面向Web Mobile、开放平台等特定客户端提供统一服务
•
证书管理:将SSL证书部署到API网关,由统一的入口管理接口,降低了证书更换时的复杂度
3.
常见的网关系统
3.1
Netflix Zuul
Zuuk是Netflix开发的一款提供动态路由、监控、弹性、安全的网关服务,基于Java技术栈开发,可以和Eureka、Ribbon、Hystrix等组件配合使用