# 统一API网关服务
API 网关的流行得益于近几年微服务架构的兴起,原本一个庞大的业务系统被拆分成许多粒度更小的系统进行独立部署和维护,这种模式势必会带来更多的跨系统交互,企业或事业单位的业务 API 的规模也会成倍增加,API 网关(或者微服务网关)就逐渐成为了微服务架构的标配组件。
# 应用场景
- 面向 Web 或者移动 App
这类场景,在物理形态上类似前后端分离,前端应用通过 API 调用后端服务, 需要网关具有认证、鉴权、缓存、服务编排、监控告警等功能。
- 面向合作伙伴开放 API
这类场景,主要为了满足业务形态对外开放,与企业外部合作伙伴建立生态圈, 此时的 API 网关注重安全认证、权限分级、流量管控、缓存等功能的建设。
- 企业或单位内部系统互联互通
对于中大型的企业或单位内部往往有几十、甚至上百个系统,尤其是微服务架构的兴起,系统数量更是急剧增加。系统之间相互依赖,逐渐形成网状调用关系不便于管理和维护,需要 API 网关进行统一的认证、鉴权、流量管控、超时熔断、监控告警管理,从而提高系统的稳定性、降低重复建设、运维管理等成本。
# 网关作用
从名字就可以看到,它是微服务应用平台的一个网络的关卡,无论后端多么的复杂,这个对外的关卡表现是一致的。
更加重要的是,隐藏在关卡后面的一些通用的事务,都可以抽象出来进行处理。可以把网关比喻成一个类似于海关的机构服务,你的签证资料准备、安检、调度等,都可以统一进行处理。
api网关就是伴随着微服务概念兴起的一种架构模式,当然也不仅限于微服务。从以下图我们可以看到网关的位置。
作用:
2.1 反向代理 这个是所有网关,包括nginx的基本功能。除了能够对服务进行整形,网关一个非常重要的附加收益,就是对后端的服务细节进行了屏蔽。
反向代理同时会带有负载均衡的功能,包括带权重的流量分配。
2.2 鉴权 就是权限认证,也就是常说的权限系统。由于鉴权服务有非常高的相似性,就可以进行抽象处理,放在网关层。
比如https协议的统一接入,分布式session的处理问题,新的登录鉴权通道的接入等。
2.3 流量控制 流量控制如果分散到每个服务里去做,就是一种灾难,网关是最适合的地方。
流量控制通常有多种策略,对后端服务进行屏蔽。非正常请求和超出负载能力的请求,都会被快速拦截在外,为系统的稳定性提供了必不可少的支持。
流量控制有单机限流和分布式限流两种方式,后者控制更加精细一些,spring cloud gateway都有提供。
2.4 熔断 熔断与流控的主要区别,在于前者在一段时间内,服务“不可用”,而后者仅概率性失败。
除了服务之间的调用涉及到熔断,在网关层的熔断,作用范围会更大,需要对服务进行准确的分级。
2.5 灰度控制 网关的一个终极功能,就是实现服务的灰度发布。比如常说的AB test,就是一种灰度发布方式。
灰度会进行精细化控制,比如针对一类用户,某个物理区域,特定请求路径,特定模块,随机百分比等方面的一些灰度控制等。
灰度是一个整体架构配合的结果,但协调的入口就是网关,通过对请求头或者参数加入一些特定的标志,就可以对每个请求进行划分,决定是否落入灰度。
2.6 日志监控 网关是最适合进行日志监控的地方。通过对访问日志的精细分析,能够得到很多有价值的数据,进而对后端服务的优化提供决策依据。
比如,某个“业务”的访问趋势,运营数据,QPS峰值,同比、环比等。