百亿流量微服务网关的设计与实现(4)

Dromara soul

项目地址:https://github.com/Dromara/soul


Soul是一个异步的、高性能的、跨语言的、响应式的API网关,提供了统一的HTTP访问。


  • 支持各种语言,无缝集成Dubbo和SpringCloud;
  • 丰富的插件支持鉴权、限流、熔断、防火墙等;
  • 网关多种规则动态配置,支持各种策略配置;
  • 插件热插拔,易扩展;
  • 支持集群部署,支持A/B Test。


3. 基于Go语言的网关

fagongzi

项目地址:https://github.com/fagongzi/gateway


fagongzi Gateway是一个Go实现的功能全面的API网关,自带了一个Rails实现的Web UI管理界面。

功能特性:流量控制、熔断、负载均衡、服务发现、插件机制、路由(分流,复制流量)、API聚合、API参数校验、API访问控制(黑白名单)、API默认返回值、API定制返回值、API结果Cache、JWT认证、API Metric导入Prometheus、API失败重试、后端Server的健康检查、开放管理API(gRPC、RESTful)、支持WebSocket协议。


Janus

项目地址:https://github.com/hellofresh/janus


Janus是一个轻量级的API网关和管理平台,能实现控制谁、什么时候、如何访问这些REST API,同时它也记录了所有的访问交互细节和错误。使用Go实现API网关的一个好处在于,一般只需要一个单独的二进制文件即可运行,没有复杂的依赖关系。功能特性:


  • 热加载配置,不需要重启网关进程;
  • HTTP连接的优雅关闭;
  • 支持OpenTracing,从而可以进行分布式跟踪;
  • 支持HTTP/2;
  • 可以针对每一个API实现断路器;
  • 重试机制;
  • 流控,可以针对每一个用户或key;
  • CORS过滤,可以针对具体的API;
  • 多种开箱即用的验证协议支持,比如JWT、OAuth 2.0和Basic Auth;
  • Docker Image支持。


4. .NET

Ocelot

项目地址:https://github.com/ThreeMammals/Ocelot


功能特性:路由、请求聚合、服务发现(基于Consul或Eureka)、服务Fabric、WebSockets、验证与鉴权、流控、缓存、重试策略与QoS、负载均衡、日志与跟踪、请求头、Query字符串转换、自定义的中间处理、配置和管理REST API。


5. Node.js

Express Gateway

项目地址:

https://github.com/ExpressGateway/express-gatewayhttps://www.express-gateway.io/

Express Gateway是一个基于Node.js开发,使用Express和Express中间件实现的REST API网关。

功能特性:

  • 动态中心化配置;
  • API消费者和凭证管理;
  • 插件机制;
  • 分布式数据存储;
  • 命令行工具CLI。


MicroGateway

项目地址:

https://github.com/strongloop/microgatewayhttps://developer.ibm.com/apiconnect

StrongLoop是IBM的一个子公司,MicroGateway网关基于Node.js/Express和Nginx构建,作为IBM API Connect,同时也是IBM云生态的一部分。MicroGateway是一个聚焦于开发者,可扩展的网关框架,它可以增强我们对微服务和API的访问能力。

核心特性:

  • 安全和控制,基于Swagger(OpenAPI)规范;
  • 内置了多种网关策略,API Key验证、流控、OAuth 2.0、JavaScript脚本支持;
  • 使用Swagger扩展(API Assembly)实现网关策略(安全、路由、集成等);
  • 方便地自定义网关策略。


此外,MicroGateway还有几个特性:

  • 通过集成Swagger,实现基于Swagger API定义的验证能力;
  • 使用datastore来保持需要处理的API数据模型;
  • 使用一个流式引擎来处理多种策略,使API设计者可以更好地控制API的生命周期。


核心架构如图7-9所示。


百亿流量微服务网关的设计与实现(4)


四大开源网关的对比分析


1. OpenResty/Kong/Zuul 2/SpringCloud Gateway重要特性对比

各项指标对比如表7-1所示。


百亿流量微服务网关的设计与实现(4)


以限流功能为例:

  • Spring Cloud Gateway目前提供了基于Redis的Ratelimiter实现,使用的算法是令牌桶算法,通过YAML文件进行配置;
  • Zuul2可以通过配置文件配置集群限流和单服务器限流,也可通过Filter实现限流扩展;
  • OpenResty可以使用resty.limit.count、resty.limit.conn、resty.limit.req来实现限流功能,可实现漏桶或令牌通算法;
  • Kong拥有基础限流组件,可在基础组件源代码基础上进行Lua开发。


对Zuul/Zuul 2/Spring Cloud Gateway的一些功能点分析可以参考Spring Cloud Gateway作者Spencer Gibb的文章:https://spencergibb.netlify.com/preso/detroit-cf-api-gateway-2017-03/


2. OpenResty/Kong/Zuul 2/SpringCloudGateway性能测试对比

分别使用3台4Core、16GB内存的机器,作为API服务提供者、Gateway、压力机,使用wrk作为性能测试工具,对OpenResty/Kong/Zuul 2/SpringCloud Gateway进行简单小报文下的性能测试,如图7-10所示。


百亿流量微服务网关的设计与实现(4)


图7-10


图中纵坐标轴是QPS,横轴是一个Gateway的数据,每根线是一个场景下的不同网关数据,测试结论如下:


  • 实测情况是性能SCG~Zuul 2 << OpenResty~< Kong << Direct(直连);
  • Spring Cloud Gateway、Zuul 2的性能差不多,大概是直连的40%;
  • OpenResty、Kong的性能差不多,大概是直连的60%~70%;
  • 大并发下,例如模拟200并发用户、1000并发用户时,Zuul 2会有很大概率返回出错。
上一篇:python 如何使用pip安装第三方软件


下一篇:又找到安装Python第三方模块的好法子