六问六答带你了解微服务中的网关

## 1. 什么是微服务网关?
微服务网关也就是我们的API Gateway(APIGW / API网关),顾名思义,微服务网关其实是面向于API的,也就是我们的接口。
网关可以将我们的微服务项目的接口聚合起来,对外暴露统一的域名,端口。
2. 网关的作用是什么?
身份认证与安全
审查与监控
动态路由
压力测试
负载均衡
静态响应处理
多区域弹性
3. 使用网关的好处是什么?
聚合接口使得服务对调用者透明,客户端与服务端耦合降低
聚合后台服务
提供安全、流控、过滤、缓存、计费、监控等API管理功能
4. 为什么要使用网关?
必要条件: 架构的发展,单体架构是不需要网关的,微服务才需要网关
如果不使用网关:
客户端会措辞请求不同的微服务,增加了客户端的复杂性
存在跨域请求,在一定场景下处理相对复杂
身份认证问题,每个微服务需要独立身份认证
难以重构,随着项目迭代,可能需要重新划分微服务
某些微服务可能使用了防火墙、浏览器不友好的协议,直接访问会有一定困难。
使用API网关:
易于监控,可在微服务网关收集监控数据并将其推送到外部系统进行分析
易于认证,可以在微服务网关上进行认证,然后在转发到对应服务上,从而无需在每个服务中进行认证
降低了服务端与客户端的耦合,减少客户端直接访问服务
5. 微服务网关解决了哪些问题?
性能:API高可用,负载均衡,容错
安全:权限认证、脱敏、数据清洗、后端签名、黑白名单
日志:日志记录,全链路追踪
缓存:数据缓存
监控:记录请求响应数据,API耗时分析、性能监控
限流:流量控制,错峰流控,可以支持多种限流规则
灰度:线上灰度部署,减小风险
路由:动态路由规则
6. 主流的网关解决方案都有哪些?
Nginx + Lua 门户网关,全局网关,提供反向代理,负载均衡
Kong 将Nginx + Lua进行了封装,让其更加易用
Traefik 基于Go语言开发
Netflix Zuul 单线程的接收请求和转发处理
Spring Cloud Gateway 目前主推的API网关