美文网首页
业务网关技术选型和预研

业务网关技术选型和预研

作者: NealLemon | 来源:发表于2023-03-21 21:35 被阅读0次

    开源API网关汇总

    目前开源API Gateway 种类繁多,简单搜罗了几个比较火的开源项目:

    • Lua:

      • Kong:Kong 是一个高性能的 API 网关和微服务管理平台,支持多种协议和服务发现。它使用 Nginx 作为代理,提供了可扩展的插件系统和 API 管理界面。与 APISIX 相比,Kong 具有更多的插件和功能,但也更加复杂。
      • APISIX是一个高性能、可扩展和开源的API网关,由Apache基金会孵化而来。它提供了丰富的功能和灵活的插件系统,可以轻松地进行API管理、流量控制和安全认证等操作。APISIX可以在多种部署方式下使用,如裸机、Docker、Kubernetes等,同时也提供了RESTful API和CLI命令行工具,方便用户进行管理和配置。APISIX的核心组件是基于OpenResty和Lua语言开发的,具有优秀的性能和灵活性,可以轻松地满足不同场景下的需求。
    • Go:

      • Tyk:Tyk 是一个快速、可扩展和开放的 API 网关,支持多种协议和后端服务。它有一个灵活的插件系统和管理界面,可以轻松地进行 API 管理、授权和监控。与 APISIX 相比,Tyk 更加轻量级和易于使用。
      • Traefik: Traefik支持多种后端,包括Docker,Swarm,Kubernetes,Marathon,Mesos和Consul等容器和编排平台。通过使用Traefik,您可以将HTTP请求动态路由到不同的后端服务,实现服务发现和负载均衡。此外,Traefik还支持HTTPS,自动证书管理,熔断,限流等功能。
      • eolinker/apinto: 有企业级也有开源的项目,Apinto是一个基于 Golang 开发的微服务网关,能够实现高性能 HTTP API 转发、多租户管理、API 访问权限控制等目的,拥有强大的自定义插件系统可以自行扩展,能够快速帮助企业进行 API 服务治理、提高 API 服务的稳定性和安全性。未来我们将提供插件市场,通过Apinto强大的插件拓展能力,用户可像乐高积木一样根据需要自行拓展Apinto的插件,丰富Apinto的能力。
    • Java:

      • Zuul: Zuul 2.0是Netflix OSS中的第二代Zuul,它是基于Netty构建的非阻塞反向代理,支持异步I/O和事件驱动。Zuul 2.0使用过滤器来拦截请求并对其进行处理,提供了许多内置的过滤器,例如路由过滤器,重试过滤器,限流过滤器等。除了标准的反向代理功能之外,Zuul 2.0还支持WebSocket,服务发现和动态路由等功能。但是,Zuul 2.0的开发和维护由于Netflix OSS项目的停止而被放缓,社区支持也逐渐减少。
      • Spring Cloud Gateway: Spring Cloud Gateway是Spring Cloud生态系统中的一个项目,它是一个基于异步非阻塞模型的API网关。Spring Cloud Gateway使用Spring Framework 5和Project Reactor构建,支持动态路由,请求过滤,限流等功能。它支持多种后端服务,可以轻松地与Spring Cloud中的其他组件进行集成。Spring Cloud Gateway提供了简单的Java API和函数式路由定义,也支持自定义过滤器和路由器。

      以上几个开源项目是我目前了解到的比较主流的API-Gateway。这里不包含纯云原生网关。可以看得出来 大部分的网关都使用Lua/openresty和Go语言开发的,有这天然的高并发的特性。而使用Java开发的网关尽管有JIT的特性,但是还是无法与脚本语言和Go语言的性能相比。但是使用Java开发的网关并非毫无优点,有句话说得好,没有最优只有最合适。比如美团技术团队,也是根据公司的情况而演化出他们的 Shepherd

    选型Spring Cloud Gateway

    我们主要方向是业务网关,那么不仅要根据公司业务或者战略方向解决当前的痛点,同时也要结合当前使用的技术,用最短的时间和人力做最正确的事情。

    选择Spring Cloud Gateway 主要原因是:

    • 大部分公司或者企业级项目目前的微服务技术解决方案都是Spring Cloud。
    • 较高性能和高可靠性:Spring Cloud Gateway使用了WebFlux和Reactor等技术,支持异步非阻塞I/O操作,能够处理大量并发请求,具有高性能和高可靠性。
    • 灵活的路由策略:Spring Cloud Gateway支持多种路由策略,可以根据请求路径、请求头、请求参数等条件进行路由,也可以使用自定义的过滤器进行路由。
    • 可插拔的过滤器:Spring Cloud Gateway支持自定义过滤器,可以在请求转发前或转发后进行一些额外的操作,如身份验证、限流、日志记录等。
    • 集成了Spring Cloud组件:Spring Cloud Gateway与Spring Cloud组件集成良好,可以与Eureka、Consul等注册中心、Ribbon、Hystrix等负载均衡和熔断器组件进行集成。
    • 易于扩展和定制:Spring Cloud Gateway使用Java配置和代码编程方式进行路由和过滤器的配置,易于扩展和定制。
    • Java 语言强大的生态库加持。

    当然Spring Cloud Gateway也有缺点:

    • 相对于其他网关,云原生支持不友好。
    • 无法作为流量网关,性能无法与基于Lua和Go语言开发的网关相提并论。
    • 占用服务器资源较高: 与脚本语言和Go语言相比,需要更多的服务器资源。
    • 路由以及过滤器配置性能阈值较明显,当存在大量API并且复杂的路由策略时,处理性能较低,如图所示:
    springGateway分析.jpg

    其实归根结底 最重要的是Spring Cloud Gateway是Java语言开发的,更适合扩展业务插件,虽然Lua和Go 性能很高,但是针对复杂的业务插件,由于语言本身的问题,性能并不会很高。

    选型监控组件以及存储

    监控组件

    监控组件选择目前主流的APM项目 : Apache SkyWalking 。无论是新老项目,只要是JAVA开发的,它可以JAVA SPI机制加载,可以无侵入集成到项目上,收集日志以及链路追踪信息。 目前由于Skywalking社区太过庞大,我们可以只使用apache/skywalking-java 来进行集成和自定义日志收集。

    日志收集组件

    日志收集组件选择elastic家族的elastic/beatselastic/logstash

    原因有以下几点:

    1. 轻量级:Filebeat是一款轻量级的工具,它的安装包非常小,而且占用系统资源非常少,因此可以轻松地部署在任何服务器上,不会影响服务器的性能。
    2. 灵活性:Filebeat支持多种数据源和输出目的地,用户可以根据自己的需要配置不同的输入和输出,而且Filebeat还支持多种数据格式,如JSON、CSV等。
    3. 实时性:Filebeat可以实时地监控日志文件的变化,并将新的日志信息传输到指定的目的地,这意味着您可以及时地获取最新的日志信息,从而更快地发现问题。
    4. 可靠性:Filebeat使用TCP协议传输日志信息,这意味着它具有很高的可靠性,而且还可以自动重试失败的传输操作,从而确保数据的完整性和可靠性。
    5. 易于使用:Filebeat具有简单的配置文件,用户只需要进行基本的配置就可以开始使用它,而且Filebeat还提供了多种插件,可以轻松地扩展其功能。

    消息中间件

    Kafka作为日志消息的消息中间件,这个不需要多做解释了吧。

    存储

    • Elasticsearch:用于近期日志搜索和分析。
    • Hadoop: 用于历史数据的分析、搜索。
    • S3(或块存储): 用于原日志文件的备份归档。

    系统架构图

    架构图.jpg 系统架构图.jpg

    相关文章

      网友评论

          本文标题:业务网关技术选型和预研

          本文链接:https://www.haomeiwen.com/subject/kitvrdtx.html