API网关的作用--为什么微服务需要一个API网关?

微服务网关核心作用就是协议转换、安全隔离和流量控制

微服务架构中,API网关作为系统的入口点,可以统一处理所有客户端请求。

1)协议转换:它能够支持多种通信协议(如HTTP、gRPC等)之间的相互转换,使得使用不同协议的服务可以无障碍地进行交互。例如,一个前端应用可能通过HTTP协议与微服务网关通信,而该网关则可以将请求转换成后端服务所使用的gRPC格式。

2)安全隔离:是另一个重要职责,简单说就是我们总不能把内部服务不加保护的直接对外暴露对吧?。微服务网关充当了外部请求与内部服务之间的一道屏障,确保只有经过认证和授权的流量才能到达指定的服务。这可以通过实现OAuth 2.0或JWT令牌验证来达成,保证了即使某个服务受到攻击,也不会影响到整个系统其他部分的安全性。

3)流量控制:微服务网关能够基于预设规则对访问频率进行限制,防止因突发大量请求导致的服务过载情况发生。比如设置每分钟最大请求数量阈值,一旦超过就自动拒绝额外请求或者将其排队处理,以此来保障系统的稳定运行。此外,还可以根据需要动态调整流量分配策略,实现更高效的资源利用。

微服务网关选型主要要考虑生态兼容、性能、扩展性、以及安全性四个方面

在选择微服务网关时,生态兼容性是一个极其重要的考量因素。这是因为微服务架构往往依赖于一系列的技术栈和工具链来支持其开发、部署及运维工作。一个具有良好生态兼容性的网关能够无缝集成到现有的技术体系中,无论是对Spring Cloud、Kubernetes等流行框架的支持,还是与其他监控、日志收集系统的整合能力,都能极大地简化系统架构复杂度,并降低维护成本。

性能对于微服务网关来说同样至关重要。作为所有外部请求进入内部服务集群的第一道门户,网关承担着流量分发的重要职责。高效处理高并发请求的能力不仅直接影响用户体验(如响应速度),还关系到整个系统的稳定性。因此,在选型过程中需要特别关注候选产品的吞吐量、延迟指标以及它们在高压环境下表现出来的鲁棒性。

扩展性也是评价一款优秀微服务网关不可或缺的标准之一。随着业务规模的增长或需求的变化,企业可能需要频繁调整其服务架构。这时,如果网关具备良好的水平扩展能力,就可以通过简单地增加节点数量来应对日益增长的访问压力;同时,支持灵活配置路由规则、自定义插件等功能也有助于满足个性化场景下的特殊要求。

安全性是任何网络组件都不容忽视的关键特性,尤其对于处于边界位置的微服务网关而言更是如此。它不仅需要提供基本的身份验证与授权机制以确保只有合法用户才能访问受保护资源,还需具备抵御常见攻击模式(如DDoS)的能力,并且能够实现细粒度的安全策略管理,比如基于API级别的访问控制。此外,随着数据隐私法规日益严格,确保传输过程中敏感信息不被泄露也成为了一个重要考量点。

Higress:来自阿里的有多年实战经验的开源微服务网关

Higress 是阿里巴巴基于多年实战经验打造的一款完全开源免费的智能 API 网关。它在生态兼容性方面表现出色,不仅遵循了开源 Ingress 和 Gateway API 标准,还支持 Nacos、Kubernetes Service 等多种注册中心,为用户提供了极大的灵活性。性能上,Higress 面向超大规模路由配置与转发进行了优化,能够处理 10000 个路由且生效时间仅需 3 秒,并且对比 Ingress Nginx,其 CPU 成本节省了 50%,内存成本节省了 90%。扩展性方面,Higress 支持动态配置热更新,并可以通过 Java 编程模型进行进一步的功能扩展,满足不同场景下的定制化需求。安全性方面,Higress 全面支持主流鉴权能力如 key-auth、hmac-auth、jwt-auth 等,确保服务的安全性。综上所述,阿里开源的 Higress 在多个关键维度上展现了强大的竞争力。

Higress具体部署样例(单机版)

前置条件

确保您的机器上已安装了 Docker。如果还未安装,可以参考 Docker 官方文档完成安装:Get Docker | Docker Docs

部署

Higress 仅需一个 Docker 容器即可启动,这为个人开发者提供了便利,既可以在本地学习,也可以用于简易站点搭建。

创建工作目录

首先,创建一个目录作为工作空间,存放 Higress 的配置文件。

mkdir higress
启动 Higress

接下来,通过以下命令运行 Higress,并将宿主机上的 higress 目录映射到容器内的 /data 目录下:

docker run -d --rm --name higress-ai -v ./higress:/data \-p 8001:8001 -p 8080:8080 -p 8443:8443  \higress-registry.cn-hangzhou.cr.aliyuncs.com/higress/all-in-one:latest

这里使用的端口包括:

  • 8001 端口:用于访问 Higress 控制台;
  • 8080 端口:网关 HTTP 请求入口;
  • 8443 端口:网关 HTTPS 请求入口。

登陆 Higress 控制台进行配置

  1. 打开浏览器,输入地址 http://127.0.0.1:8001 进入控制台。
  1. 首次访问时,需要初始化管理员账号。按照提示设置用户名和密码后,系统会自动跳转至登录页面。请用刚才设定的凭据登录。
  1. 登录后,点击左侧菜单栏中的“服务来源”,再点击右侧的“创建服务来源”。根据以下指导填写表单并提交:
    • 服务类型:选择 DNS域名
    • 服务名称:输入 httpbin
    • 服务端口:设置为 80
    • 域名列表:填写 httpbin.org
  1. 接下来,切换到“路由配置”选项卡,点击“创建路由”。依据下面的参数配置路由规则:
    • 路由名称:自定义,例如 my-route
    • 匹配规则:精确匹配,路径设为 /get
    • 目标服务:从下拉列表中选中 httpbin.dns

测试生效

为了验证上述配置是否成功,您可以尝试在浏览器中打开如下 URL:

http://127.0.0.1:8080/get

若一切正常,您应该能看到来自 httpbin.org 的响应,以 JSON 格式展示了请求的相关信息。

查看本地配置

Higress 支持标准的云原生路由 API(如 Ingress API 和 Gateway API)。上述通过控制台完成的配置会生成对应的 YAML 文件保存在 ./higress/ingresses 目录下。例如,对于上面创建的 my-route 路由,其对应的 my-route.yaml 文件内容大致如下:

annotations:higress.io/destination: httpbin.dnshigress.io/ignore-path-case: "false"
labels:higress.io/resource-definer: higress
rules:
- http:paths:- backend:resource:apiGroup: networking.higress.iokind: McpBridgename: defaultpath: /getpathType: Exact

这个文件定义了路由的基本属性,包括注解、标签以及具体的匹配规则等。

小结

至此,您已经完成了 Higress 的基本安装与初步配置。此方案非常适合开发环境下的快速试用或小型项目部署。当然,Higress 也支持使用 K8s 等方式进行更加复杂环境下的部署和集成,更多相关信息,请访问 Higress 官网查阅相关文档。

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

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

相关文章

React Native 持久化数据

在 React Native 中,持久化数据是指将数据保存在设备上,以便在应用重新启动后仍然可以访问。以下是一些常用的数据持久化方法: AsyncStorage: React Native 提供了 react-native-async-storage/async-storage 库,这是一…

如何初始化一个线上的GitHub仓库,在本地已有的仓库中上传到线上

如何初始化一个线上的GitHub仓库,在本地已有的仓库中上传到线上, 首先,先创建一个线上的仓库 本地有一个曾经的仓库,或者本地git init创建一个本地仓库 根据线上仓库的主页给的提示代码进行上传 代码如下: …or cr…

gateway 整合 spring security oauth2

微服务分布式认证授权方案 在分布式授权系统中,授权服务要独立成一个模块做统一授权,无论客户端是浏览器,app或者第三方,都会在授权服务中获取权限,并通过网关访问资源 OAuth2的四种授权模式 授权码模式 授权服务器将授…

(三)行为模式:11、模板模式(Template Pattern)(C++示例)

目录 1、模板模式含义 2、模板模式的UML图学习 3、模板模式的应用场景 4、模板模式的优缺点 5、C实现的实例 1、模板模式含义 模板模式(Template Method Pattern)是一种行为设计模式,它定义了一个操作中的算法骨架,将某些步骤…

LeetCode9:回文数

原题地址:. - 力扣(LeetCode) 题目描述: 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数 是指正序(从左向右)和倒序&#xff…

java 大集合切分成一个集合中有多个小集合

直接上代码 List<OtsAttendance> otsAttendanceList new ArrayList<>(); 举个例子 otsAttendanceList 该集合里面有很多个对象。 那么如果批量新增的话&#xff0c;不太好&#xff0c;需要拆分成, &#xff08;一个集合&#xff0c;然后泛型又是一个集合&#xf…

故障诊断 | CNN-ResNets滚动轴承故障诊断实例代码

故障诊断 | CNN-ResNets滚动轴承故障诊断实例代码 目录 故障诊断 | CNN-ResNets滚动轴承故障诊断实例代码效果一览基本介绍程序设计参考资料 效果一览 基本介绍 CNN-ResNets&#xff08;卷积神经网络-残差网络&#xff09;在滚动轴承故障诊断中是一种常用的方法。这种方法利用…

Docker 实践与应用举例教程:从入门到精通

Docker 实践与应用举例教程&#xff1a;从入门到精通 引言 在现代软件开发中&#xff0c;Docker 已成为一种不可或缺的工具。它通过容器化技术简化了应用的部署、管理和扩展&#xff0c;极大地提高了开发和运维的效率。本文将详细介绍 Docker 的基本概念、安装步骤、常用命令…

arm ubuntu22.04 安装es7.16.2

1、更新软件包 sudo apt update && sudo apt upgrade -y 2、安装jdk11 sudo apt install openjdk-11-jdk -y 安装查看版本 java -version 输出应该是这样的 openjdk version "11.0.11" 2021-04-20 OpenJDK Runtime Environment (build 11.0.119-Ub…

openjdk17 hotspot JVM解析class文件

##openjdk17 hotspot JVM解析class文件 ClassFileParser::parse_stream 解析字节码 void ClassFileParser::parse_stream(const ClassFileStream* const stream,TRAPS) {assert(stream ! NULL, "invariant");assert(_class_name ! NULL, "invariant");//…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-22

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-22 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-22目录1. PoisonedRAG: Knowledge corruption attacks to retrieval-augmented generation of large language models摘要创新点…

MySQL数据库学习指南

一、数据库的库操作 1、创建数据库 2、删除数据库 3、查看数据库 4、选择数据库 5、修改数据库 6、数据库备份与恢复 7、数据库的权限管理 二、数据库的表操作 1、创建表 2、删除表 3、修改表 4、查看表的结构 5、查看表的数据 6、创建索引 7、删除索引 8、约束…

Java程序设计:spring boot(8)——API ⽂档构建⼯具 - Swagger2

目录 1 环境整合配置 2 Swagger2 常⽤注解说明 2.1 Api 2.2 ApiOperation 2.3 ApiImplicitParams 2.4 ApiResponses 2.5 ApiModel 3 用户模块注解配置 3.1 Controller 使用注解 3.2 JavaBean 使用注解 4 Swagger2 接⼝⽂档访问 由于 Spring Boot 能够快速开发、便捷…

duilib的应用 在双屏异分辨率的显示器上 运行显示不出来

背景&#xff1a;win11&#xff0c;duilib应用&#xff0c;双显示器&#xff0c;两台分辨率相同&#xff0c;分别设置不同的缩放以后&#xff0c;应用运行以后&#xff0c;程序闪一下消失或者程序还在&#xff0c;但是UI显示不出来。 原因 窗口风格设置不合理&#xff0c;所以…

NumPy 数组合并与修改示例解析

一、代码示例 以下是完整的代码段: import numpy as np# 初始化两个数组 x 和 y x = np.array([[1.0, 2.0], [3.0, 4.0]]) y = np.array([[5.0, 6.0], [7.0, 8.0]])# 输出 x 和 y 的形状 print(x.shape, y.shape)# 沿第 0 轴(垂直方向)合并 x 和 y z = np.concatenate((x,…

2024.10.9华为留学生笔试题解

第一题无线基站名字相似度 动态规划 考虑用动态规划解决 char1=input().strip() char2=input().strip() n,m=len(char1),len(char2) dp=[[0]*(m+1) for _ in range(n+1)] #dp[i][j]定义为以i-1为结尾的char1 和以 j-1为结尾的char2 的最短编辑距离 setA = set(wirel@com) set…

如何用mmclassification训练多标签多分类数据

这里使用的源码版本是 mmclassification-0.25.0 训练数据标签文件格式如下&#xff0c;每行的空格前面是路径&#xff08;图像文件所在的绝对路径&#xff09;&#xff0c;后面是标签名&#xff0c;因为特殊要求这里我的每张图像都记录了三个标签每个标签用“,”分开&#xff0…

maven 仓库大全 ( <mirror> 配置)

目录 一 maven中央仓库地址 二 mavn settings.xml配置大全 1. 阿里云 2. 华为 3. maven中央仓库在中国的镜像 4. 中央仓库 5. maven.apache.org 中央仓库 6. 网易 7. tencent 8. 中国科技大学 9. 南京大学 10. 清华大学 11. 北京理工大学 12. 东软信息学院 13.中…

论文笔记(五十)Segmentation-driven 6D Object Pose Estimation

Segmentation-driven 6D Object Pose Estimation 文章概括摘要1. 引言2. 相关工作3. 方法3.1 网络架构3.2 分割流3.3 回归流3.4 推理策略 4. 实验4.1 评估 Occluded-LINEMOD4.1.1 与最先进技术的比较4.1.2 不同融合策略的比较4.1.3 与人体姿态方法的比较 4.2 在YCB-Video上的评…

linux指令笔记

bash命令行讲解 lyt &#xff1a;是用户名 iZbp1i65rwtrfbmjetete2b2Z :这个是主机名 ~ &#xff1a;这个是当前目录 $ &#xff1a;这个是命令行提示符 每个指令都有不同的功能&#xff0c;大部分指令都可以带上选项来实现不同的效果。 一般指令和选项的格式&#xff1a;…