网关三问:为什么微服务需要网关?什么是微服务网关?网关怎么选型?

文章整体介绍

本文旨在解答关于微服务网关的三个核心问题:

1)为什么需要网关?也即在何种场景下应采用微服务网关以优化系统架构;

2)什么是微服务网关?主要讲构成微服务网关的关键能力,包括但不限于流量管理、安全防护等;

3)怎么选微服务网关? 探讨一下,选择合适微服务网关时可以参考的一系列考量因素,帮助读者根据自身需求做出明智决策。

微服务网关的主要作用

微服务架构中,API网关作为所有客户端请求的单一入口点,简化了外部系统与内部服务之间的交互。

通过集中管理认证和授权逻辑,API网关增强了系统的安全性,比如只允许携带有效令牌的请求访问敏感数据或功能。

它还负责服务发现与路由,自动将客户端请求导向正确的后端服务,例如根据URL路径的不同将流量分发给订单处理、用户管理等不同服务。

此外,微服务API网关能够执行协议转换,使得使用不同通信协议的服务之间可以顺利交流,如将HTTP请求转换为gRPC调用。利用限流、熔断等机制,API网关有助于提高整个系统的稳定性和可靠性,防止因单个服务过载而导致整体性能下降。

最后,通过日志记录与监控功能,微服务API网关便于开发者追踪问题根源及优化用户体验。

微服务网关的核心功能

微服务网关作为连接外部请求与内部微服务的桥梁,具备多种核心功能。

1)协议转换:是其重要能力之一,例如将HTTP请求转化为gRPC调用,使得采用不同通信协议的服务能够无缝协作。

2)安全隔离:也是关键特性,通过提供认证、授权等机制防止未授权访问,比如利用JWT(JSON Web Token)验证用户身份,确保只有合法用户可以访问敏感数据或服务。

3)流量控制:是帮助系统应对高并发场景,如设置限流规则来限制每秒请求数量,避免因短时间内大量请求涌入而导致服务崩溃;同时支持熔断机制,在下游服务出现故障时快速切断请求链路,保护整个系统的稳定性。

这些功能共同作用,使微服务架构更加健壮和高效。

微服务网关选型的主要考虑要素与说明

在选择微服务网关时,有几个关键的要素是第一优先级要考虑的:

1)生态兼容性 : 是一个非常重要的考量因素。这是因为现代软件开发往往基于一系列技术栈和框架,一个能够良好地与现有生态系统集成的网关可以减少迁移成本,比如 如果能默认支持dubbo,那么就不再需要额外开发接口转换协议层了,这就减少了协作成本,促进团队间的协作效率。

2)性能:是评价任何网络组件的关键指标之一,在微服务架构中更是如此。高效处理请求的能力直接影响到用户体验以及整个系统的响应速度。优秀的微服务网关应该具备高吞吐量、低延迟的特点,能够在不牺牲服务质量的前提下支持大规模并发访问,确保应用程序即使在高峰时段也能平稳运行。

3)扩展性:对于构建可成长的应用程序至关重要。随着业务需求的变化和技术的发展,系统需要能够容易地添加新的功能或调整现有的配置以适应不断变化的需求。一个好的微服务网关应提供灵活的插件机制或者开放API接口,使得开发者可以根据实际场景定制化开发特定功能模块,同时也要支持水平扩展,通过增加实例数量来提升整体处理能力。

4)安全性:则是保障数据安全和服务稳定性的基础。在当前日益复杂的网络环境中,保护敏感信息免受未授权访问变得尤为重要。理想的微服务网关应当内置强大的认证授权机制(如OAuth2.0)、流量加密支持(例如TLS/SSL)等安全特性,并且能够有效地抵御常见的网络攻击(如DDoS攻击)。此外,它还需要提供细粒度的访问控制策略,允许管理员根据不同的用户角色设置相应的权限级别。

Higress:来自阿里的开源 微服务网关

Higress 作为阿里开源的智能 API 网关,Higress 源自阿里巴巴多年的实战经验,完全开源免费,是企业构建高效、安全微服务架构的理想选择。

在生态兼容性方面:它遵循 Ingress/Gateway API 标准,还支持 Nacos、Kubernetes Service 等多种注册中心,展现出强大的。

在性能方面:Higress 面向超大规模路由配置与转发,能够在3秒内处理10000个路由,并且相比 Ingress Nginx,CPU 成本节省50%,内存成本节省90%。

扩展性方面:Higress 支持动态配置热更新,并可通过 Java 编程模型进行扩展。安全性方面,Higress 全面支持主流鉴权能力如 key-auth、hmac-auth 和 jwt-auth。此外,。

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

以下将详细介绍如何利用Docker容器完成Higress的单机版快速部署,并通过一个简单的“Hello World”示例来验证安装与配置是否成功。整个过程包括了创建必要的网络服务、启动Higress核心组件以及设置基本路由规则等步骤。

前置条件

确保本机已安装好Docker。如果还未安装,请参考官方指南进行安装:Docker 安装指南。

部署步骤

  1. 创建工作目录:首先,在您的文件系统中创建一个新目录用于存放Higress相关的配置文件。
mkdir higress
  1. 拉取并运行Higress镜像:接下来,使用下面提供的命令从阿里云镜像仓库拉取最新的Higress全功能版本镜像,并将其作为Docker容器启动。此命令同时会将宿主机上的8001、8080和8443端口映射至容器内对应的服务端口。
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 UI控制台。
    • 8080端口:为HTTP请求入口。
    • 8443端口:则负责处理HTTPS协议下的通信。
  1. 登录到Higress控制台:打开浏览器输入http://127.0.0.1:8001地址访问Higress管理界面。首次访问时需要先初始化管理员账户信息。按照提示完成账号初始化流程后即可登录进入主控面板。
  1. 配置服务来源及域名
    • 在控制台左侧菜单栏找到“服务来源”,点击右侧的“创建服务来源”按钮,选择DNS域名类型,并填写相关信息如服务名、端口号等。
    • 接着切换到“域名管理”页面,添加一个新的域名记录,例如example.com
  1. 创建路由规则
    • 切换到“路由管理”视图,点击“创建路由”开始定义新的路由策略。这里可以指定匹配路径(比如/hello)、目标服务以及其他高级选项。
    • 对于“Hello World”测试案例来说,您可以简单地将该路由指向之前设定好的服务源之一。
  1. 验证部署结果:最后一步是检查一切是否按预期工作。尝试通过curl命令向刚配置好的路由发送请求以确认是否能正确接收到响应。
curl http://127.0.0.1:8080/hello -H 'host: example.com'

如果一切正常的话,你应该能看到类似“Hello, world!”的消息返回。

总结

通过上述步骤,我们已经成功实现了Higress基于Docker容器化的快速部署,并且验证了一个简单的Web应用接入场景。这只是一个起点,实际上Higress提供了更多强大的特性等待您去探索,比如支持多种注册中心、丰富的安全防护机制等等。另外,值得注意的是,除了当前介绍的独立运行模式外,Higress也支持使用Kubernetes等方式来做更复杂的集群部署与集成,具体详情可访问Higress官网查阅相关文档。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

再传上市消息,奇瑞汽车追赶智能电动的“风”

近日,彭博社引述消息指出,奇瑞控股集团已选择中金公司、广发证券、华泰国际负责安排旗下汽车子公司奇瑞汽车潜在的IPO事宜。奇瑞汽车最早或于明年在香港上市,期望IPO估值超1,000亿元人民币。知情人士表示,审议仍在进行中&#xff…

Compose 修改默认点击效果

Compose 默认点击效果修改 一、Compose的默认点击效果二、实现自己的点击效果 一、Compose的默认点击效果 使用Modifier.clickables可以使Text有点击效果 Text(text "我是Text", modifier Modifier.clickable {})源码分析,点击效果clickable方法中的in…

一文彻底理解 JavaScript 解构赋值

一、基本概念 为什么需要解构呢,先来看一个例子: const student {name: ZhangSan,age: 18,scores: {math: 19,english: 85,chinese: 100} };function displayInfo(student) {console.log(name:, student.name);console.log(math:, student.scores.mat…

k8s 综合项目笔记

综述 这篇笔记主要是为了记录下自己写 k8s 综合项目的过程。 由于自己之前已经写过简单的开发和运维项目,所以这里就结合一下,在搭建 k8s 集群后安装运维常用服务,比如 ansible 和 prometheus,用 NFS 实现数据存储同步&#xff0c…

CodeQL和数据流分析的简介

文章目录 前言一、CodeQL 简介二、编写污点跟踪查询扩展传播功能 总结 前言 最近,CodeQL使用非常广泛(GitHub 开发的一种强大的静态分析工具)来将代码扫描作为 CI/CD 管道的一部分。其核心是 QL 语言,它用于编写对代码进行推理的…

炒股VS炒CSGO游戏装备,哪个更好做

这个项目,赚个10%都是要被嫌弃的 虽然天天都在抒发自己对股市的看法,但自己自始至终也没有买进任何一支股票。之所以对这个话题感兴趣,着实是因为手上的游戏搬砖项目也是国际性买卖,跟国际形势,国际汇率挂钩&#xff…

k8s可以部署私有云吗?私有云部署全攻略

k8s可以部署私有云吗?K8S可以部署私有云。Kubernetes是一个开源的容器编排引擎,能够自动化容器的部署、扩展和管理,使得应用可以在各种环境中高效运行。通过使用Kubernetes,企业可以在自己的数据中心或私有云环境中搭建和管理容器…

鸿蒙开发融云demo消息时间格式化

鸿蒙开发融云demo消息时间格式化 融云没有提供鸿蒙版本带ui的,跟着我一步步搭建起来基本功能。 这次说消息时间格式化 一、消息时间格式化 先看下效果图: 二、关键代码: 看起来简单,但处理起来还是挺麻烦的 // 处理时间函数入…

​​CMU生成式人工智能大模型:从入门到放弃(七)

引言 在前面的系列博客中,我们探讨了生成式对抗网络(GANs)的基本原理和应用。今天,我们将深入探讨变分自编码器(VAEs),这是一种能够学习数据的低维表示并从中生成新数据的生成式模型。 变分自…

路由器 相关知识

一、路由器是什么 参考:图解系列--路由器和它庞大的功能_路由功能-CSDN博客 路由器是指:主要负责 OSI参考模型中网络层的处理工作,并根据路由表信息在不同的网络 之间转发IP 分组的网络硬件(图3-1)。这里的网络一般是指IP 子网,…

为Windows Terminal 配置zsh + Oh-My-Zsh!

参考: 为Windows Terminal 配置zsh Oh-My-Zsh! [非WSL] https://zhuanlan.zhihu.com/p/625583037 Package: zsh - MSYS2 Packages 安装配置 1、安装 Windows Terminal(必须) Method 1: 打开 Microsoft Store,搜索 “Windows Terminal”。点击 “…

修改el-table默认滚动条样式

el-table原有滚动条样式对有些用户来说太窄&#xff0c;拖动起来不方便&#xff0c;因此做出如下修改。 修改前的样式图&#xff1a; 修改后的样式图&#xff1a; 样式代码&#xff1a; <style lang"scss" scoped> ::v-deep ::-webkit-scrollbar {width: 6px;…

CSS易漏知识

复杂选择器可以通过&#xff08;id的个数&#xff0c;class的个数&#xff0c;标签的个数&#xff09;的形式&#xff0c;计算权重。 如果我们需要将某个选择器的某条属性提升权重&#xff0c;可以在属性后面写!important&#xff1b;注意!importent要写在;前面 很多公司不允许…

C++:模版初阶

目录 1. 泛型编程 2.函数模版 2.1. 函数模版的用法 2.2. 函数模版的原理 2.3 函数模板的实例化 2.4 模版参数的匹配原则 3. 类模版 3.1 类模版的格式 3.2. 类模版的实例化 1. 泛型编程 如何实现整形、字符串&#xff0c;或者其他自定义类型的交换函数&#x…

028.爬虫专用浏览器-抓取#shadowRoot(closed)下的内容

一、什么是Shadow DOM Shadow DOM是一种在web开发中用于封装HTML标记、样式和行为的技术&#xff0c;以避免组件间的样式和脚本冲突。它允许开发者将网页的一部分隐藏在一个独立的作用域内&#xff0c;从而实现更加模块化和可维护的代码结构 二、js操作Shadow DOM // 获取宿…

命名空间std, using namespace std

命名空间std&#xff0c;using namespace std 在标准C以前&#xff0c;都是用#include<iostream.h>这样的写法的&#xff0c;因为要包含进来的头文件名就是iostream.h。标准C引入了名字空间的概念&#xff0c;并把iostream等标准库中的东东封装到了std名字空间中&#x…

React类组件详解

React类组件是通过创建class继承React.Component来创建的&#xff0c;是React中用于构建用户界面的重要部分。以下是对React类组件的详细解释&#xff1a; 一、定义与基本结构 类组件使用ES6的class语法定义&#xff0c;并继承自React.Component。它们具有更复杂的功能&#xf…

笔记整理—linux驱动开发部分(2)模块信息与编译

对于linux而言&#xff0c;.ko文件为驱动文件&#xff0c;在终端可以使用lsmod列出已经安装的模块&#xff0c;使用insmod xxx.ko安装所需要的模块&#xff0c;modinfo xxx.ko打印某个模块提供的信息&#xff0c;rmmod xxx卸载某个不需要的模块。 insmod与module_init宏。在源代…

智能台灯设计(一)原理图设计

1. 前言 作者最近突发奇想&#xff0c;想自己做一个小台灯&#xff0c;设想的功能有&#xff1a;带锂电池可充电、可以调节亮度&#xff0c;后续通过增加WIFI模块实现手机控制开关功能。目前先实现最简单的功能&#xff0c;有时间再一步步完善吧。 2. 原理图设计 充电芯片使用…

[LitCTF 2023]破损的图片(初级)的write up

开启靶场&#xff0c;下载附件&#xff0c;解压后得到文件&#xff1a; 破损的图片&#xff0c;那应该是文件头缺失 用010editor打开&#xff1a; 文件尾是AE 42 60 82&#xff0c;说明原图片是png格式&#xff0c;文件头前八个字节是3F&#xff0c;且对应8个"?"&am…