微服务网关介绍

b73e1a90021149e5b4f943ef194da780.gif1. 为什么是Spring Cloud Gateway

 

 

一句话,Spring Cloud已经放弃Netflix Zuul了。现在Spring Cloud中引用的还是Zuul 1.x版本,而这个版本是基于过滤器的,是阻塞IO,不支持长连接。Zuul 2.x版本跟1.x的架构大一样,性能也有所提升。既然Spring Cloud已经不再集成Zuul 2.x了,那么是时候了解一下Spring Cloud Gateway了。

 

 

 

可以看到,最新的Spring Cloud中的Zuul还是1.3.1版本

 

而且,官网中也明确说了不再维护Zuul了

 

 

 

(PS:顺便补充几个名词: 服务发现(Eureka),断路器(Hystrix),智能路由(Zuul),客户端负载均衡(Ribbon))

 

2. API网关

 

API网关是一个服务器,是系统的唯一入口。从面向对象设计的角度看,它与外观模式类似。API网关封装了系统内部架构,为每个客户端提供一个定制的API。它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响应处理。API网关方式的核心要点是,所有的客户端和消费端都通过统一的网关接入微服务,在网关层处理所有的非业务功能。通常,网关也是提供REST/HTTP的访问API。

 

网关应当具备以下功能:

 

性能:API高可用,负载均衡,容错机制。

安全:权限身份认证、脱敏,流量清洗,后端签名(保证全链路可信调用),黑名单(非法调用的限制)。

日志:日志记录(spainid,traceid)一旦涉及分布式,全链路跟踪必不可少。

缓存:数据缓存。

监控:记录请求响应数据,api耗时分析,性能监控。

限流:流量控制,错峰流控,可以定义多种限流规则。

灰度:线上灰度部署,可以减小风险。

路由:动态路由规则。

目前,比较流行的网关有:Nginx 、 Kong 、Orange等等,还有微服务网关Zuul 、Spring Cloud Gateway等等

 

对于 API Gateway,常见的选型有基于 Openresty 的 Kong、基于 Go 的 Tyk 和基于 Java 的 Zuul。这三个选型本身没有什么明显的区别,主要还是看技术栈是否能满足快速应用和二次开发。

 

 

 

 

 

 

 

以上说的这些功能,这些开源的网关组件都有,或者借助Lua也能实现,比如:Nginx + Lua

 

那要Spring Cloud Gateway还有什么用呢?

 

其实,我个人理解是这样的:

 

像Nginx这类网关,性能肯定是没得说,它适合做那种门户网关,是作为整个全局的网关,是对外的,处于最外层的;而Gateway这种,更像是业务网关,主要用来对应不同的客户端提供服务的,用于聚合业务的。各个微服务独立部署,职责单一,对外提供服务的时候需要有一个东西把业务聚合起来。

像Nginx这类网关,都是用不同的语言编写的,不易于扩展;而Gateway就不同,它是用Java写的,易于扩展和维护

Gateway这类网关可以实现熔断、重试等功能,这是Nginx不具备的

所以,你看到的网关可能是这样的:

 

 

 

2.1. Netflix Zuul 1.x VS Netflix Zuul 2.x

 

  

 

3. Spring Cloud Gateway

 

3.1. 特性

 

基于Spring Framework 5、Project Reactor和Spring Boot 2.0构建

能够在任意请求属性上匹配路由

predicates(谓词) 和 filters(过滤器)是特定于路由的

集成了Hystrix断路器

集成了Spring Cloud DiscoveryClient

易于编写谓词和过滤器

请求速率限制

路径重写

3.2. 术语

 

Route : 路由是网关的基本组件。它由ID、目标URI、谓词集合和过滤器集合定义。如果聚合谓词为true,则匹配路由

 

Predicate : This is a Java 8 Function Predicate

 

Filter : 是GatewayFilter的一个实例,在这里,可以在发送下游请求之前或之后修改请求和响应

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

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

相关文章

GraalVM详细安装及打包springboot、java、javafx使用教程(打包普通JAVA项目篇)

前言 在当前多元化开发环境下,Java作为一种广泛应用的编程语言,其应用部署效率与灵活性的重要性日益凸显。Spring Boot框架以其简洁的配置和强大的功能深受开发者喜爱,而JavaFX则为开发者提供了构建丰富桌面客户端应用的能力。然而&#xff…

Python模块与包管理使用pip与virtualenv【第151篇—模块与包管理】

Python模块与包管理:使用pip与virtualenv 在Python开发中,模块和包管理是至关重要的,它们使得代码的组织、重用和共享变得更加简单和高效。本文将介绍两个Python生态系统中最常用的工具:pip和virtualenv。通过这些工具&#xff0…

探索医用制氧机的种类及其应用场景

医用制氧机是一种能够制取高纯度氧气的制氧设备,广泛应用于各种场景。随着科技的进步和行业需求的增加,医用制氧机的种类和应用领域也在不断扩展。本文将探索医用制氧机的多元种类及其应用领域,以更好地了解这一设备的重要性。 一、医用制氧机…

java并发编程之 volatile关键字

1、简单介绍一下JMM Java 内存模型(Java Memory Model 简称JMM)是一种抽象的概念,并不真实存在,指一组规则或规范,通过这组规范定义了程序中各个变量的访问方式。java内存模型(JMM)屏蔽掉各种硬件和操作系统的内存访问…

快速区分清楚图形渲染中的AABB,KD树和BVH这些概念

快速区分清楚图形渲染中的AABB,KD树和BVH这些概念 主要想形象去区分好这些术语,目的是扫盲,先开好坑,内容持续填充。 0.先摆出这些词的全称 AABB: 原名:axis aligned bounding box;中文直译名…

流畅的 Python 第二版(GPT 重译)(二)

第三章:字典和集合 Python 基本上是用大量语法糖包装的字典。 Lalo Martins,早期数字游牧民和 Pythonista 我们在所有的 Python 程序中都使用字典。即使不是直接在我们的代码中,也是间接的,因为dict类型是 Python 实现的基本部分。…

科技助力高质量发展:新质生产力的崛起与企业数字化转型

引言 随着科技的飞速发展,我们正逐渐步入数字化智能时代,这个时代不仅为企业带来了无限的机遇,也让其面对前所未有的挑战。在这个快速变革的时代,企业必须不断调整自己的经营策略,适应数字化转型的浪潮,以…

使用appuploder上架App Store流程

使用appuploder流程笔记 1.如何没有账号去apple官网注册一个,地址:https://developer.apple.com/account 2.下载解压appuploder,双击打开,用刚刚注册的账号登录,下载地址:http://www.applicationloader.n…

PHP连接达梦数据库

PDO是一种在PHP中连接数据库的接口,可以通过PDO接口使用PHP连接达梦数据库。 1、安装PHP环境 检查当前环境是否安装PHP [rootlocalhost ~]# php -v 当前环境并未安装PHP,需要进行安装,选择安装PHP7.3版本。 2、安装 epel-release源和源管…

人工智能时代的引领者:AI提示工程激发大语言模型的无限潜能

文章目录 一、AI提示工程的概念与定义二、AI提示工程的应用领域三、AI提示工程的技术创新与突破四、AI提示工程的未来发展趋势《AI提示工程实战:从零开始利用提示工程学习应用大语言模型》亮点内容简介作者简介目录 一、AI提示工程的概念与定义 在当今日新月异的科…

分类预测 | Matlab实现BiTCN双向时间卷积神经网络数据分类预测/故障识别

分类预测 | Matlab实现BiTCN双向时间卷积神经网络数据分类预测/故障识别 目录 分类预测 | Matlab实现BiTCN双向时间卷积神经网络数据分类预测/故障识别分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现BiTCN双向时间卷积神经网络数据分类预测/故障识别。 2.自…

mysql四种事务隔离级别,2024金三银四

TransactionDefinition.PROPAGATION_MANDATORY:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。 TransactionDefinition.PROPAGATION_NESTED:如果当前存在事务,则创建一个事务作为当前事务的…

数据结构 二叉树 力扣例题AC——代码以及思路记录

LCR 175. 计算二叉树的深 某公司架构以二叉树形式记录,请返回该公司的层级数。 AC int calculateDepth(struct TreeNode* root) {if (root NULL){return 0;}else{return 1 fmax(calculateDepth(root->left), calculateDepth(root->right));} } 代码思路 …

利用matplot绘制折线图(详细版-有示例数据)

对于五组数据,绘制折线图,添加有图例、不同折线的颜色等,如下图所示: python代码: import matplotlib.pyplot as plt import numpy as np# 定义数据 data [[1, 2, 3, 4, 5, 6, 7, 8], # 数据1[2, 2, 4, 4, 5, 5, 6,…

【Godot 3.5组件】简单血条组件HealthBar

说明 本文原文写自2022年,内容基于Godot3.5。是本人早期进行Godot组件化和自定义节点探索时的产物,当时的代码和思想可能不太成熟,但贴出来,供需要学习组件化基础思路的同学食用。 概述 血条作为一个非常基础和常见的组件&…

C语言易错知识点:二级指针、数组指针、函数指针

指针在C语言中非常关键,除开一些常见的指针用法,还有一些可能会比较生疏,但有时却也必不可少,本文章整理了一些易错知识点,希望能有所帮助! 1.二级指针: parr是一个指针数组,其中每…

国创证券|上市公司破产了手里的股票怎么办?

上市公司破产了,那只能等候公司破产清算补偿。 上市公司破产后,公司的财物将进行清算,还完债款假如还有剩下财物,就会分给持有股票的股民。一般优先偿还借主、再偿还优先股东,最终才是一般股东,假如资不抵…

【网络编程基础(三)】线程同步

学习分享 1、线程同步2、用信号量进行同步2.1、信号量函数2.2、创建一个信号量2.3、sem_post函数 (解锁)2.4、sem_wait函数 (加锁)2.5、sem_destroy函数2.6、信号量示例 3、用互斥量进行同步3.1、互斥量函数数组3.2、互斥量示例 1、线程同步 两个&#x…

Spring Web MVC入门(6)

应用分层 在开发的过程中, 我们会发现, 程序的代码有时会很"杂乱", 如果后面的项目更大了, 那就会更加地杂乱无章(文件乱, 代码内容乱). 也基于此, 接下来让我们来学习一下应用分层. 也类似于公司的组织架构 公司初创阶段, 一个人身兼数职, 既做财务, 又做人事,还有…