当前位置: 首页 > news >正文

开源免费的API网关介绍与选型

api网关的主要作用

API网关在现代微服务架构中扮演着至关重要的角色,它作为内外部系统通信的桥梁,不仅简化了服务调用过程,还增强了系统的安全性与可管理性。例如,当企业希望将内部的服务开放给外部合作伙伴使用时,直接暴露这些服务会带来诸多风险,如数据泄露、非法访问等。通过部署API网关,可以实现统一的身份验证和授权机制,确保只有经过认证的请求才能到达后端服务;同时,API网关支持流量控制、负载均衡等功能,有助于提高系统的稳定性和响应速度。此外,对于开发者而言,API网关提供了统一的服务入口点,简化了文档维护工作,并使得版本管理和日志记录更加便捷高效。总之,API网关是构建安全可靠且易于扩展的分布式应用不可或缺的一部分。

API网关的核心功能

API网关作为现代应用架构中的关键组件,主要提供了几大核心功能。

首先是协议转换能力,它能够将HTTP请求转换为内部服务可以理解的格式,比如从RESTful API到gRPC的调用,使得前端与后端服务之间的交互更加灵活;

其次是安全隔离,通过设置访问控制策略(如基于JWT的身份验证)来保护后端资源不被未授权访问;

接着是流量控制,例如限制每分钟内来自特定IP地址的请求数量,以防止因突发流量而导致的服务崩溃;

API管理方面,支持开发者定义、发布和版本化API接口,便于团队协作及对外提供标准化服务接口。这些功能共同确保了后端服务的安全性、稳定性和可维护性。

有哪些主流的API网关

API网关作为微服务架构中的重要组件,帮助开发者更高效地管理、保护和监控API。目前市场上存在多种主流的API网关解决方案,各具特色:

  • Kong:Kong是一个非常受欢迎的选择,它基于Nginx构建,支持插件化扩展,易于配置且功能强大,适用于微服务、容器或云原生环境下的API管理>
  • Apache APISIX 是另一个高性能的开源API网关,以其低延迟和高吞吐量著称,支持多种协议包括HTTP、gRPC等,并提供了灵活的安全性和流量控制选项。
  • Tyk 则专注于为开发者提供一个简单易用但又极其强大的API管理和分析平台,通过其模块化的设计允许企业快速自定义功能。
  • Spring cloud Gateway:亚马逊提供的全托管服务,与AWS生态系统无缝集成,适合构建无服务器应用。
  • Higress:阿里巴巴推出的新一代云原生网关,基于Envoy开发,专注于简化多集群及混合云场景下的流量管理和治理问题,支持七层路由、灰度发布、服务网格等多种功能。

以上这些就是主流的API网关

API网关选型的主要考虑要素

在API网关选型中,需要考虑的一些主要的因素有:

生态兼容性是API网关选型时的重要考量之一。在企业级应用环境中,系统往往不是孤立存在的,而是需要与各种不同的技术栈、云服务及第三方平台进行集成。因此,选择一个具有良好生态兼容性的API网关可以确保其能够无缝对接现有的IT基础设施和服务,促进不同组件间的通信和数据交换,从而降低开发成本,加快项目上线速度。

性能对于API网关来说同样至关重要。随着业务规模的增长,API请求量可能会呈指数级上升。这就要求API网关必须具备处理高并发访问的能力,在保证响应时间的同时还能维持低延迟。优秀的性能不仅关乎用户体验的好坏,也是支持大规模分布式架构的关键因素之一。

扩展性则是指API网关是否容易根据需求变化而调整其功能或规模。随着业务发展,新功能的添加或是对现有功能的修改都不可避免。如果所选用的API网关具有良好的扩展性,则可以在不影响现有服务运行的情况下轻松地做出这些更改,帮助企业更加灵活地应对市场变化和技术迭代。

安全性,API网关作为所有外部请求进入内部系统的第一个接触点,自然承担着保护后端资源免受恶意攻击的责任。它应该提供包括但不限于认证授权、流量控制、加密传输等功能来确保只有经过验证并被允许的操作才能被执行,同时还要能够检测并阻止潜在的安全威胁,比如SQL注入、DDoS攻击等,以此构建起一道坚固的信息安全防线。

Higress 介绍:来自阿里的开源 API网关

Higress 作为来自阿里巴巴的开源 API 网关,基于阿里多年在网关领域的实战经验构建而成。

它遵循开源 Ingress/Gateway API 标准,展现出卓越的生态兼容性,支持 Nacos、Dubbo、spring cloud 、K8s Service 等多种服务和注册中心的一键配置,便于集成进现有的微服务架构中。

针对性能优化方面,Higress 在面对超大规模路由配置与转发场景时表现出色,即使拥有 10000 个路由配置,也能保证在 3 秒内完成更新生效,并且相较于 Ingress Nginx,在 CPU 和内存成本上分别节省了约 50% 和 90%,极大提升了资源使用效率。

此外,其出色的扩展能力允许用户通过 Java 编程模型进行定制化开发,并支持动态配置热更新,使得运维更加灵活便捷。

在安全性上,Higress 全面支持 key-auth、hmac-auth、jwt-auth 等主流鉴权机制,确保数据传输的安全可靠。

作为一个完全开源免费的产品,Higress 不仅为开发者提供了强大而高效的工具,同时也彰显了阿里致力于回馈社区的决心。

Higress具体使用样例-基于docker的单机版快速部署

Higress是一款由阿里云开源的服务网格入口网关,它提供了高性能、易用性以及强大的安全特性。本教程将指导你如何使用Docker来快速部署一个单机版本的Higress,并通过创建一个简单的“Hello World”服务来验证安装。

准备工作
  • 确保你的系统上已安装了Docker。
  • 基础了解Docker容器技术。
  • 有一个可以运行Docker命令的终端或命令行工具。
步骤 1: 安装并启动Higress

首先,你需要从Docker Hub拉取最新的Higress镜像,并以容器的形式运行它。

# 拉取最新版的Higress Docker镜像
docker pull higress/higress-gateway:latest# 运行Higress网关容器
docker run -d --name higress-gateway \-p 80:80 -p 443:443 \higress/higress-gateway:latest

这里,-p 80:80 -p 443:443 参数用于映射主机上的80和443端口到容器内的相同端口,使得可以通过这些端口访问Higress提供的服务。

步骤 2: 配置Higress

为了使Higress能够转发流量给后端的应用程序(如我们的"Hello World"服务),我们需要配置路由规则。这通常通过发送HTTP请求到Higress的管理API来完成。

假设我们想让所有发往http://localhost/ 的请求都被重定向至我们的"Hello World"服务,你可以按照以下步骤进行配置:

  1. 获取Higress的管理接口地址:默认情况下,Higress的管理API位于 http://<Higress_IP>:9090/apisix/admin。如果你是在本地机器上直接运行Higress,那么IP应该是 127.0.0.1 或者是 localhost
  1. 创建路由规则
    使用curl命令向Higress发送一个POST请求来添加路由规则。这条命令会告诉Higress把所有根路径 / 上的请求都转到目标URL http://hello-world-service:8080
curl -X POST http://localhost:9090/apisix/admin/routes/1 \-H 'Content-Type: application/json' \-d '{"uri":"/","upstream":{"type":"roundrobin","nodes":{"hello-world-service:8080":1}}}'
步骤 3: 启动Hello World服务

现在让我们创建一个非常简单的“Hello World”应用程序。这里我们将使用Python Flask框架作为例子,但你可以选择任何其他语言和技术栈。

# hello_world.py
from flask import Flask
app = Flask(__name__)@app.route('/')
def hello():return "Hello, world!"if __name__ == '__main__':app.run(host='0.0.0.0', port=8080)

保存文件为 hello_world.py 并在同一目录下创建一个名为 Dockerfile 的文件,内容如下:

FROM python:3.8-slimWORKDIR /appCOPY . /appRUN pip install flaskCMD ["python", "hello_world.py"]

构建并运行你的服务容器:

docker build -t hello-world-service .
docker run -d --name hello-world-app -p 8080:8080 hello-world-service

此时,你应该能够通过浏览器或者curl命令访问 http://localhost/ 来看到 "Hello, world!" 的响应了。


higress也支持使用k8s等方式来做部署和集成,具体可以去higress官网查询。

相关文章:

开源免费的API网关介绍与选型

api网关的主要作用 API网关在现代微服务架构中扮演着至关重要的角色&#xff0c;它作为内外部系统通信的桥梁&#xff0c;不仅简化了服务调用过程&#xff0c;还增强了系统的安全性与可管理性。例如&#xff0c;当企业希望将内部的服务开放给外部合作伙伴使用时&#xff0c;直…...

OpenCV视觉分析之目标跟踪(5)目标跟踪类TrackerMIL的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 MIL 算法以在线方式训练分类器&#xff0c;以将目标从背景中分离出来。多重实例学习&#xff08;Multiple Instance Learning&#xff09;通过在…...

二级列表联动

介绍 本示例主要介绍了List组件实现二级联动&#xff08;Cascading List&#xff09;的场景。 该场景多用于商品种类的选择、照片不同类型选择等场景。 效果图 使用说明&#xff1a; 滑动二级列表侧控件&#xff08;点击没用&#xff09;&#xff0c;一级列表随之滚动。&…...

「C/C++」C++ 标准库 之 #include<sstream> 字符串流库

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…...

深入理解跨域资源共享(CORS)安全问题原理及解决思路

目录 引言 CORS 基础 CORS 安全问题原理 解决思路 结论 引言 跨域资源共享&#xff08;CORS, Cross-Origin Resource Sharing&#xff09;是现代Web应用中不可或缺的一部分&#xff0c;特别是在前后端分离的架构中。CORS允许一个域上的Web应用请求另一个域上的资源&#…...

【汽车租聘管理与推荐】Python+Django网页界面+推荐算法+管理系统网站

一、介绍 汽车租聘管理与推荐系统。本系统使用Python作为主要编程语言&#xff0c;前端采用HTML、CSS、BootStrap等技术搭建前端界面&#xff0c;后端采用Django框架处理用户的请求。创新点&#xff1a;使用协同过滤推荐算法实现对当前用户个性化推荐。 其主要功能如下&#…...

Linux常见指令大全(必要+知识点)

目录 ls 指令☑️ 在Windows中会自动显示当前目录当中的所有子目录与文件&#xff0c;但是在Linux中要用到ls指令。 语法&#xff1a; ls [选项][目录或文件] 功能&#xff1a;对于目录&#xff0c;该命令列出该目录下的所有子目录与文件。对于文件&#xff0c;将列出文件名以…...

iOS用rime且导入自制输入方案

iPhone 16 的 cantonese 只能打传统汉字&#xff0c;没有繁简转换&#xff0c;m d sh d。考虑用「仓」输入法 [1] 使用 Rime 打字&#xff0c;且希望导入自制方案 [2]。 仓输入法有几种导入方案的方法&#xff0c;见 [3]&#xff0c;此处记录 wifi 上传法。准备工作&#xff1…...

Linux 进程终止 进程等待

目录 进程终止 退出码 错误码 代码异常终止(信号详解) exit _exit 进程等待 概念 等待的原因 wait 函数原型 参数 返回值 监控脚本 waitpid 概念 函数原型 参数 返回值 WIFEXITED(status) WEXITSTATUS(status) 问题 为什么不用全局变量获得子进程的退出信…...

VBA 64位API声明语句第003讲

跟我学VBA&#xff0c;我这里专注VBA, 授人以渔。我98年开始&#xff0c;从源码接触VBA已经20余年了&#xff0c;随着年龄的增长&#xff0c;越来越觉得有必要把这项技能传递给需要这项技术的职场人员。希望职场和数据打交道的朋友&#xff0c;都来学习VBA,利用VBA,起码可以提高…...

【问题记录】解决VMware虚拟机中鼠标侧键无法使用的问题

前言 有项目需要在Linux系统中开发&#xff0c;因为要测试Linux中相关功能&#xff0c;要用到shell&#xff0c;在Windows中开发太麻烦了&#xff0c;因此我选择使用UbuntuXfce4桌面来开发&#xff0c;这里我用到了Linux版本的IDEA&#xff0c;除了快捷键经常和系统快捷键冲突…...

Naive UI 级联选择器 Cascader的:render-lable怎么使用(Vue3 + TS)(鼠标悬停该条数据的时候展示全部内容)

项目场景&#xff1a; 在渲染Cascader级联选择器后&#xff0c;当文字过长的时候&#xff0c;多出来的部分会显示成省略号&#xff0c;这使我们不能很清晰的看到该条数据的完整信息&#xff0c;就需要加一个鼠标悬停展示完整内容。 解决方案&#xff1a; vue&#xff1a; &l…...

vue元素里面的 js对象中,:style后面里属性名不支持这种带-的写法(background-color)

首先要知道&#xff0c;在这个:style里面&#xff0c;虽然可以用 {属性: 属性值 , 属性: 属性值} 这种方方式来写很多属性&#xff0c;但也仅限于width这种普通属性&#xff0c;像background-color这种带-的特殊标签是不支持直接写的&#xff1b; <div class"box&quo…...

Git 常用命令与开发流程总结

引言 在我之前面试过程中&#xff0c;经常会问到关于公司使用什么代码版本管理工具。 无非是考察咱们是否用过 Git和SVN。 现在公司选择的工具直接影响到项目的开发流程和协作效率。当前市面上&#xff0c;Git 和 SVN&#xff08;Subversion&#xff09;是两种流行的版本控制系…...

链表中插入新的节点

/* 节点结构体定义 */ struct xLIST_ITEM {TickType_t xItemValue; /* 辅助值&#xff0c;用于帮助节点做顺序排列 */ struct xLIST_ITEM * pxNext; /* 指向链表下一个节点 */ struct xLIST_ITEM * pxPrevious; /* 指向链表前一个节点 */ void * pvOw…...

AUTOSAR从入门到精通-BswM模块(二)

目录 前言 算法原理 BswM接口端口 BswM功能描述 模式仲裁 仲裁规则(Arbitration Rules) 模式仲裁来源 模式仲裁过程 模式条件(ModeCondition) 逻辑表达式(LogicExpressions) 模式控制 模式处理 操作执行 模式控制过程 模式控制基本流程 BswM Interfaces and …...

Spring DispatcherServlet详解

文章目录 Spring DispatcherServlet详解一、引言二、DispatcherServlet的初始化与工作流程1、DispatcherServlet的初始化1.1、加载配置和建立WebApplicationContext1.2、初始化策略 2、DispatcherServlet的工作流程2.1、请求分发2.2、代码示例 三、总结 Spring DispatcherServl…...

JS | 软件制作的流程是什么?

目录 一、 需求分析 二、 系统设计 三、 编码实现 四、 测试验证 五、 部署上线 六、 维护更新 软件制作的流程主要包含需求分析、系统设计、编码实现、测试验证、部署上线和维护更新。其中&#xff0c;需求分析是基础&#xff0c;它决定了软件的功能和性能&#xff1b;通…...

简单工厂模式

引言 简单工厂模式并不属于23种设计模式&#xff0c;它是工厂方法模式的“小弟”&#xff0c;由于日常编程中大家会经常用到&#xff0c;只不过没有察觉&#xff0c;因此下文将详解简单工厂模式。 1.概念 简单工厂模式(Simple Factory Pattern)&#xff1a;又称为静态工厂方法(…...

【django】Django REST Framework 序列化与反序列化详解

目录 1、什么是序列化和反序列化&#xff1f; 2、Django REST Framework中的序列化和反序列化 3、安装与配置&#xff08;第10章是从零开始&#xff09; 3.1 安装 3.2 配置 4、基本使用 4.1 创建序列化器 4.2 使用序列化器&#xff08;将数据序列化返回给前端&#xff…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文通过代码驱动的方式&#xff0c;系统讲解PyTorch核心概念和实战技巧&#xff0c;涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...

MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释

以Module Federation 插件详为例&#xff0c;Webpack.config.js它可能的配置和含义如下&#xff1a; 前言 Module Federation 的Webpack.config.js核心配置包括&#xff1a; name filename&#xff08;定义应用标识&#xff09; remotes&#xff08;引用远程模块&#xff0…...

WEB3全栈开发——面试专业技能点P4数据库

一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库&#xff0c;基于 mysql 库改进而来&#xff0c;具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点&#xff1a; 支持 Promise / async-await&#xf…...

LangChain【6】之输出解析器:结构化LLM响应的关键工具

文章目录 一 LangChain输出解析器概述1.1 什么是输出解析器&#xff1f;1.2 主要功能与工作原理1.3 常用解析器类型 二 主要输出解析器类型2.1 Pydantic/Json输出解析器2.2 结构化输出解析器2.3 列表解析器2.4 日期解析器2.5 Json输出解析器2.6 xml输出解析器 三 高级使用技巧3…...

生信服务器 | 做生信为什么推荐使用Linux服务器?

原文链接&#xff1a;生信服务器 | 做生信为什么推荐使用Linux服务器&#xff1f; 一、 做生信为什么推荐使用服务器&#xff1f; 大家好&#xff0c;我是小杜。在做生信分析的同学&#xff0c;或是将接触学习生信分析的同学&#xff0c;<font style"color:rgb(53, 1…...

NineData数据库DevOps功能全面支持百度智能云向量数据库 VectorDB,助力企业 AI 应用高效落地

NineData 的数据库 DevOps 解决方案已完成对百度智能云向量数据库 VectorDB 的全链路适配&#xff0c;成为国内首批提供 VectorDB 原生操作能力的服务商。此次合作聚焦 AI 开发核心场景&#xff0c;通过标准化 SQL 工作台与细粒度权限管控两大能力&#xff0c;助力企业安全高效…...