Spring Cloud 系列之Gateway:(9)初识网关

传送门

Spring Cloud Alibaba系列之nacos:(1)安装

Spring Cloud Alibaba系列之nacos:(2)单机模式支持mysql

Spring Cloud Alibaba系列之nacos:(3)服务注册发现

Spring Cloud 系列之OpenFeign:(4)集成OpenFeign

Spring Cloud 系列之OpenFeign:(5)OpenFeign的高级用法

Spring Cloud 系列之OpenFeign:(6)OpenFeign的链路追踪

Spring Cloud 系列之OpenFeign:(7)链路追踪sleuth+zipkin

Spring Cloud 系列之OpenFeign:(8)链路追踪续

短暂的回顾

在谈网关之前,回顾了一下SpringCloud系列文章。从写下第一篇博客Spring Cloud Alibaba系列(1)之:nacos安装时,时间是2022-06-12,距离现在已经过去快2年了。而如果要从真正从接触微服务(主要指SpringCloud全家桶)写下的第一博客《Spring cloud系统架构的淘宝客之一》

算起,时间应该是2018-01-10,过去了整整6年。在此期间,微服务蓬勃发展、遍地开花,几乎成了现在JAVA开发的首选和项目框架选型的标配。但是这几年间我并没有一直在使用它,原因是中间去福报厂呆了几年(为此还产生了《如何拿到阿里offer的?面试流程及面试题》,当然也留下了一个大坑没填)。

一般的大公司都有自己封装的一套所谓XX框架,比如sofa这种RPC框架。当时在里面要适应做toC业务及整天精神高度紧张,导致并没有持续关注SpringColud。等从互联网出来转到做toB业务时,又有了什么Spring Cloud Alibaba,那是不是还得学?所以有了这个系列的文章,当时也没有过多想法。现在细想起来,至少有以下3方面原因:

  • 1是做为学习的一个记录,及归纳总结。也希望能帮助到其它需要的java boy
  • 2是心态上的一个转变,从以前追逐各种框架中逐渐解脱出来,开始回归到计算机基础的学习上。比如网络(主要是HTTP协议簇)、计算机组成原理、数据结构(不断开始/放弃的循环中)、JVM等学习上
  • 3是深度上,现在更多是尽量深入到源码级别来学习:阅读各种框架的源码比如nacos,xxl-job的《分布式定时任务系列8:XXL-job源码分析之远程调用》,不过现在博客里面很少具体体现出来怕误导别人 

但是工欲善其事,对于项目的开发及实际框架的使用,了解它的相关用法、特性还是很有必要。所以会继续这个系列下去,这次会切入微服务中另一个重要的基础组件:网关gateway 

什么是网关

对于网关这个概念来说,在传统架构的模式下,可能感知并不是很强烈。特别是单体架构可能都没有网关这个组件或服务:

无网关架构

一个极简的单体架构,可以是如下图(假设在内网,不考虑防火墙安全等非业务功能):

  • 1台物理机,有1个对应的IP
  • 在物理机上面运行1个tomcat实例,并部署对应的服务A,设置对应的端口port
  • 系统架构采用springmvc,前后端打包在一块部署1个实例
  • 用户直接通过浏览器访问系统:https://IP:port/XX,XX为服务A暴露的请求URL

在这样的架构下,会发现其实是没有网关这个组件的。当然一般面向互联网的可能还会在前面挂一个域名,但是也不会对上述网关的定位有涉及。

负载均衡架构

但是一般大型一些的系统,出于高可用的需要会采用集群部署:即对后端服务进行同一个服务多个副本部署,并搭载对应的负载均衡器做统一路由,比如硬件层面的F5,软件层面的Nginx等。

这里给各个单体系统的副本分发流量的负载均衡器(F5或Nginx),其实就承担着内部服务与外部调用之间的网关角色。 

微服务架构

不过在微服务环境中,网关的存在感就极大地增强了,甚至成为微服务集群中必不可少的设施之一,重要性不比服务发现(Eureka/Nacos)、配置中心(Config/Nacos)、负载均衡(Ribbon/LoadBalacer)低!

因为在微服务的理念下,不仅对系统架构有冲击要进行服务拆分,甚至可能对组织架构也有冲击导致研发团队按服务拆分。

如果每个服务节点都由不同的团队负责,它们有自己独立的、各不相同的能力,所以如果服务集群没有一个统一对外交互的代理人角色,那外部的服务消费者就必须知道所有微服务在集群中的精确坐标(各个后端服务的地址)。所以,微服务中网关的首要职责

就是以统一的地址对外提供服务,将外部访问这个地址的流量,根据适当的规则路由到内部集群中正确的服务节点之上。也正是因为这样,微服务中的网关,也常被称为“服务网关”或者“API 网关”。

所以网关Gateway拥有路由基本职责与能力。但是如果仅仅这一点,与其它老牌的负载均衡器F5、Nginx有什么区别呢?直接用负载均衡器不就好了,搞一个什么网关轮子出来干啥?其实原因有如下几点:

  • 微服务架构下的网关除了路由能力外,还需要提供一些比如安全、认证、授权、限流、监控、缓存的额外能力
  • 另外通过Spring提供原生的Gateway组件,能更好的适配SpringCloud生态,做大做强
  • 通过代码解析请求URL的一些特征,能更方便的制定路由策略及方便边缘功能的扩展

基于上述原因,Gateway网关还提供了过滤器实现代码层级的精细控制:

网关 = 路由器(基础职能) + 过滤器(可选职能)

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

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

相关文章

【2024软考】史上最全!软考刷题+解析大合集(9万字全手工打,货真价实)

计算机基础知识 1.中断向量表用来保存各个中断源的中断服务程序的入口地址。当外设发出中断请求信号(INTR)以后,由中断控制器(INTC)确定其中断号,并根据中断号查找中断向量表来取得其中断服务程序的入口地…

89.网络游戏逆向分析与漏洞攻防-游戏技能系统分析-游戏中使用的哈希算法逆向分析

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 如果看不懂、不知道现在做的什么,那就跟着做完看效果,代码看不懂是正常的,只要会抄就行,抄着抄着就能懂了 内容…

HMI设计:再谈上位机与下位机,附海量案例图

上期回顾:HMI界面之:上位机界面设计,一文扫盲 一、上位机负责控制和决策,下位机负责采集和执行 上位机和下位机是两个概念,通常用于描述计算机系统中不同层次的设备或组件。 上位机(Host Computer&#x…

kubernetes之prometheus kube-controller-manager。 scheduler报错问题

项目场景: prometheus scheduler及kube-controller-manager监控报错 问题描述 kubeadm搭建完kube-prometheus 会有这个报错 原因分析: rootmaster2:~# kubectl describe servicemonitor -n kube-system kube-controller-manager通过以上图片我们发现 k…

解决GoLand无法Debug

goland 调试的的时候提示如下错误 WARNING: undefined behavior - version of Delve is too old for Go version 1.22.3 (maximum supported v 其实个原因是因为正在使用的Delve调试器版本太旧,无法兼容当前的Go语言版本1.22.3。Delve是Go语言的一个调试工具&#…

【vue-5】双向数据绑定v-model及修饰符

单向数据绑定:当数据发生改变时,视图会自动更新,但当用户手动更改input的值,数据不会自动更新; 双向数据绑定:当数据发生改变时,视图会自动更新,但当用户手动更改input的值&#xf…

好用的window粘贴板

可以设置指定的快捷键,在需要使用最近复制的记录时快速的复用 -> Ditto。 选择Download即可 地址:Ditto clipboard manager (sourceforge.io)https://ditto-cp.sourceforge.io/

IOS开发者证书快捷申请

App Uploader 在进行iOS应用开发中,可以借助appuploader辅助工具进行证书制作、上传和安装测试等操作。首先,您需要访问官方网站获取最新版本的appuploader。最新版本已经优化了与Apple账号的登录流程,无需支付688元,并提供了Windows版和Mac版供用户选择。下载完成后,解压…

C#_库的引用

类库的引用 还可以自己引用类库:解决方案-添加-新建项目 主程序 using System; using System.Windows.Forms; using Tools;namespace ConsoleApp2 {class Program{static void Main(string[] args){//Console.WriteLine("helloword");// Form form ne…

非整数倍数据位宽转换24to128

描述 实现数据位宽转换电路,实现24bit数据输入转换为128bit数据输出。其中,先到的数据应置于输出的高bit位。 电路的接口如下图所示。valid_in用来指示数据输入data_in的有效性,valid_out用来指示数据输出data_out的有效性;clk是时…

VUE2 tab切换导航 展示页面内容(父级子级独立)

VUE2 tab切换导航 展示页面内容 父级子级独立 图片示例代码 图片示例 代码 <template><div class"center"><!-- 一级导航 --><div class"menu"><div class"menu_list"><div v-for"item of List" :k…

常见算法(3)

1.Arrays 它是一个工具类&#xff0c;主要掌握的其中一个方法是srot&#xff08;数组&#xff0c;排序规则&#xff09;。 o1-o2是升序排列&#xff0c;o2-o1是降序排列。 package test02; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparat…

C#【进阶】迭代器

迭代器 文章目录 1、迭代器概念2、标准迭代器的实现方法3、用yield return 语法糖实现迭代器4、用yield return 语法糖为泛型类实现迭代器 1、迭代器概念 迭代器&#xff08;iterator&#xff09; 又称光标&#xff08;cursor&#xff09; 是程序设计的软件设计模式 迭代器提供…

IPv6 地址创建 EUI-64 格式接口 ID 的过程

IPv6 接口标识符 IPv6 地址中的接口标识符&#xff08;ID&#xff09;用于识别链路上的唯一接口&#xff0c;有时被称为 IPv6 地址的 “主机部分”。接口 ID 在链路上必须是唯一的&#xff0c;始终为 64 位长&#xff0c;并且可以根据数据链路层地址动态创建。 MAC 地址 中的…

操作系统入门系列-MIT6.828(操作系统工程)学习笔记(一)---- 操作系统介绍与接口示例

MIT6.S081&#xff08;操作系统&#xff09;学习笔记 操作系统入门系列-MIT6.S081&#xff08;操作系统&#xff09;学习笔记&#xff08;一&#xff09;---- 操作系统介绍与接口示例 操作系统入门系列-MIT6.828&#xff08;操作系统工程&#xff09;学习笔记&#xff08;二&a…

Jenkins在windows上进行安装

今天为了实现jmeter接口测试脚本的持续性集成安装了jenkins&#xff0c;主要记录jenkins的安装和端口的修改。 前提条件&#xff1a;安装了jdk&#xff0c;我本机安装的jdk1.8。 1.下载jenkins安装包 安装jenkins我们需要先下载安装包&#xff0c;可以通过下面的链接进行下载&a…

Qt快速入门到熟练(电子相册项目(一))

经过一段时间的学习&#xff0c;相信大家对QT的基本用法都有所了解&#xff0c;从这篇文章开始&#xff0c;我准备记录一下电子相册的项目的一个学习过程。 实现项目创建功能 对于这个电子相册的项目&#xff0c;我并没有在一开始就把所有可能用到的功能模块去事无巨细的考虑周…

C# 结合 JS 暴改腾讯 IM SDK Demo

目录 关于腾讯 IM SDK Demo 范例运行环境 设计思路 服务端生成地址 IM 服务端接收 IM 客户端程序 小结 关于腾讯 IM SDK Demo 腾讯云即时通信 IM SDK 提供了单聊、群聊、关系链、消息漫游、群组管理、资料管理、直播弹幕等功能&#xff0c;并提供完备的 App 接入及管…

小猪APP分发:一站式托管服务,轻松玩转应用市场

在当今移动应用爆炸式增长的时代&#xff0c;开发者们面临的挑战不再仅限于创意的火花和代码的实现&#xff0c;更在于如何让精心打造的应用快速触达广大用户。这正是小猪APP分发www.appzhu.net应运而生的背景——作为一个全面、高效的APP托管服务分发平台&#xff0c;它为开发…

用于时间序列概率预测的蒙特卡洛模拟

大家好&#xff0c;蒙特卡洛模拟是一种广泛应用于各个领域的计算技术&#xff0c;它通过从概率分布中随机抽取大量样本&#xff0c;并对结果进行统计分析&#xff0c;从而模拟复杂系统的行为。这种技术具有很强的适用性&#xff0c;在金融建模、工程设计、物理模拟、运筹优化以…