开源免费的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官网查询。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPF+MVVM案例实战(十七)- 自定义字体图标按钮的封装与实现(ABC类)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1、案例效果1、按钮分类2、ABC类按钮实现1、文件创建2、字体图标资源3、自定义依赖属性4、按钮特效样式实现 3、按钮案例演示1、页面实现与文件创建2、依赖注入3 运…

使用MongoDB Atlas构建无服务器数据库

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用MongoDB Atlas构建无服务器数据库 MongoDB Atlas 简介 注册账户 创建集群 配置网络 设置数据库用户 连接数据库 设计文档模式…

【大语言模型】ACL2024论文-07 BitDistiller: 释放亚4比特大型语言模型的潜力通过自蒸馏

【大语言模型】ACL2024论文-07 BitDistiller: 释放亚4比特大型语言模型的潜力通过自蒸馏 目录 文章目录 【大语言模型】ACL2024论文-07 BitDistiller: 释放亚4比特大型语言模型的潜力通过自蒸馏目录摘要研究背景问题与挑战如何解决创新点算法模型实验效果代码推荐阅读指数&…

P9220 「TAOI-1」椎名真昼

P9220 「TAOI-1」椎名真昼 考点&#xff1a;博弈论、拓扑、强连通分量。 难度&#xff1a; 提高/省选- 。 题意&#xff1a; ​ Alice 和 Bob 玩游戏&#xff0c;给定一个有向图&#xff0c;每个点有初始颜色&#xff08;黑/白&#xff09;。 ​ 双方轮番操作一次&#xf…

计算机网络:网络层 —— 多播路由选择协议

文章目录 多播路由选择协议多播转发树构建多播转发树基于源树的多播路由选择建立广播转发树建立多播转发树 组共享树的多播路由选择基于核心的生成树的建立过程 因特网的多播路由选择协议 多播路由选择协议 仅使用 IGMP 并不能在因特网上进行IP多播。连接在局域网上的多播路由…

例行性工作

1、单一执行------at-----仅处理执行一次就结束了 1.1工作过程 /etc/at.allow&#xff0c;写在该文件的人可以使用at命令/etc/at.deny&#xff0c;黑名单两个文件如果都不存在&#xff0c;只有root能使用 1.2命令详解------命令格式&#xff1a;at [参数] [时间] 2、循环执行…

使用Kafka构建大规模消息传递系统

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用Kafka构建大规模消息传递系统 引言 Kafka 简介 安装 Kafka 创建主题 生产者 消费者 高级特性 分区 持久化 消费者组 消息确认…

【sqlmap使用】

sqlmap简介 sqlmap 目录结构 sqlmap常用参数 sqlmap实现注入 测试注入点&#xff0c;检测到注入点后&#xff0c;直接爆数据库名 python sqlmap.py –u http://172.16.12.2/7/9/strsql.php --data "usernameadmin" --dbs注意sqlmap在使用过程中可能会出现几个需要…

【java】java的基本程序设计结构07-字符串

字符串 1. 创建字符串 最简单的&#xff1a; String str "hello"; 用构造函数创建字符串&#xff1a; String str2new String("hello"); String 创建的字符串存储在公共池中&#xff0c;而 new 创建的字符串对象在堆上&#xff1a; 注意: String 类…

数组排序简介-基数排序(Radix Sort)

基本思想 将整数按位数切割成不同的数字&#xff0c;然后从低位开始&#xff0c;依次到高位&#xff0c;逐位进行排序&#xff0c;从而达到排序的目的。 算法步骤 基数排序算法可以采用「最低位优先法&#xff08;Least Significant Digit First&#xff09;」或者「最高位优先…

w~Transformer~合集8

我自己的原文哦~ https://blog.51cto.com/whaosoft/12419881 #Batch Normalization 本文聚焦于Batch Normalization&#xff0c;Layer Normalization两个标准化方法&#xff0c;对其原理和优势等进行了详细的阐述。 这一篇写Transformer里标准化的方法。在Transformer中&am…

Hadoop——HDFS

什么是HDFS HDFS&#xff08;Hadoop Distributed File System&#xff09;是Apache Hadoop的核心组件之一&#xff0c;是一个分布式文件系统&#xff0c;专门设计用于在大规模集群上存储和管理海量数据。它的设计目标是提供高吞吐量的数据访问和容错能力&#xff0c;以支持大数…

废弃物分类分割系统:入门训练营

废弃物分类分割系统源码&#xff06;数据集分享 [yolov8-seg-C2f-DCNV2-Dynamic&#xff06;yolov8-seg-C2f-DWR等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Glob…

java项目之微服务在线教育系统设计与实现(springcloud)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的闲一品交易平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 微服务在线教育系统设计与…

拆换LED灯珠后测量是短路的,为何

今天更换灯珠遇到一个怪事情&#xff0c;拆换一颗好的灯珠上去&#xff0c;万用表测试是短路的。 后面测试电路板上面&#xff0c;中间的散热部分是跟二极管的正极想通的。而且恰恰此时&#xff0c;LED灯珠的散热部分是跟负极想通的。 遂将线路板上面的散热部分跟二极管正极割…

串口屏控制的自动滑轨(未完工)

序言 疫情期间自己制作了一个自动滑轨&#xff0c;基于无线遥控的&#xff0c;但是整体太大了&#xff0c;非常不方便携带&#xff0c;所以重新设计了一个新的&#xff0c;以2020铝型材做导轨的滑轨&#xff0c;目前2020做滑轨已经很成熟了&#xff0c;配件也都非常便宜&#x…

【NOIP提高组】Hankson的趣味题

【NOIP提高组】Hankson的趣味题 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; Hanks 博士是BT (Bio-Tech&#xff0c;生物技术) 领域的知名专家&#xff0c;他的儿子名叫Hankson。现在&#xff0c;刚刚放学回家的Hankson 正在思考一个有趣…

Matlab车牌识别课程设计报告(附源代码)

Matlab车牌识别系统 分院&#xff08;系&#xff09; 信息科学与工程 专业 学生姓名 学号 设计题目 车牌识别系统设计 内容及要求&#xff1a; 车牌定位系统的目的在于正确获取整个图像中车牌的区域&#xff0c; 并识别出车牌号。通过设计实现车牌识别系…

【Unity基础】初识UI Toolkit - 运行时UI

Unity中的UI工具包&#xff08;UI Toolkit&#xff09;不但可以用于创建编辑器UI&#xff0c;同样可以来创建运行时UI。 关于Unity中的UI系统以及使用UI工具包创建编辑器UI可以参见&#xff1a; 1. Unity中的UI系统 2. 初识UI Toolkit - 编辑器UI 本文将通过一个简单示例来…

【重生之我要苦学C语言】深入理解指针4

深入理解指针4 字符指针变量 指针指向字符变量 char ch w; char* p &ch;指针指向字符数组 char arr[10] "abcdef"; char* p arr;printf("%s\n", arr); printf("%s\n", p);结果是一样的 也可以写成&#xff1a; char* p "abc…