SMAG 智能网关系统
SMAG(smart api gateway, 智能网关系统)是一款基于OR的智能网关系统。 SMAG开发目的是为了解决“小型互联网企业业务快速发展以及快速增长的用户数量” 与 “企业技术团队能力” 之间的矛盾。
SMAG秉承着简单、高效的原则,让商户(在SMAG平台注册的用户,简称“商户”)能够不改动前后端代码,不修改任意服务器配置的前提下,最快5分钟完成分布式集群搭建。
SMAG系统还拥有以下功能:
1. 多种流量控制策略
2. 灰度发布策略(该功能暂未发布)
3. 智能风控规则(暂时仅支持SMAG管理员为商户添加风控规则,后期会发布商户自定义风控规则功能)
4. 多种转发策略(随机转发策略, IP转发策略, 权重转发策略, 可靠性转发等)
5. 多种应用心跳机制
6. 接口信息统计(可查看接口请求访问的来源IP, 调用时间,状态码等信息)
7. 应用状态监控和异常信息推送
8. 系统运行指标监控和异常信息推送
其中, 智能风控规则为本系统的特色功能。
相较于同盾、数据包等风控平台,它们都提供了许多风控的查询接口(反欺诈,公安,征信等)。
但是,这些信息的查询,都是通过开放API的方式,不同数据查询,API文档都有所不同。需要一定的接入系统的时间成本和技术成本,并不利于小企业系统快速迭代的需求。
因此,本系统提出了一种智能风控规则引擎。 商户通过选择已有的特定接口(例如下文提到的注册接口),在后台管理系统中选择已有的风控规则,并设置参数的来源,以及规则命中之后的返回信息即可完成规则导入。无需修改商户系统的任何代码,且移除方便,只需要在后台管理系统删掉相应的规则即可。
且本系统在多个风控规则同时存在的时候,会通过异步的方式,查询多个规则,力求达到性能最优。
举例, 假设铁路系统,有一个注册接口
www.test.com/register?id=3303*****100&password=123456,
原本该接口是用于注册,通过id(身份证信息),password(密码)信息,完成用户注册。
现在有一个紧急需求,需要将身份证与征信系统进行对接,通过身份证号查询用户征信分数,若征信判定为良好,则可继续完成注册。若征信判定为不良,则返回信息“您好,由于您当前在失信人名单中,根据国家规则,暂时不支持您在本平台进行注册”。
- 场景一(不适用SMAG系统):
商户需要修改系统代码,在接口函数最开始的地方,增加代码,完成征信系统查询,并根据其征信情况,决定用户注册结果。
- 场景二(使用SMAG系统):
商户只需要在SMAG后台管理系统中,添加注册接口,并为该接口增加征信黑名单规则(即若征信判定不好,则命中黑名单,返回提示信息“您好,由于您当前在失信人名单中,根据国家规则,暂时不支持您在本平台进行注册”。反之,允许该请求继续完成注册功能)
- 继续思考:
若此时又有其他需求,例如注册接口需要查询当前注册用户的花呗分数,需要对接公安系统(判断是否为在逃人犯)等。若不使用SMAG系统,则需要频繁重复以下操作
- 查看对接平台的API文档
- 理解API文档的含义, 输入输出参数含义
- 修改系统代码(若后期某一个查询功能废弃了,则又需要回退代码)
- 上测试
- 上准生产环境
- 投产
若此反复繁琐的操作,一定程度上加大开发成本和时间成本,对于用户数量快速增长的小型企业,往往功能延迟上线,就意味着错失了业务快速拓展的机会,甚至会导致公司里程碑式的转折。
功能演示页面:
(申明:本系统后台框架是使用nutzsite开源框架,感谢nutzsite作者的技术输出)
商户使用域名作为登录名,申请平台账号
申请通过后,使用域名进行登录,且一个商户只能拥有一个域名
证书配置
商户可通过证书配置,动态跟新证书信息(完成证书信息配置之后, 用户可通过相应域名的https协议进行访问商户系统。 若未配置, 用户依然可以通过http协议访问商户系统)
路由规则配置
商户可在路由规则配置页面,配置路由规则。 规则为/表示匹配所有请求。
若规则为/test/,则匹配请求中包含/test/的请求, 例如www.test.com/test/pay.do,请求则会被匹配到。而www.test.com/test2/,请求则不会被匹配到。
若未匹配到的请求,用户访问商户系统,则直接返回404.
应用配置
商户在设置完路由规则之后,可以通过应用配置,来指定对应路由规则,可转发到后端哪些应用中。例如, www.test.com中满足路由规则/(表示所有的请求)的请求,会转发到对应在线的应用(其中,状态表示应用的当前状态,down表示下线, up表示在线)。
转发规则
商户可在此页面,指定请求的转发策略。 (当前发布随机和ip转发策略)
- Weight_strategy功能暂未发布, weight_strategy兼容流控和转发策略。逻辑如下:
假设一个请求有两个可用服务器A,B。 并设置A最大连接数量为100, B最大连接数量为200。一个请求过来,按照可用每个服务器的可用连接数作为权重(即假设刚开始没有流量的时候, A权重是100, B是200。 那么,转发到A的概率是1/3, 转发到B的概率是2/3)进行转发。
若当前A的服务器,已经到达100上线,则接下来的请求只会想B发送。
若当前A,B服务器,都达到上线,则会被限流,并降级。 返回特定信息给用户,告知当前网络繁忙,请稍后再试。
- 可靠性转发功能暂未发布。 逻辑如下:
可靠性转发,不是独立的一个转发策略。是其他策略的辅助增加功能。 由于在转发的时候,后端服务器状态是实时变化的。SMAG系统只能定期检查应用状态,无法做到实时监控。因此,通过可靠性转发策略, 可以在发送前,测试所有应用的在线状态。从而,保证接口的可靠转发。但是,该策略需要提前进行检测应用状态,会牺牲一定性能。
所以,商户可以根据实际情况,针对一些特殊的接口(对可靠性要求较高的接口),使用可靠性转发策略。
风控规则
当前功能已实现,但相关页面展示功能暂未发布。
请求监控
接口请求信息
商户可在此处查看,所有的请求信息,包括访问的客户端IP, 时间, 请求的时间, 获取数据花费的时间,转发的后端服务器地址等
接口请求统计报表
系统次日会统计当日的接口请求信息, 包括调用次数, 最少调用时间, 最多调用时间, 平均调用时间等。可保证商户优化和统计系统运行情况。
其他,报表和预警功能还在开发中,敬请期待。
性能比较:
测试URL是直接返回数据,不包含任何逻辑运算,数据库IO操作的。
使用JMETER进行压测
并发数量 |
直接访问后端服务器地址 |
通过SMAG访问后端服务器 |
10 |
19 |
39 |
100 |
21 |
39 |
500 |
27 |
50 |
1000 |
48 |
63 |
由此可见,两者性能十分相近。
同时,SMAG支持多机集群,更能够适应大流量用户请求。