【云原生】Gateway网关选型

news2024/11/18 1:29:12

网关一般分为流量网关和业务网关,流量网关负责接入所有的流量,并分发给不同的子系统,那在具体的业务接入之前,还有一层业务网关。

流量网关提供全局性的、与后端业务应用无关的策略,例如 HTTPS证书卸载、Web防火墙、全局流量监控、日志记录、黑白名单控制、接入请求到业务系统的负载均衡等,比如Kong。

业务网关业务紧耦合的、提供单个业务域级别的策略,如服务治理、身份认证,权限控制、日志输出、数据加密、熔断限流等等,比如K8s的Ingress。

流量网关负责南北向流量调度及安全防护,业务网关负责东西向流量调度及服务治理。

这张图展示了一个多层 Gateway 架构,其中有一个总的 Gateway 接入所有的流量(流量网关),并分发给不同的子系统,还有第二级 Gateway 用于做各个子系统的接入 Gateway(业务网关)。可以看到,网关所管理的服务力度可粗可细。通过网关,我们可以把分布式架构组织成一个星型架构,由网络对服务的请求进行路由和分发。但是随着k8s的普及,Ingress 成为 K8s 生态的网关标准,促使流量网关和业务网关,合二为一。

常见的网关

  • Nginx

k8s已经将Nginx与Ingress Controller合并为一个组件: ingress-nginx-controller

  • OpenResty

Nginx + Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

  • Kong

It is based on Nginx and OpenResty. Kong or Kong API Gateway is a cloud-native, platform-agnostic, scalable API Gateway distinguished for its high performance and extensibility via plugins.

By providing functionality for proxying, routing, load balancing, health checking, authentication (and more), Kong serves as the central layer for orchestrating microservices or conventional API traffic with ease.

Kong runs natively on Kubernetes thanks to its official Kubernetes Ingress Controller.

The top Kong features include:

  • Advanced routing, load balancing, health checking - all configurable via a RESTful admin API or declarative configuration.

  • Authentication and authorization for APIs using methods like JWT, basic auth, OAuth, ACLs and more.

  • Proxy, SSL/TLS termination, and connectivity support for L4 or L7 traffic.

  • Plugins for enforcing traffic controls, rate limiting, req/res transformations, logging, monitoring and including a plugin developer hub.

  • Sophisticated deployment models like Declarative Databaseless Deployment and Hybrid Deployment (control plane/data plane separation) without any vendor lock-in.

  • Native ingress controller support for serving Kubernetes.

  • Apisix

It is based on Nginx and OpenResty. APISIX 是一个微服务API网关,具有高性能、可扩展性等优点。它基于 nginx(openresty)和 Lua 实现功能,借鉴了Kong的思路,将Kong底层的关系型数据库(Postgres)替换成了NoSQL型的 etcd,这使得 APISIX 相较于 Kong 在性能上有了很大提升,在启用各类插件的情况下,Apache APISIX 的性能是 Kong 的 10 倍,且Apisix是100%开源的,它的功能和Kong收费版的功能相当。

功能

APISIX

KONG

反向代理和路由

支持

支持

负载均衡

支持

支持

身份验证和授权

支持

支持

IP列表白名单/黑名单

支持

支持

限速和流控

支持

支持

请求变形

支持

支持

版本控制

支持

支持

断路器

支持

支持

多协议支持

支持

支持

缓存

支持

支持

数据库存储

etcd

Postgres/Cassandra

  • Zuul

Zuul是Netflix公司开源的,使用了一系列不同类型的过滤器,被构建来支持动态路由、监视、弹性和安全性,使我们能够快速灵活地将功能应用到服务中。Zuul采用同步阻塞架构,依赖多线程来支持吞吐量的增长,性能较低。

  • Zuul2

Netflix宣布了通用API网关Zuul的架构转型。Zuul原本采用同步阻塞架构,转型后叫作Zuul2,采用异步非阻塞架构。Zuul2和Zuul1在架构方面的主要区别在于,Zuul2运行在异步非阻塞的框架上,比如Netty。性能比Zuul高20%左右。

  • Spring Cloud Gateway

SpringCloud Gateway是基于WebFlux框架实现的,而WebFlux框架底层则使用了高性能的Reactor模式通信框架Netty。在于高并发 非阻塞式通信的话就非常有优势了。它的目标是提供统一的路由方式且也是基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控/指标,和限流、反向代理、鉴权、流量控制、熔断、日志监控... 是SpringCloud团队研发的,能够很好的融入到SpringCloud产品中。

  • Envoy

Envoy was purpose-built to have a dynamic configuration API (no more config files and hot-reloads with dropped connections!), fine-grained visibility into backends with Service/Endpoint Discovery, and exceptional performance and tight tail-latency since it’s based on C++. These are very important considerations for organizations using modern proxy technology in performant and highly dynamic (ie, cloud) environments.

Lastly, Envoy is supported by hundreds of companies and is also where the innovation is happening in L7 proxies. Envoy was one of the first proxies to support HTTP2/gRPC on both sides of the connection, Web Assembly (for dynamic extension), and more recently, the HTTP 3 protocol.

性能对比

基于 Java 的异步化 API 网关

Kong

APISIX

Envoy Gateway

从以上性能数据可以看出,相同条件下:

  • Envoy 的 TPS 可以达到 12W 左右;

  • 基于 Java 的异步化 API 网关最高可到 2.8W 左右;

  • 基于 Nginx 的 Kong,TPS 可以到 5W 左右;

  • 基于 Nginx 并相较 Kong 有一定优化的 APISIX 可以到 9W 左右。

小结

1、Zuul2和SpringCloudGateway性能不够,且对应用框架有侵入,不考虑

2、Kong 和 Apisix 都是基于 Lua + nginx(OpenResty) 的,这在2010年之前是常见的方式,插件也丰富,非常实用,而且 Apisix 的性能也很强劲。但是随着不断拥抱云原生,他们的这种技术则变得过时老旧。

3、Envoy毕业于CNCF孵化器,是继Kubernetes和Prometheus之后的第三位CNCF毕业生,重新定义了网关的定位和能力,被誉为云原生网关,甚至被称之为下一代网关,已经有很多公司(Google、Alibaba、Wangyi)在积极布局做背书

  • 它是一个轻量级的7层服务代理,围绕应用程序运行,通常采用sidecar样式,并提供服务发现和动态配置功能以及支持gRpc的负载平衡功能。

  • 并且Envoy还对前端/边缘代理支持,在边缘使用相同的软件有很大的好处(可观察性、管理、相同的服务发现和负载平衡算法等)。 Envoy 具有一个功能集,使其非常适合作为大多数现代 Web 应用程序用例的边缘代理。这包括HTTP/1.1 HTTP/2 和 HTTP/3 支持,以及 HTTP L7 路由(能够根据路径、权限、内容类型、运行时及参数值等对请求进行路由和重定向)。

基于这两点,Envoy可以让南北和东西流量合并,不仅可以用做统一的流量网关,也可类似Service Mesh,采用sidecar样式,对应用做些基础设施的功能,比如负载均衡,降级熔断等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/389077.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[vue]vue3.x 组合式API不同写法

[vue]vue3.x 组合式API不同写法改进后组合API实际实际使用中的疑问组件名称问题两种写法的优缺点对比优点缺点组合式API,采用了更加灵活的方式,官网推荐的语法糖,但仅限于比较简单的单文件,作为尝试 改进后组合API实际实际使用中的疑问 改进…

4-2 Linux进程和内存概念

文章目录前言进程状态进程优先级内存模型进程内存关系前言 进程是一个其中运行着一个或多个线程的地址空间和这些线程所需要的系统资源。一般来说,Linux系统会在进程之间共享程序代码和系统函数库,所以在任何时刻内存中都只有代码的一份拷贝。 进程状态…

36_2 On Chip Bus —— AXI总线介绍

目录 1.AXI总线介绍(读2写3) 1.1流量控制 1.2 AXI signals 信号线 1.3重点信号线的介绍 1.4原子操作——让读改写一套操作 永远是一个master对一个slave 1.5AXI BURST Boundary——一个burst不能跨4k boundary,master要保证 1.6读/写通…

k8s中的PV和PVS

前言:容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题。首先,当容器崩溃时,kubelet 会重启它,但是容器中的文件将丢失——容器以干净的状态(镜像最初的状态)…

Python 算法交易实验51 Step2 Signals 信号生成

说明 不可不读书 先从经典的一些超简单信号开始 使用移动平均指标SMA(算术) 给出了信号的产生方法,还有一些测算结果,反正看起来都是盈利的 首先使用离线方法实验一组结果,然后就使用ADBS来进行类似的处理。 内容 1 原理分析…

【python中的列表和元组】

文章目录前言一、列表及其使用1.列表的特点2. 列表的使用方法二、元组及其特点1.元组的类型是tuple1.元组的查找操作2. 计算元组某个元素出现的次数3.统计元组内元素的个数总结前言 本文着重介绍python中的列表和元组以及列表和元组之间的区别 一、列表及其使用 1.列表的特点…

JavaSE学习进阶day2_02 抽象类和接口

第四章 抽象类 4.1 概述 4.1.1 抽象类引入 先看一张图: 这张图时之前学习继承时用的,但是现在有一个疑问,吃饭这个行为猫和狗都有,但是它们吃的东西却又不同,这个时候我们不能确定父类吃饭这个方法到底该写什么&…

数据库分库分表策略

一、MySQL扩展具体的实现方式 随着业务规模的不断扩大,需要选择合适的方案去应对数据规模的增长,以应对逐渐增长的访问压力和数据量。 关于数据库的扩展主要包括:业务拆分、主从复制,数据库分库与分表。这篇文章主要讲述数据库分库…

03-SQLPlus的常用命令和使用

本章内容讲解SQLPlus的常用命令使用方法,参数的设置,帮助的使用,详细讲解如下: 登录SQL*Plus DOS方式登录SQL*Plus C:\>sqlplus 提示输入用户名、密码 C:\>sqlplus scott/tiger 连到默认数据库,注册表或环境变量中设 …

Blender——植物生长动画制作

效果图前言参考链接:https://www.bilibili.com/video/BV1aY411G7bk/?spm_id_from333.788.recommend_more_video.10&vd_source5212838c127b01db69dcc8b2d27ca517建议Blender的版本在3.0.0或以上。制作完成的植物生长动画blender文件下载:https://dow…

SpringCloud之ElasticSearch笔记

ElasticSearch 初识ElasticSearch ElasticSearch是什么 ElasticSearch一个基于Lucene的底层的开源的分布式搜索引擎,可用来实现搜索,日志统计,分析,系统监控 正向索引和倒排索引 正向索引:逐条扫描(my…

Databend v1.0 Release 正式发布

尊敬的 Databenders,在 Databend Labs 成立两周年之际,我们非常高兴地宣布 Databend v1.0 正式发布。 Databend 社区一直在致力于解决大数据分析的成本和复杂度问题,并正在被顶级场景和顶级需求所推动。 根据可统计信息,每天约 7…

2023年“中银杯”安徽省职业院校技能大赛网络安全A模块全过程解析

A模块基础设施设置/安全加固(200分) 一、项目和任务描述: 假定你是某企业的网络安全工程师,对于企业的服务器系统,根据任务要求确保各服务正常运行,并通过综合运用登录和密码策略、流量完整性保护策略、事件监控策略、防火墙策略等多种安全策略来提升服务器系统的网络安全…

K8S 实用工具之三 - 图形化 UI Lens

开篇 📜 引言: 磨刀不误砍柴工工欲善其事必先利其器 第一篇:《K8S 实用工具之一 - 如何合并多个 kubeconfig?》第二篇:《K8S 实用工具之二 - 终端 UI K9S》 像我这种,kubectl 用的不是非常溜,经…

指针面试笔试题练习

前言 🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏: 🍔🍟🌯 c语言进阶 🔑个人信条: 🌵知行合一 🍉本篇简介:>:介绍c语言中有关指针更深层的知识. 金句分享: ✨星光…

webGL编程指南实战教程

学习路线: 如果你是在校大学生,有足够的时间去学习:前端>数学(几何线性代数)>图形学>webgl>shader >threejs>three.js源码如果你是工作中使用,需要快速出产成品:前端>thr…

【博学谷学习记录】超强总结,用心分享 | 架构师 JDK源码学习总结

文章目录HashMap类1.定义2.哈希表3.JDK1.8前HashMap的数据结构4.JDK1.8后HashMap的数据结构5.类构造器6.字段属性①Node<K,V>[] table②size③loadFactor④threshold7.构造函数①默认无参构造函数②指定初始容量的构造函数8.确定哈希桶数组索引位置9.添加元素10.扩容机制…

操作系统重难点笔记

1.信号量机制&#xff0c;读者/写者问题 读者/写者问题分为两种情况&#xff1a; 1.读者和写者互斥&#xff0c;并且不同的读者和写者之间都互斥,一共三个互斥 下面给出伪代码 int m1; int mr1; int mw1; int count0; writer() {while(1){P(mw);........V(mw);} } reader() {…

防止暴力破解ssh的四种方法

一. 方法介绍 防止暴力破解的四种方法&#xff1a; 1 密码要写的足够的复杂&#xff0c;通常建议将密码写16位&#xff0c;并且无连贯的数字或者字母&#xff1b;当然也可以固定一个时间修改一次密码&#xff0c;推荐是一个月修改一次会稳妥一些2 修改ssh的端口号&#xff0c;…

【剧前爆米花--爪哇岛寻宝】MySQL中索引和事务

作者&#xff1a;困了电视剧 专栏&#xff1a;《MySQL数据库》 文章分布&#xff1a;这是一篇关于Java中异常类的文章&#xff0c;在本篇文章中详细讲解了异常的使用逻辑和底层的执行过程&#xff0c;如有疏漏&#xff0c;欢迎大佬指正&#xff01; 目录 索引 用法 底层逻辑…