Agate基于Vert.x的API-Gateway

背景

        关注Vert.x已有4年,在多个项目使用中见证了威力,也踩了很多坑,但对它的喜爱有增无减。一直想基于Vert.x开发一个类似Nginx的API网关,虽然zuul、spring cloud gateway已经很优秀,但是手撕API网关(重复造轮子)的心一直没有死。

        在新冠疫情爆发期间,花了2周时间写了一个基本可用的API网关Agate,借此正好填补空虚失落的焦虑和抚慰多愁善感的心灵。下面介绍一下其架构和实现,更多可以参加源码工程:Agate。

架构

运行架构

Agate由2部分组成:

Agate-Manager:

    管理API的定义、配置信息,将这些信息持久化到数据库中,同时将要发布的API配置推送Consul中。

    为了快速原型,当前使用spring mvc + jsp页面来实现的UI页面。

Agate-Gateway:

    监听Consul中API配置的变更,执行API的部署和启停,同时接受API客户端的请求,并根据API定义做路由处理,期间会执行日志、限流、熔断、认证、缓存等增强处理。

    Gateway使用了Vert.x框架,全异步流程处理,抽象了BeforeHandler、RouteHandler、AfterHandler、FailureHandler处理过程。

Gateway组件图

系统依赖

Vert.x 4.0 和 Consul 1.7

特性列表

BlackWhiteList    未实现

Logging    已实现

RateLimit    已实现

Tracing    已实现

Metrics    已实现

Security    未实现

CircuitBreaker    未实现

GrayDeployment    未实现

Routing    已实现

实现效果

登录Manager
管理APP
管理API
链路追踪Zipkin
链路追踪Zipkin

结语

        限于时间和水平有限,很多地方实现的不是太好,后续还要持续完善,也希望有志之士能参与建设。对于正在学习网络编程的同学来说,Vert.x是个不可多得好工具;对于研究高性能网关实现的同学来说,Agate是个不(自)可(吹)多(自)得(擂)的参考。

你可能感兴趣的:(Agate基于Vert.x的API-Gateway)