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

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 官网查阅相关文档。

相关文章:

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

微服务网关核心作用就是协议转换、安全隔离和流量控制 微服务架构中,API网关作为系统的入口点,可以统一处理所有客户端请求。 1)协议转换:它能够支持多种通信协议(如HTTP、gRPC等)之间的相互转换&#xff…...

[0154].第5节:IDEA中创建Java Web工程

我的后端学习大纲 IDEA大纲 1.1.IDEA中配置Tomcat: 1.找打setting: 2.配置Tomcat Server的位置: 3.这里配置Tomcat的名称以及配置应用服务器的位置。根据自己Tomcat的安装位置决定 4.配置好后,如下图所示 1.2.创建Web工程: 1.建…...

React03 组件 Props

组件 & Props React 组件函数( Function )组件类( Class )组件 Props将 props 传递给子组件在子组件中读取 props给 prop 指定一个默认值使用 JSX 展开语法传递 props React 组件 组件本质上就是类和函数,但是与常…...

多线程——线程安全的集合类

目录 前言 一、多线程环境使用 ArrayList 1.进行加锁 2.使用 SynchronizedList 类 3.使用 CopyOnWriteArrayList 类 二、多线程环境使用队列 1.进行加锁 2.使用阻塞队列 三、多线程环境使用哈希表 1.Hashtable 2.ConcurrentHashMap (1)缩小锁…...

自动化数据库管理:如何通过存储过程动态创建 MySQL 对象

在当今数据驱动的世界中,高效的数据库管理至关重要。本文将展示如何通过存储过程自动化地创建各种 MySQL 数据库对象,包括数据表、视图、字段、索引、约束、存储过程、定时器和事件。通过这些方法,我们可以快速响应业务需求,提高数…...

480p 720p 1080p 2k 4k 8k 12k分辨率视频分别占用多大带宽?

技术背景 好多开发者,在设置视频编码参数的时候,对不同分辨率的带宽设置,缺乏相关的经验,实际上,视频分辨率与所需带宽之间的关系受到多个因素的影响,包括视频编码方式、帧率、视频内容的动态程度等。下面…...

unity中GameObject介绍

在 Unity 中,Cube和Sphere等基本几何体是 Unity 引擎的内置预制体(Prefabs),它们属于 Unity 中的GameObject 系统,可以在 Unity 的 Hierarchy 视图或 Scene 视图中右键点击,然后在弹出的菜单中选择 3D Obje…...

洛谷——P8468 [Aya Round 1 C] 文文的构造游戏(01构造问题)

P8468 [Aya Round 1 C] 文文的构造游戏 题目描述 [Aya Round 1 C] 文文的构造游戏 - 洛谷 运行代码&#xff08;暴力枚举&#xff09;——超时 #include <stdio.h> #define ll long long const int N 1e6 5; // 计算数组元素的异或和 ll xorSum(ll arr[], int n) {l…...

双击热备和负载均衡的区别

区别&#xff1a; 双机热备 (heartbeat)&#xff1a;对同一应用来讲&#xff0c;永远是主机应用启动&#xff0c;备机应用停止的一主一备模式(两台通常叫双击热备&#xff0c;多台称为高可用) 负载均衡&#xff1a;两台/多台服务器 上同一个应用系统同时工作&#xff0c;分担负…...

如何使用 cPanel 部署 WordPress临时网站

对于依赖WordPress站点或WooCommerce商店的企业来说&#xff0c;在生产环境中直接修改站点风险很大。而WordPress的临时网站是一个更安全的选择&#xff0c;可以通过使用临时网站进行编辑来规避风险。 在本文中&#xff0c;我们将详细介绍WordPress临时网站的相关知识、使用临时…...

Android 自定义 Dialog 实现列表 单选,多选,搜索

前言 在Android开发中&#xff0c;通过对话框让用户选择&#xff0c;筛选信息是很方便也很常见的操作。本文详细介绍了如何使用自定义 Dialog、RecyclerView 以及自定义搜索框 来实现选中状态和用户交互&#xff0c;文中大本分代码都有明确注释&#xff0c;主打一个简单明了&a…...

下载地址合辑(持续更新)

下载地址合辑 汇总OSG相关地址Visual Studio Qt 地址qt插件安装失败 Boost库boost库编译步骤 FFmpeg 地址osg编译库 常用的下载地址&#xff1a; 汇总 vlc 地址&#xff1a; https://www.videolan.org/vlc/index.zh_CN.html visual 地址&#xff1a;https://my.visualstudio.…...

Android Kotlin 高阶函数详解及其在协程中的应用

文章目录 1. 引言2. 什么是高阶函数&#xff1f;3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda 表达式3.3 匿名函数3.4 返回函数 4. 高阶函数的深入用法4.1 函数组合4.2 内联函数4.3 高阶扩展函数 5. Kotlin 高阶函数的对比优势5.1 与 Java 的对比5.2 与 JavaScript 的…...

CSS基础—网页布局(重点!)

1、两列布局 &#xff08;1&#xff09;概念 经典两列布局是指一种网页布局方式&#xff0c;其中一列宽度固定&#xff0c;另一列宽度自适应。‌ 这种布局方式在网页设计中非常常见&#xff0c;因为它能够提供良好的视觉效果和用户体验。 如图所示&#xff1a; 页面顶部放置一…...

【Fargo】17:vs工程转qt构建:QT6 不支持32bit转向qt5.15.2

vs2022的console 工程加入qt支持后使用qt15.2 的vs2019 库,变为一个qt界面程序。最终效果 一些参考 qt5的项目搭建 qt5 最多支持到vs2019 qt6 最新 已经支持vs2022 国内还是以qt5.15为主 升级qt的vstools...

​智能电表蓝牙芯片方案

RAMSUN基于自研射频技术和基带算法提供蓝牙MCU。蓝牙MCU配套成熟的网络协议栈和丰富的示例代码及多平台APP工具。部分芯片型号无需二次开发&#xff0c;即连即用&#xff1b;提供特色蓝牙/串口/USB三通芯片&#xff0c;为更多复杂无线应用赋能。 应用案例说明: BLE方便用户直接…...

miRNA分析流程学习(一)/TCGAmiRNA数据下载

miRNA&#xff08;microRNA&#xff09; 是一种小的非编码 RNA 分子&#xff0c;通常由 20 到 24 个核苷酸组成。miRNA 主要存在于动植物中&#xff0c;并在基因表达调控中起到关键作用。它们通过与特定的信使 RNA&#xff08;mRNA&#xff09;分子结合来抑制基因表达&#xff…...

西南大学软件专硕考研难度分析!

C哥专业提供——计软考研院校选择分析专业课备考指南规划 西南大学软件工程学硕近三年呈现出招生规模稳定、复试线稳中有升的特点。2024届实际录取8人&#xff0c;复试分数线305分&#xff0c;复试录取率67%&#xff0c;相比去年复试线略有下降但仍高于2022届&#xff0c;显示出…...

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

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-21 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-21目录1. The Fair Language Model Paradox摘要研究背景问题与挑战如何解决创新点算法模型实验效果重要数据与结论推荐阅读指数&…...

安全芯片 OPTIGA TRUST M 使用介绍与示例(基于STM32裸机)

文章目录 目的资料索引硬件电路软件框架介绍数据存储框架移植框架使用 使用示例示例地址与硬件连接通讯测试功能测试 总结 目的 OPTIGA TRUST M 是英飞凌推出的安全芯片&#xff0c;芯片通提供了很多 slot &#xff0c;用于存放各类安全证书、密钥、用户数据等&#xff0c;内置…...

【AI换装整合及教程】CatVTON:时尚与科技的完美融合

在当今数字化时代&#xff0c;时尚行业正经历着一场前所未有的变革&#xff0c;而 CatVTON 作为一款由中山大学、Pixocial 等机构联合研发的轻量化 AI 虚拟换装工具&#xff0c;无疑是这场变革中的璀璨明星。 一、独特的技术架构 CatVTON 基于 Stable Diffusion v1.5 inpainit…...

接口测试(七)jmeter——参数化(RandomString函数)

一、RandomString函数 需求&#xff1a;模拟10个用户注册 1. 【工具】–>【函数助手对话框】 2. 选择RandomString函数 假设手机号码前3位设置为固定数值136&#xff0c;后8位可用RandomString函数随机产生数值 ① Random string length&#xff1a;8&#xff08;随机长度…...

simple_php

访问靶场 这里传入a和b参数&#xff0c;绕过三个if即可拿到flag a a a_GET[ a’ ];中是抑制报错信息的。 第一个if非常的抽象&#xff0c; if($a0 and $a){echo $flag1; }处理a 要输出flag1,a0&#xff0c;但是&#xff0c;在php中0被视为假也就是Flase 如果a0&#xff0…...

网络搜索引擎Shodan(4)

声明&#xff1a;学习视频来自b站up主 泷羽sec&#xff0c;如涉及侵权马上删除文章 声明&#xff1a;本文主要用作技术分享&#xff0c;所有内容仅供参考。任何使用或依赖于本文信息所造成的法律后果均与本人无关。请读者自行判断风险&#xff0c;并遵循相关法律法规。 感谢泷…...

【Flask】一、安装与第一个测试程序

目录 Flask简介 安装Flask 安装pip&#xff08;Python包管理器&#xff09; 使用pip安装Flask 验证安装 创建Flask程序 创建应用 运行 访问测试 Flask简介 Flask是一个用Python编写的轻量级Web应用框架。它被设计为易于使用和扩展&#xff0c;使其成为构建简单网站或复…...

R语言笔记(二):向量

文章目录 一、Data structure: vectors二、Indexing vectors三、Re-assign values to vector elements四、Generic function for vectors五、Vector of random samples from a distribution六、Vector arithmetic七、Recycling八、Element-wise comparisons of vectors九、Comp…...

信息安全工程师(71)隐私保护技术与应用

前言 隐私保护技术是指通过一系列的技术手段来保护人们的隐私不被公开泄露。随着数字化和网络化社会的发展&#xff0c;个人隐私的保护变得尤为重要&#xff0c;隐私保护技术也因此得到了广泛的应用和发展。 一、隐私保护技术概述 隐私保护技术主要包括数据加密技术、身份认证技…...

层和块学习

1.生成一个网络&#xff0c;其中包含一个具有256个单元和ReLU激活函数的全连接隐藏层&#xff0c;然后是一个具有10个隐藏单元且不带激活函数的全连接输出层。 import torch from torch import nn from torch.nn import functional as Fnet nn.Sequential(nn.Linear(20, 256)…...

Zookeeper面试整理-源码及实现细节

Zookeeper 的源码和实现细节是理解其高可用性、分布式一致性和高效性的关键。以下是 Zookeeper 的核心实现细节,涵盖其架构、关键模块、以及具体的代码实现机制。 1. Zookeeper 架构 Zookeeper 采用 Leader-Follower 架构,集群由多个节点组成。主要分为三种角色:Leader、Fol…...

岭回归的MATLAB步骤

MATLAB 实现框架&#xff0c;它涵盖了从数据导入到岭回归的步骤&#xff0c;包括计算共线性、使用 MAE、MSE、R、MAPE 进行评价&#xff0c;以及绘制相应的可视化图表。 1. 数据导入 首先&#xff0c;导入你的 Excel 文件 data.xlsx。假设前面的列是因变量&#xff08;特征&a…...

盘锦做网站价格/营销案例分析

概念Java中数组属于引用类型。数组使用场合较多&#xff0c;对于数组的操作具有一定重复性&#xff0c;例如&#xff1a;数组拷贝&#xff0c;转换字符串&#xff0c;转换成数组&#xff0c;排序等等。既然重复的操作与需求多&#xff0c;那么对于数组操作的支持就成了JDK中的一…...

做cpa用什么网站/网站百度权重

在使用Ueditor时&#xff0c;如要简化工具栏上的按钮&#xff0c;可以修改配置项的方法&#xff1a; 1. 方法一&#xff1a;修改 ueditor.config.js 里面的 toolbars 2. 方法二&#xff1a;实例化编辑器的时候传入 toolbars 参数 我一般用第二种方法&#xff0c; <script sr…...

wordpress+获得子类id/2023新闻大事件摘抄

有人说改系统配置文件&#xff0c;虽说对geek们没啥&#xff0c;但是有一个更方便的方法&#xff0c;更好记。只需记住一个软件&#xff1a; GNOME Color Chooser。 安装完这个软件之后&#xff0c;选择Specific标签&#xff0c;更改Tooltips中的前景色&#xff08;字体颜色&…...

用照片做的ppt模板下载网站好/建设优化网站

扑飞动漫是一款会更新上线各种各样精品动漫内容供大家去免费看的软件&#xff0c;这里有许许多多的资源支持大家缓存到本地&#xff0c;无需会员看全章节的内容都是可以的&#xff0c;在这里你将有着更好的阅读体验感&#xff0c;全方位的给用户们带来了追漫画的便利&#xff0…...

市场营销一般在哪上班/安卓优化大师官方版

命令简介&#xff1a;该命令用来列出目前与过去登录系统的用户相关信息。指令所在路径&#xff1a;/usr/bin/last 执行last指令时&#xff0c;它会读取位于/var/log目录下名称为wtmp的文件&#xff0c;并把该给文件的内容记录的登录系统的用户名单全部显示出来。默认是显示wtmp…...

研发网站要多长时间/搜索引擎优化的分类

此文是依据赵磊在【QCON高可用架构群】中的分享内容整理而成。转载请事先联系赵磊及相关编辑。 赵磊&#xff0c;Uber高级project师&#xff0c;08年上海交通大学毕业。曾就职于微软。后添加Facebook主要负责Messenger的后端消息服务。这个系统在当时支持Facebook全球5亿人同一…...