VX-API-Gateway 1.0.0 发布,全异步API网关 - 开源中国社区
VX-API-Gateway 1.0.0 发布,全异步API网关
Mirren 2018年03月23日

VX-API-Gateway 1.0.0 发布,全异步API网关

Mirren Mirren 发布于2018年03月23日 收藏 27 评论 12

VX-API-Gateway是基于Vert.x3.5.1(java)开发的API网关,是一个集分布式,全异步,高性能,可扩展 ,轻量级的API网关

网关的执行流程灵感部分参考了阿里云的API网关;

软件使用说明

VX-API-Gateway使用帮助文档

VX-API 执行流程

flowchart
绿线代表一定会执行,黑线代表当存在时执行,当用户请求的时候,完整的流程按组件顺序由1开始执行到7,如果不满足任意一个组件时请求结束并响应(fail-end-response),当任意组件出现异常时统一进入异常组件(Exception Handler)请求结束并响应错误信息
API的执行流程参考组件介绍

组件介绍

1.黑名单检查

该组件永远会被执行! 用户请求时第一步先经过黑名单检查,VX-API会读取请求中的remote Address并获取用户的host(也就是获取用户的IP地址),如果用户的IP地址在全局黑名单中,结束请求并响应状态码:404,状态信息:you can't access this service;反则继续执行处理...

2.访问限制

当创建API时开启了访问限制,该组件会被执行! 访问限制单位分别为:天/小时/分;可以设置API与IP限制,IP的限制不能大于API的限制;
假设开启API限制:1分钟可以访问1000次;如果1分钟内访问次数大于1000将结束请求并响应请求(响应内容为:创建API中定义API返回结果:访问限制返回);反则继续执行处理...

3.参数检查

当创建API时如果在定义API请求中添加了入参定义,该组件会被执行! 组件会根据入参定义规定的格式检查请求中的参数;
如果参数不符合入参定义结束请求并响应请求(响应内容为:创建API中定义API返回结果:网关入口参数检查失败返回);反则继续执行处理...

4.权限认证

当创建API时开启了安全认证,该组件会被执行! 组件会将流程交给权限认证插件,权限认证插件负责做相关处理后决定将流程交给下一个组件处理或结束请求

5.前置处理器

当创建API时开启了前置处理器,该组件会被执行! 组件会将流程交给前置处理器插件,前置处理器插件负责做相关处理后决定将流程交给下一个组件处理或结束请求

6.中心处理器(主处理器)

当前面的组件都执行通过时,该组件永远会被执行! 组件会根据服务类型做相应的处理,处理完毕后组件会判断是否开启了后置处理器,如果开启了后置处理器,组件会将流程交给后置处理器,并传递一个标识告诉后置处理器当前组件处理的结果;反则结束请求并返回服务结果;

7.后置处理器

当创建API时开启了后置处理器,该组件会被执行! 该组件是正常流程的最后一个组件,组件会收到主处理器的执行结果,组件做完相应操作后必须做对请求的响应用户的请求;

8.异常处理器

当以上任意组件在执行的过程中出现了异常,该组件会被执行! 组件会结束请求并响应请求(响应内容为:创建API中定义API返回结果:发生异常/失败返回);

服务类型介绍

服务类型指网关主处理器要处理的类型,详情参考类型以下的介绍

HTTP/HTTPS

表示后台服务是常见的HTTP/HTTPS,也就是网关要将用户的请求发送的目的地,该服务支持带权重的负载均衡支持轮询与哈希策略(默认轮询),自动断路并重试连接;当网关请求后台服务地址失败时会提交给策略,如果同一个服务地址失败两次及以上时,会被策略移除,网关会检测策略中是否存在不可用的服务地址,如果存在会根据设定的重试时间进行重试,重试后如果服务地址可用则将服务地址重新添加到策略中

页面跳转

该服务用于做链接重定向,当用户请求该服务的API时会,网关会返回状态302,告诉浏览器跳转到指定的URL;

自定义服务

自定义服务其实跟前置处理器实现的功能差不多,因为前置处理器可以做完相应处理后响应用户请求,自定义服务中提供了三个默认的实现,分别为获取网关时间戳,返回常量值与Session认证的授权

性能测试

后台服务输出hello
Nginx Stable1.12.0 配置
nginx-conf
阿里云 centos 7 1G内存1核1兆带宽环境 ab -n 1000 -c 1000 执行结果
Nginx:ab结果
nginx-linux-ab
VX-API: JVM -Xms512m -Xmx512m 其他默认 ab结果
VX-API-linux-ab
Windows 10 8核8G内存 环境 ab -n 100000 -c 2000 执行结果
Nginx:ab结果
nginx-win-ab
VX-API: JVM -Xms2G -Xmx2G 其他默认 ab结果
VX-API-win-ab

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:VX-API-Gateway 1.0.0 发布,全异步API网关
分享
评论(12)
最新评论
0

引用来自“雷兽”的评论

唉 看了红薯的评价 看来oschina 还是大多数人都是习惯站在写代码的角度来看问题呢 基础的架构、甚至是技术选型有质的问题 天生性能就弱人一筹 然后又没啥人使用的话 文档再完整其实也没啥大用的感觉撒

哈哈哈 作者这个 怎么看都必然是既少人用 架构基础又基于没啥优势的技术选型 除了是良好的java范例项目 实际有多少人会用呢。。。

引用来自“赵二伟24740”的评论

@雷兽 你在逗我么,我就回一个点,netty是没啥优势的技术选型?
我的说法是构建在 作者用 nginx+他的网关的结构 和 kong的 nginx+nginx内部插件模块的比较 现在很多waf都是这个架构的说
0

引用来自“雷兽”的评论

这个api网关 走的就是nginx打头 cgi方式 转到java写的api网关上 这样吧?这样真的可能比kong那样nginx+lua的模式快吗

要知道今天很多waf Web应用防护系统(也称:网站应用级入侵防御系统。英文:Web Application Firewall,简称: WAF)都是用kong的那个结构的

要说的分布式 貌似没有哪个网关是非集群的 分布式。。。。。kong的那种我认为算不上分布式 每个kong节点其实都是定时获取并且缓存后端数据库的最新api配置而已 那算不上分布式 仅仅是集群
java异步本来就该是大吞吐的场景下必然使用吧。。。至少我这么觉得
我没看到作者这个网关 任何的集群节点间分布式的 节点间的通信的介绍好像。。。。感觉作者所谓的分布式是不是仅仅是集群呢?
你说的很有道理,也都对,所谓的工具不是最牛的就最好而是最合适的才是最好,起初写这个网关主要目的是为了给我们的一个项目使用,应群友的要求后我就把这个改成大众一点的并开源出来。世界上有很牛逼的人能做很牛逼的事说很牛逼的话,但是他对世界没有一点贡献他只是占用了世界的能源而已,而一个弱小又卑微的人他有愿意贡献的思想和行动,哪怕他帮不到一个人他都值得赞美!
而我自己开源一些东西不是为了证明自己怎么样,相反的我的工具中有一些因为没有时间重构与一开始其实就没有想做那么多功能而写了一堆垃圾代码的而常常感到羞愧,虽说羞愧我也感到非常欣慰因为它不但让我轻松了也让一些同为挨踢界的人轻松了,这个网关不是出来代替什么的,功能也很多需要完善跟优化!
0

引用来自“fagongzi”的评论

https://github.com/fagongzi/gateway 一款go写的API网关,具备更多的功能
我一开始写这个网关时只是准备给我们自己一个老项目使用,后来应网友的要求我就把网关改成大众一点的,在我写这个网关之前我只看到一系列基于nginx网关,第一次听你说的这个网关,刚才看了readme,没有能更多的看到更多关于这个网关的介绍,二维码也过期了
0

引用来自“雷兽”的评论

唉 看了红薯的评价 看来oschina 还是大多数人都是习惯站在写代码的角度来看问题呢 基础的架构、甚至是技术选型有质的问题 天生性能就弱人一筹 然后又没啥人使用的话 文档再完整其实也没啥大用的感觉撒

哈哈哈 作者这个 怎么看都必然是既少人用 架构基础又基于没啥优势的技术选型 除了是良好的java范例项目 实际有多少人会用呢。。。
@雷兽 你在逗我么,我就回一个点,netty是没啥优势的技术选型?
0
唉 看了红薯的评价 看来oschina 还是大多数人都是习惯站在写代码的角度来看问题呢 基础的架构、甚至是技术选型有质的问题 天生性能就弱人一筹 然后又没啥人使用的话 文档再完整其实也没啥大用的感觉撒

哈哈哈 作者这个 怎么看都必然是既少人用 架构基础又基于没啥优势的技术选型 除了是良好的java范例项目 实际有多少人会用呢。。。
0
这个api网关 走的就是nginx打头 cgi方式 转到java写的api网关上 这样吧?这样真的可能比kong那样nginx+lua的模式快吗

要知道今天很多waf Web应用防护系统(也称:网站应用级入侵防御系统。英文:Web Application Firewall,简称: WAF)都是用kong的那个结构的

要说的分布式 貌似没有哪个网关是非集群的 分布式。。。。。kong的那种我认为算不上分布式 每个kong节点其实都是定时获取并且缓存后端数据库的最新api配置而已 那算不上分布式 仅仅是集群
java异步本来就该是大吞吐的场景下必然使用吧。。。至少我这么觉得
我没看到作者这个网关 任何的集群节点间分布式的 节点间的通信的介绍好像。。。。感觉作者所谓的分布式是不是仅仅是集群呢?
0
我还是觉得kong 毕竟用的人多吧。。。。基础组件 还是国际上都有人用的 长期来说比较靠谱
0
https://github.com/fagongzi/gateway 一款go写的API网关,具备更多的功能
0
有备而来,赞,有空要试试
0
是个不错的东东
0
好。关注。
0
这个介绍文档写得很完整,有备而来啊,赞
顶部