智能服务网关平台实践之路
一些互联网公司通常会有很多移动端应用:App,微信小程序,H5,这些应用主要的架构模式是C/S架构,即客户端/服务端模式,前端负责渲染数据,服务端负责提供数据,前后端通信协议通常采用http json。但是因为没有统一的服务标准,每开发一个前端应用都需要我们开发人员重新定义数据请求,返回的数据格式,浪费开发资源。
同时每一个后台服务都需要对前端请求做独立用户认证开发,这种硬编码方式导致接口无法灵活配置,通常增加一个新接口或者新的认证方式要需要重新开发。
每一个前端应用都要维护自己的api,像很多基础的api如商品详情地址,下单用户地址获取因为没有统一的平台维护都需要重复开发。逢大促期间这些api还需要进行备战,做服务降级,性能优化,容错等,基本上每开发一个Api都要重复以上步骤。上述问题如果从架构的角度来看,都是和业务非强相关的,可以考虑从业务系统中解耦出来,这就是我要给大家介绍的智能服务网关平台系统。
智能服务网关平台整体架构分为服务网关,服务网关配置后台管理系统,流量分析平台三部分。
总体架构图如下:
服务网关是移动端,h5,微信小程序,pc端的统一入口,所有的流量都需要经过网关转发到后台服务。服务网关定制了前后端标准化的务通信协议,还支持接口数据mock,用户签权,服务的路由,容错,数据的回溯功能,流量控制,灰度发布,AB测试,服务的编排等功能,服务网关配置后台管理提供了应用管理,api的发布,接口超时,容错配置,流量控制,服务降级,A/B测试,灰度发布等功能。流量分析平台主要提供了前端流量监控,错误日志汇总及分析等相关功能。
根据自身业务的不同,不同业务对网关的需求是不一样的,下面重点介绍一下智能服务网关平台最基础的功能:1、服务的标准化,2、统一的用户签权和配置3、统一的服务故障隔离及容错机制。服务标准化包括api请求数据格式的统一,返回数据格式的统一。请求数据格式可以分三部分:1、固定的Uri+接口名称,2、请求的业务数据.3、请求的公用参数。如下的url地址http://域名/xxxxx?api=接口名&appName=yyy&screen=1280*720&networkType=wifi&model=MI2S&osVersion=4.1.1&client=android&brand=Xiaomi&uuid=86358302943417368dfddbfeaa3&clientVersion=1.0.0&data={“key”:“value”}
其中xxxxx 是固定的uri, api是接口访问key,value是接口名称,建议采用应用名+业务名+方法名,data是请求数据的key,value是标准的json结构,不同的业务可以嵌套多层json结构,其他client,screen,network等参数是公用参数,有的取自硬件设备,有的取自我们开发的软件。
返回数据的的标准化有利于客户端的数据渲染,弹框提示,网络异常等处理,标准格式如下:
{
ret: 200,
data: {
bussInfo(业务节点名称): {
msg:
},
success: true
},
code: "0"
}
最外层的数据节点ret代表网关到后端服务请求状态码,此状态码沿用了http状态码和自定义状态码,code是前后端网络通信的节点,控制着前端视图渲染,数据处理,网络异常等常用的一些值,像0不需要登录,3需要登录,10需要弹出验证码等。data数据解析的开始节点(固定节点),其下子节点bussInfo是业务数据节点,可包含多个。子节点success代表数据请求的结果,true代表成功返回,false代表异常,同时msg节点进行异常信息的提示。
统一的用户签权和配置:不同的登录方式后台校验业务逻辑完全不一样,在没有网关的情景下,后台业务需要独立做用户认证,而有了智能服务网关只需要根据接口在服务网关后台进行配置,网关根据不同的client的值来判断哪种登录方式,统一处理。
统一的故障隔离和服务容错机制:智能服务网关上游会有很多业务集群,在高并发访问的场景下,如果某一个接口访问超时,极有可能请求连接被占用,连接数被占满,进而导致服务不可用影响到其他业务,产生雪崩效应。为了保证服务的高可用,我们需要在服务网关做故障隔离机制。主要分三步:1、针对单个接口在服务网关配置做合理的超时配置。2、针对后台的每一个服务或者应用,分配单独的线程池,把故障隔离到应用级别。3、针对单个应用某些流量比较大的接口,配置路由规则把流量转发单独的集群上和其他接口完全隔离开。
统一容错机制:容错指的是服务在不可用或者超时的情况下,自动加载上一次访问的数据,防止前端页面出现空白。每一次接口请求,智能服务网关能通过URL规则匹配器自动分析可变部分和不可变部分生成动态的容错key,把符合规则的数据存储下来,如果接口请求失败,会根据容错key动态拿取上一次数据的展示。
容错流程图如下:
上述的三点是智能网关服务平台最基础也是最核心的功能,只要实现这三点,一个网关平台的雏形就建立起来了,当然我们也开发其他比较实用的功能,数据追溯功能,简单来说就是追溯某一时间节点数据,在服务容错失效的情况下可以快速恢复数据,在其他情景下也可以用作数据的镜像。
智能服务网关是C/S开发架构中最基础的服务,目前也有很多开源的网关项目,像netfix zuul, Spring Cloud Gateway等,尽快实现方法各有不同,但其本质是一样的,都是为了解决我们开发中的痛点,减少重复开发,让我们更关注业务。
智能服务网关是企业API服务的汇聚中心,性能是衡量网关最重要的指标之一,本来客户端和服务端是可以直接连接的,但是现在增加了一个网络层,性能的好坏会直接影响到客户端的体验,在架构设计时可以考虑一下几点:
1、 网关必须是无状态的,可以灵活的横向扩展。
1、运行时减少对db依赖或者缓存的依赖,所有的操作尽量在内存中完成服务的处理和中转。
2、服务的处理和中转减少线程的依赖,采用非阻塞IO和异步响应机制。