技术架构(11)- API网关
API网关是服务统一的请求入口,对请求进行路由、负载均衡、协议转换、安全防护、限流熔断等,把与业务无关的技术处理部分提炼出来,让服务专注于实现业务逻辑。
协议转换
系统内部服务之间的调用,一般使用统一的协议和数据格式。但是,不同系统之间的调用或者数据传输,就存在协议转换的问题了。
API 网关通过泛化调用的方式实现协议之间的转化,将不同的协议转换成“通用协议”,然后再将通用协议转化成本地系统能够识别的协议。
负载均衡
用户的请求通过网关的负载均衡算法,路由到对应的服务上面。
如果服务采用微服务的架构,也可以和注册中心共同实现动态的负载均衡。当微服务动态挂载(动态扩容)的时候,可以通过服务注册中心获取微服务的注册信息,从而实现负载均衡。
服务路由
网关根据请求的 URL 地址解析,知道需要访问的服务。再通过路由表把请求路由到目标服务上去。
限流控制
限流是 API 网关常用的功能之一。当请求超出服务处理能力,或者服务因为某种原因无法正常使用,都会导致系统性能下降。API 网关作为“看门人”,可以限制流入的请求,让应用服务器免受冲击。
限流实际上就是限制流入请求的数量,其算法不少,有令牌桶算法,漏桶算法,连接数限制等等。
认证授权
访问应用服务器需要一定的权限,如果说每调用一次服务都需要验证一次权限,这个对性能影响很大。
可以把权限认证放到 API 网关来进行。目前比较常见的做法是,用户通过登录服务获取 Token,把它存放到客户端,在每次请求的时候把这个 Token 放入请求头,一起发送给服务器。API 网关要做的事情就是解析这个 Token,知道访问者是谁(认证),他能做什么/访问什么(授权)。
熔断降级
当应用服务出现异常,不能继续提供服务的时候,API 网关需要做出处理,把请求路由到其他服务上或者对服务进行降级处理,比如用兜底的服务数据返回客户端,或者提示服务暂时不可用。同时通过注册中心,监听存在问题的服务,一旦服务恢复,随即恢复路由请求到该服务。
日志记录
通过 API 网关上的过滤器我们可以加入日志服务,记录请求和返回信息。同时可以用管理员界面去监控这些数据,做实时查询、异常告警等功能。
发布测试
在发布版本的时候会采用金丝雀发布和蓝绿发布。API 网关使用路由选择和流量切换来协助上述行为。