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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 百亿流量微服务网关的设计与实现(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所示。


image.png


四大开源网关的对比分析


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

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


微信图片_20220123185621.jpg


以限流功能为例:

  • 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所示。


微信图片_20220123185627.jpg


图7-10


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


  • 实测情况是性能SCG~Zuul 2 << OpenResty~< Kong << Direct(直连);
  • Spring Cloud Gateway、Zuul 2的性能差不多,大概是直连的40%;
  • OpenResty、Kong的性能差不多,大概是直连的60%~70%;
  • 大并发下,例如模拟200并发用户、1000并发用户时,Zuul 2会有很大概率返回出错。
相关文章
|
4天前
|
敏捷开发 负载均衡 监控
探索微服务架构下的API网关设计与实践
【5月更文挑战第31天】本文将深入剖析微服务架构中的关键组件——API网关,探讨其设计理念、核心功能以及在实际项目中的应用。我们将从API网关的基本概念出发,逐步展开对其路由、负载均衡、认证授权、监控日志等方面的详细讨论,并结合实际案例,分析如何高效地实现和管理一个稳定的API网关。
|
4天前
|
缓存 监控 安全
微服务架构下的API网关设计与实践
【5月更文挑战第31天】本文深入探讨了在微服务架构中,API网关的核心作用与设计策略。通过分析网关的职责、选型标准及实现细节,文章为读者提供了一套完整的API网关解决方案。同时,结合具体案例,展示了如何在实际应用中有效部署和优化API网关,确保系统的高可用性和可扩展性。
|
4天前
|
监控 应用服务中间件 API
探索微服务架构中的API网关模式
【5月更文挑战第31天】在这篇文章中,我们将深入探讨微服务架构中的关键组件——API网关。我们将了解API网关的定义、功能以及它如何优化微服务的通信流程,提高安全性和性能。此外,我们还将讨论一些常见的API网关实现技术,并分析它们的优势和局限性。
|
4天前
|
监控 安全 API
微服务架构下的API网关设计原则
【5月更文挑战第31天】在本文中,我们将深入探讨微服务架构下API网关的设计原则。API网关作为微服务架构的入口点,其设计至关重要。我们将从性能、安全性、可扩展性等方面进行分析,并提出一些实用的设计建议。
|
4天前
|
负载均衡 测试技术 API
探索微服务架构中的API网关
【5月更文挑战第31天】在这篇文章中,我们将深入探讨微服务架构中的一个关键组件——API网关。我们将了解它的定义、作用以及如何有效地实现它。此外,我们还将讨论一些最佳实践和可能遇到的挑战。
|
4天前
|
运维 负载均衡 安全
探索微服务架构下的API网关设计与实现
【5月更文挑战第31天】在这篇文章中,我们将深入探讨微服务架构的关键组成部分——API网关。通过分析API网关的核心功能、设计原则以及实现技术,本文旨在为读者提供一个关于如何构建和维护高效、可靠的API网关的全面视角。我们将从API网关的基本概念出发,逐步深入到其在微服务架构中的作用,以及如何选择合适的技术栈来实现这一目标。最后,我们将通过一个具体的案例分析,展示API网关在实际项目中的应用和优化策略。
|
4天前
|
负载均衡 监控 安全
探索微服务架构中的API网关模式
本文深入探讨了在构建现代软件系统时,微服务架构中API网关的核心作用和实践策略。通过分析API网关的设计原则、实现技术以及面临的挑战,旨在为读者提供一套清晰的指导方针,以便在实际应用中有效地利用API网关来提升系统的可扩展性、安全性和性能。
|
5天前
|
负载均衡 监控 API
微服务架构中的API网关模式
本文将深入探讨微服务架构中的一个重要组件——API网关。我们将了解API网关的作用、实现方式以及它如何提高系统的可扩展性和安全性。通过实际案例分析,我们将展示API网关在微服务架构中的应用和优势。
|
6天前
|
负载均衡 监控 Kubernetes
构建高效微服务架构:API网关与服务发现的融合实践
【5月更文挑战第29天】 在当今的软件开发领域,微服务架构已成为一种流行的设计模式,其通过将应用程序拆分为一系列小型、自治的服务来提供灵活性和可扩展性。然而,随着服务数量的增加,确保通信效率和管理便捷性成为了关键挑战。本文聚焦于如何通过API网关和服务发现机制的有效整合,优化微服务间的交互,提高系统整体性能和可靠性。我们将探讨API网关在请求路由、负载均衡、安全性增强方面的作用,同时分析服务发现对于实现服务间动态通信的重要性,并展示两者如何协同工作以支持复杂的后端系统需求。
|
6天前
|
负载均衡 监控 API
构建高效微服务架构:API网关与服务发现的融合实践
【5月更文挑战第29天】 在微服务架构中,服务的分布式特性要求精确的服务发现机制和灵活的流量控制手段。本文将探讨如何通过合并API网关和服务发现功能来优化后端服务的通信效率,降低延迟,并提升系统的可伸缩性。我们将分析传统模式下两者独立运作的弊端,并提出一种集成方案,该方案不仅能够简化系统架构,还能增强服务的自愈能力。文章还将讨论实施过程中可能遇到的挑战及相应的解决策略。