1.1 产品介绍
移动网关服务(Mobile Gateway Service,MGS)是mPaaS提供的连接移动客户端与服务端的组件产品。该组件简化了移动端与服务端的数据协议和通讯协议,能够显著提升开发效率和网络通讯效率。
1.1.1 功能简述
如图1-1所示,目前MGS已有的功能分别是:API注册、API配置、API限流、API授权、API模拟、API缓存、API测试、API分析、数据加密。
(1)API注册:可以在移动开发平台上轻易、快速、方便的注册API,可以快捷的开启、关闭API。
(2)API配置:可以移动开发平台上快捷的调整API的配置,比如超时时间、缓存等等。
(3)API限流:常用于大促、活动,类似双十一等,主要为了防止客户端短时间高并发大量请求打挂服务器。
(5)API授权:是指一个API在调到网关之后,网关再调客户服务器上进行鉴权的一个服务,当授权通过后请求才能打到服务端。
(6)API模拟:客户端发起请求到达网关后,网关模拟服务端,直接将模拟的数据返回客户端。
(7)API缓存:在大并发的情况下,网关将客户请求的结果缓存在本地,在缓存过期之前,可以直接返回给客户端,可以提高整个并发的流量,提升客户端请求速度的体验。
(8)API测试:网关模拟客户端的请求,将模拟数据发到服务端,用于测试服务端。
(9)API分析:API分析提供常用的API的统计数据(比如API调用量、API报错量、平均调用耗时、API调用同比、API报错同比、API耗时同比)。
(10)数据加密:设置通信报文的的加解密配置,提高整个客户端到服务端的攻击门槛,保障数据通信的安全性。
图1‑1 MGS产品功能图
1.1.2 功能特点
移动网关是连接移动客户端跟服务端的桥梁,移动客户端通过网关来访问后台服务接口。移动网关能够实现以下功能:
(1)自动生成客户端的RPC调用代码,用户不需要关心网络通信、协议以及使用的数据格式。
(2)将服务端返回的数据自动反解生成Objective-C对象,无需额外编码。
(3)提供数据压缩、缓存、批量调用等增强服务。
(4)统一进行异常处理,如弹出对话框、Toast 提示框等。
(5)支持RPC拦截器,实现定制化的请求与处理。
(6)实行统一的安全加密机制和防篡改的请求签名验证机制。
(7)限流管控,保护后台服务器。
1.1.3 价值优势
移动网关服务的优势在于以下几点:
(1)简单配置即可适配多种终端,连接异构的后端服务。
(2)自动生成移动端SDK,实现前后端分离,提升开发效率。
(3)支持服务注册、发现与管控,实现服务聚合与集成,降低管理成本和安全风险。
(4)提供优化后的数据协议与通讯协议,提高网络通讯质量和效率。
1.1.4 应用场景
移动网关服务有以下几个应用场景:
1. 开放移动服务能力
随着移动互联网、普惠金融的迅猛发展,企业越来越迫切地希望将现有成熟的后端服务开放出去。接入移动网关服务,无需额外工作,即可形成移动服务能力。
2. 一套服务,多端输出
移动互联时代,服务需要支持多样化的终端设备,这往往极大地增加了系统复杂性。企业只需在移动网关中定义服务,便能支持多种终端接入。
3. 异构服务,建立标准统一的对外服务接口
企业往往存在多种语言和结构的后端服务,只需遵循一定的标准接入移动网关,就可以对外开放标准统一的服务接口。
1.2 产品架构
MGS的产品架构图,如图1-2所示。首先APP的请求会经过一个负载均衡设备,这个负载均衡设备可能是F5、ALB、SLB等软负载产品,经过负载均衡之后会把请求转发到mPaaSgw应用,mPaaSgw再根据这个API在开发平台配置的后端服务的URL和配置的协议类型,通过对应的协议转发到对应的后端的业务服务器。mPaaSgw一般会部署多个容器,每次请求会通过负载均衡的机制,发送到对应的mPaaSgw上。然后mPaaSgw和后端的业务服务器根据不同的协议选择不同的注册中心来做服务发现,例如使用TR模式的话则选择SOFA-Registry作为注册中心,使用dubbo模式的话则选用Zookeeper作为服务注册。在实际使用中,更多情况可能使用HTTP协议,那就不需要再做服务注册了,只要在网关注册API的时候配置后端业务的HTTP器地址即可。
图1‑2 MGS产品架构图
mAppCenter是mPaaS的管控控制台,也就是移动开发平台。在mAppCenter上可以配添加、配置API接口,之后配置的API信息会经nginx路由转发到一台mPaaSgw。mPaaSgw会将数据更新落库,同时ZK会有一个通知操作,通知所有的mPaaSgw,mPaaSgw会拉取最新的数据库配置更新自身缓存,避免因缓存旧数据而导致错误。
通过此过程可以到看到mPaaSgw自身也依赖一些其他组件,包括数据库、监控、ZK、动态配置。数据库主要是负责存储网关的各类配置数据,例如API分组的信息、API的配置信息、是否开启缓存等,在阿里云底座下使用的是RDS,在AntStack底座下使用的是OceanBase。
其中MGS监控主要是通过网关对在线API请求的日志,实现在线监控、错误数监控、耗时监控等情况的监控。
动态配置主要是用于动态的调整一些运行时配置,例如日志的打印级别、动态调整一些参数等等,根据实际的部署模式,可以选择用SOFA中间件的SOFA-DRM或选择Zookeeper 去做推送。
WAF流量清洗,因为MGS对请求的requestbody做了加密,所以WAF放在MGS前面获取不到原文数据,很多功能就变成了摆设。所以目前已输出的环境下是WAF一般做流量镜像,部署在MGS和客户后端业务之间做流量镜像。
1.3 网络架构
如图1-3所示,首先入口是手机App,App的请求经过DNS域名解析服务器,经过防火墙F5进行证书卸载,转发到DMZ区的外网spanner,spanner直接拿到HTTP的请求信息,再路由转发到mPaaS应用区的mpaasgw,mpaasgw应用再通过DUBBP/TR/HTTP协议,把请求转发到后端的业务上面。mpaasgw会根据请求信息的情况进行处理,如是客户自己的业务请求,则转发到行方应用区,如是mPaaS的框架请求,则通过DUBBP/TR协议转发给mPaaS的内部组件进行处理。由于应用都是部署在内网,所有请求使用HTTP协议就完全满足了,当通过mAppCenter访问mpaasgw时,是指定80端口,经内网spanner后从8081端口转发到mpaasgw。
图1‑3 MGS网络架构图
1.4 产品特点
(1)MGS是mPaaS中唯一会影响业务的服务,为了最大化可用性,有如下保障措施:
MGS要求至少两个实例保证最基本的高可用;
MGS进程有守护进程,假设MGS进程意外崩溃,可以马上拉起;
MGS运行时不依赖数据库,因此即使数据库出问题,MGS依然可以正常服务。
(2)MGS的管控聚合在mAppcenter控制台上,页面上的请求都会经mAppcenter里的nginx路由。
(3)当有配置变更时,除了会写入数据库,还会通过动态配置服务进行推送,实时更新所有节点内存中的数据。
(4)mPaaS其他组件的RPC服务也会通过MGS暴露。
1.5 常用日志
MGS常用的运维日志目录介绍如图1-4所示。
图1‑4 MGS常用日志介绍
1. API摘要日志
1)日志路径
/home/admin/logs/gateway/gateway-page-digest.log
2)格式
时间 - (请求地址,响应,结果(Y/N),耗时,operationType,系统名,appId,workspaceId,结果码,客户端productId,客户端productVersion,渠道,用户ID,设备ID,UUID,客户端trackId,客户端IP,网络协议,数据协议,请求数据大小,响应数据大小,TraceId)
3)样例
2022--01-12 11:15:57,700 - (/mgw.htm,response,N,14ms,com.alipay.gateway.test,-,2A9ADA1045,antcloud,6666,-,-,-,-,WbYn8BX+5YQDAAIukHtlhSMt,f6223958-08d5-4e2a-aa2b-3f1a8b5aa6f7,f6223958-08d5-4e2a-aa2b-3f1a8b5aa6f7,100.97.90.85,HTTP,JSON,26,0,79c731d5150518615768657974443)
2. API详细日志
1)日志路径
~/logs/gateway/gateway-page-detail.log
2)类别
请求日志:[request]
响应日志:[response]
当日志级别为DEBUG时,会将requestData、responseData打印出来。
3)格式
请求日志如下:
日志打印时间 [客户端IP][TRACEID] 日志级别 - [日志类型]operationType=RPC操作码,appId=客户端APPID,workspaceId=客户端workspaceId,requestData=请求数据,sessionId=-,did=设备ID,contentType=内容类型,mmtp=是否开启 mmtp 协议,async=是否异步调用
响应日志如下:
日志打印时间 [客户端IP][TRACEID] INFO - [日志类型]operationType=operationType,appId=appId,workspaceId=workspaceId,,responseData=返回数据,resultStatus=返回码,contentType=内容类型,sessionId=会话ID,did=设备ID,mmtp=是否开启MMTP,async=是否异步
4. 样例
请求日志如下:
2021-1-12 15:37:10,208 [100.97.90.113][79c731d51513841830208829314258] INFO - [request]operationType=com.alipay.gateway.test,appId=2A9ADA1045,workspaceId=antcloud,requestData=***,sessionId=-,did=WjtkmWe1uHsDADl7BEleyK2L,contentType=JSON,mmtp=F,async=T
响应日志如下:
2022-1-12 15:37:10,229 [][79c731d51513841830208829314258] INFO - [response]operationType=com.alipay.gateway.test,appId=2A9ADA1045,workspaceId=antcloud,responseData=***,resultStatus=1000,contentType=JSON,sessionId=-,did=WjtkmWe1uHsDADl7BEleyK2L,mmtp=F,async=T
3. API统计日志
1)日志路径
~/logs/gateway/gateway-page-stat-s.log
2)格式
时间 - operationType,appId,workspaceId,结果(Y/N),结果码,压测标识(T/F),请求总量,请求总耗时(ms)
3)样例
2022-1-12 15:34:58,419 -com.alipay.gateway.test,2A9ADA1045,antcloud,Y,1000,F,1,3
4.网关线程统计日志
1)日志路径
~/logs/gateway/gateway-threadpool.log
2)格式
时间 [线程名,ActiveCount,PoolSize,LargestPoolSize,CorePoolSize,MaximumPoolSize,QueueSize,QueueRemainingCapacity]
3)样例
2021-12-21 16:33:32,617 [gateway-executor,0,80,80,80,400,0,1000]
5.网关配置日志
1)日志路径
~/logs/gateway/gateway-config.log
2)功能
此日志记录网关配置变更的相关通知。
6.网关默认日志
1)日志路径
~/logs/gateway/gateway-default.log
2)功能
网关默认日志,未指定特定日志的埋点都会打到此日志。
7.网关错误日志
1)日志路径
~/logs/gateway/gateway-error.log
2)功能
此日志记录错误和异常堆栈。