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.dns
  higress.io/ignore-path-case: "false"
labels:
  higress.io/resource-definer: higress
rules:
- http:
    paths:
    - backend:
        resource:
          apiGroup: networking.higress.io
          kind: McpBridge
          name: default
      path: /get
      pathType: Exact

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

小结

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

相关推荐
爱上语文几秒前
苍穹外卖 添加购物车接口
java·数据库·spring boot·后端·mybatis
2401_857600952 分钟前
现代Web酒店客房管理:基于Spring Boot的实现
前端·spring boot·后端
阿里云云原生7 分钟前
ApsaraMQ Serverless 能力再升级,事件驱动架构赋能 AI 应用
人工智能·架构·serverless
清风絮柳32 分钟前
13.音乐管理系统(基于SpringBoot + Vue)
vue.js·spring boot·后端·毕业设计·前后端分离·音乐播放系统
2401_854391081 小时前
安康旅游网站:SpringBoot设计与实现详解
spring boot·后端·旅游
陈序缘1 小时前
Rust实现Kafka - 前言
开发语言·分布式·后端·职场和发展·rust·kafka
陈序缘2 小时前
Rust 力扣 - 48. 旋转图像
开发语言·后端·算法·leetcode·职场和发展·rust
小宇学编程2 小时前
M1 Pro MacBook Pro 上的奇遇:Rust 构建失败,SIGKILL 惊魂记
后端·rust·编译问题·编译失败·cargo build
Elastic 中国社区官方博客2 小时前
GraphQL 与 Elasticsearch 相遇:使用 Hasura DDN 构建可扩展、支持 AI 的应用程序
大数据·后端·elasticsearch·搜索引擎·全文检索·graphql·1024程序员节
罗小爬EX2 小时前
GraphQL系列 - 第1讲 GraphQL语法入门
数据库·后端·graphql