什么是API网关
微服务架构中,服务会被拆分成多个的微服务,例如:用户服务、订单服务、商品服务等
为了应对高并发,微服务会部署在很多机器上,同一个API也是散落在很多机器上,此时就需要有个东西将这些API统一管理起来,这个东西就可以被定义为API网关。
我们通过一张图来理解API网关:
网关作为系统的唯一入口,当外部应用或者客户端访问系统时,都会遇到如下问题:
需要判断访问者的权限
协议不一致的需要协议转换
服务需要做水平扩展
控制请求流量,防止请求的流量超出系统的承受范围
针对每个请求及回复,要记录响应日志
API网关应该具备的功能
路由选择的功能:网关可以根据请求的URL地址解析,知道需要访问的服务,再通过路由表把请求路由到目标服务上去。
负载均衡的功能:将工作负荷分布到多个服务器来提高性能。
流量控制的功能:当上游服务超出请求承载范围,或者其不正常了,此时,API网关可以限制流入的请求,让上游服务免受冲击,保持能够正常访问。
统一鉴权的功能:如果每个访问每个微服务都验证一次权限,这样效率会很低。如果把这个权限验证放在网关层,就比较合理了。一般流程是:登录网关获取token,其他请求时带上token,API网关层解析token,知道访问者是谁,有什么权限,可以访问哪些URL,一般情况下,API网关需要和CAS中心鉴权服务做链接,来确定请求者的身份和权限。
熔断降级的功能:当上游服务出问题时,网关需要做出处理,例如:进行降级处理。
灰度发布的功能:一种发布方式,在其上可以进行A/B测试,让一部分用户继续使用A功能,一部分用户使用B功能,如果无问题,就慢慢都升级成了B功能。
数据聚合的功能:例如一个界面既要显示用户信息,又要显示订单信息,此时需要调用多个API接口,数据聚合的意思就是,在网关层面就可以处理这些问题,让调用方一次发送多种API请求,网关层给聚合后,再返回给调用方,这样不仅节省开发时间,也提升了访问速度,提高了用户体验。
缓存数据的功能:对一些修改频率不高的数据,可以缓存在API网关中,当用户请求时,如果发现有缓存信息,直接返回,如果没有缓存,则到上游服务获取信息。设计一个定期更新数据到缓存的服务。
日志记录的功能:优秀的网关日志记录是少不了的。