网关(Gateway)广义概念:
网关是一种充当转换重任的计算机系统或设备。使用在不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。
大家都知道,从一个房间走到另一个房间,必然要经过一扇门。同样,从一个网络向另一个网络发送信息,也必须经过一道“关口”,这道关口就是网关。
API网关:
API网关有时也叫应用网关、业务网关,是后台接口的统一入口,进入系统的所有请求都要经过API网关。
API网关工作在OSI七层协议中的最上层 --- 应用层。它的基本功能有:
第一,统一入口。对外提供一个统一的请求入口,调用方不再需要维护各个微服务单独的域名,不用担心跨域问题,内部微服务可以自由发展对用户解耦。
第二,请求路由、过滤。网关会根据配置的路由和过滤规则将改造后的请求路由到对应的微服务。
第三,身份鉴权。云开发有自己的一套账号身份体系,请求里如果是带有身份信息的,那么网关会对身份进行鉴权。
拓展功能:
* 第四,熔断限流。当某微服务不可用时,可对外提供统一的响应;当某个客户端恶意请求过多次是可予以限制。
* 第五,请求监控。可以监控和记录请求/响应情况。
* 第六,负载均衡。可以控制将请求均匀或按照一定规则路由到不同的节点/实例上以防止某个实例负载过重。
* 第七,灰度部署。某服务在部署或维护的时候,可以在网关这边给一个特定的Response提示接入方,这样不会出现连接超时、无响应这种极不友好的回应。
API网关的技术特点:
首先,它的自身业务逻辑多,是重 I/O、轻计算的一个组件。
其次,它的请求模式是比较固定的,模式固定我们可以理解为,你的一个客户他发送过来的请求实际上就是那么几种,它的路径、包体大小、请求头等这些都是比较趋向于固定的,很难会有一个客户他的请求是完全随机生成的,这对我们后面针对这种情况做缓存设计会有一些帮助。
最后,网关的核心链路可能很长,涉及到多个网络平面。
优化思路:
1. 减少整个 IO 的消耗
2. 对缓存加以利用
3. 优化核心链路,避免链路过长
API网关技术选型:
1. 基于Nginx的网关实现。
2. 基于Nginx + Lua开发, 性能高,稳定,有多个可用的插件(限流、鉴权等等)可用开箱即用。
3. Zuul, Netflix开源,功能丰富,使用Java开发,易于二次开发,需要运行在Web容器中,如Tomcat。
4.Spring Cloud Gateway,Spring Cloud提供的网关服务,非常适用于目前比较流行的Spring Cloud框架体系。
其他还有一些网关实现方案,如Traefik,Go语言开发,轻量易用,感兴趣可以去官网了解下。
后续博客会详细介绍各类网关的优势及搭建示例。