本文转载自微信公众号「新钛云服」,作者杨良春。转载本文请联系新钛云服公众号。
无论您是企业内部、云厂商或服务商架构师,在梳理业务场景,规划、部署应用架构之时,服务网关设计与实现的成败,是直接决定您系统交付价值的最直接体现。
服务网关作用何在?
简言之,路由转发和过滤器。
· 路由转发:接收一切外界请求,转发至后端;
· 过滤器:完成权限校验、限流以及监控等一系列横切功能。
服务网关功能体现在哪?
近些年,随着微服务轻量级应用不断盛行,API网关正扮演着举足轻重的角色。因为它既需要承担企业应用服务对外的唯一门户,更重要的是它提取了许多应用的共性功能。
目前API网关实现的功能包括请求分发、条件路由、API管理、限流隔离、熔断降级、安全策略、监控报警以及调用链追踪等。
一、请求分发
API进行服务发现时给不同url前缀以及微服务应用构建不同的namespace对象,在进行请求匹配时候只需根据url前缀选取到对应的namespace即可匹配到对应微服务应用,后续就是现有微服务框架sdk的功能:路由、负载均衡直至完成整个调用。
二、条件路由&灰度发布
条件路由依然是复用现有的微服务框架,避免重复造轮,网关进行服务发现初始化时会给每个应用创建Invoker代理对象,Invoker内会根据不同的分组创建不同的Space空间,请求调用时会对这些Space空间进行规则匹配,从而决定是否路由到特定分组上。
三、API管理
当大部分应用还是裸连网关而非经过BFF聚合时,有必要对每个接口都进行管理,以区分哪些是微服务间调用,哪些是暴露给前端/客户端调用。
四、限流隔离/熔断降级
API网关作为南北流量的唯一入口,整体治理必要性非常大。
限流隔离主要是作用在流入方向服务端测的流量控制,其中限流主要是控制qps,隔离主要是控制并发数。通过相关SDK(基于Prometheus)暴露metrics数据给监控平台,以便我们随时观察到流量控制水平。
五、安全策略
针对恶意爬虫类异常流量,用户可以在网关管控平台手动进行规则配置,经由配置中心下发到网关的Security Control进行热更新。在请求来临时由它判断是否符合规则,被封禁的流量同样暴露metrics数据给监控平台供我们随时查看。
同时还会将网关日志实时采集至大数据分析平台,经分析如果判断某个ip或者用户存在异常情况,会自动配置安全策略规则至网关管控平台,同时触发一个报警提醒业务owner。目前支持包括根据客户端IP、用户ID、其余http header/attribute等。
六、监控报警
API网关有完善的监控报警、调用链追踪、日志查询等功能。这里监控主要指查询metrics、调用链主要指查询tracing,日志即logging,三者是监控领域典型指标:
此外还支持主机层面的报警,通过内嵌了的metrics sdk暴露metrics指标到endpoint供监控中心拉取,tracing sdk负责埋点打印tracing日志,tracing日志和业务日志均会通过日志采集器输入监控中心处理。在监控平台上,用户可以查询调用链、监控、日志信息,API网关发生的主机异常或者业务异常也会报警给owner。
技术选型
若读者有兴趣自建一个轻量级的服务网关,技术选型推荐如下:
· 开发语言:java + groovy,groovy的好处是网关服务无需重启动态添加filter实现
· 微服务基础框架:Springboot;
· 网关基础组件:Netflix Zuul;
· 服务注册中心:Consul;
· 权限校验:JWT;
· API监控:Prometheus + Grafana;
· API统一日志收集:Logback + ELK;
· 压力测试:Jmeter。