漫谈微服务网关

一、什么是服务网关

服务网关 = 路由转发 + 过滤器
1、路由转发:接收一切外界请求,转发到后端的微服务上去;

2、过滤器:在服务网关中可以完成一系列的横切功能,例如权限校验、限流以及监控等,这些都可以通过过滤器完成(其实路由转发也是通过过滤器实现的)。

二、为什么需要服务网关

上述所说的横切功能(以权限校验为例)可以写在三个位置:

每个服务自己实现一遍
写到一个公共的服务中,然后其他所有服务都依赖这个服务
写到服务网关的前置过滤器中,所有请求过来进行权限校验
第一种,缺点太明显,基本不用;第二种,相较于第一点好很多,代码开发不会冗余,但是有两个缺点:

由于每个服务引入了这个公共服务,那么相当于在每个服务中都引入了相同的权限校验的代码,使得每个服务的jar包大小无故增加了一些,尤其是对于使用docker镜像进行部署的场景,jar越小越好;
由于每个服务都引入了这个公共服务,那么我们后续升级这个服务可能就比较困难,而且公共服务的功能越多,升级就越难,而且假设我们改变了公共服务中的权限校验的方式,想让所有的服务都去使用新的权限校验方式,我们就需要将之前所有的服务都重新引包,编译部署。
而服务网关恰好可以解决这样的问题:

将权限校验的逻辑写在网关的过滤器中,后端服务不需要关注权限校验的代码,所以服务的jar包中也不会引入权限校验的逻辑,不会增加jar包大小;
如果想修改权限校验的逻辑,只需要修改网关中的权限校验过滤器即可,而不需要升级所有已存在的微服务。
所以,需要服务网关!!!

三、服务网关技术选型

在这里插入图片描述

引入服务网关后的微服务架构如上,总体包含三部分:服务网关、open-service和service。

1、总体流程

服务网关、open-service和service启动时注册到注册中心上去;
用户请求时直接请求网关,网关做智能路由转发(包括服务发现,负载均衡)到open-service,这其中包含权限校验、监控、限流等操作
open-service聚合内部service响应,返回给网关,网关再返回给用户

2、引入网关的注意点

增加了网关,多了一层转发(原本用户请求直接访问open-service即可),性能会下降一些(但是下降不大,通常,网关机器性能会很好,而且网关与open-service的访问通常是内网访问,速度很快);
网关的单点问题:在整个网络调用过程中,一定会有一个单点,可能是网关、nginx、dns服务器等。防止网关单点,可以在网关层前边再挂一台nginx,nginx的性能极高,基本不会挂,这样之后,网关服务就可以不断的添加机器。但是这样一个请求就转发了两次,所以最好的方式是网关单点服务部署在一台牛逼的机器上(通过压测来估算机器的配置),而且nginx与zuul的性能比较,根据国外的一个哥们儿做的实验来看,其实相差不大,zuul是netflix开源的一个用来做网关的开源框架;
网关要尽量轻。

3、服务网关基本功能

智能路由:接收外部一切请求,并转发到后端的对外服务open-service上去;

注意:我们只转发外部请求,服务之间的请求不走网关,这就表示全链路追踪、内部服务API监控、内部服务之间调用的容错、智能路由不能在网关完成;当然,也可以将所有的服务调用都走网关,那么几乎所有的功能都可以集成到网关中,但是这样的话,网关的压力会很大,不堪重负。
权限校验:只校验用户向open-service服务的请求,不校验服务内部的请求。服务内部的请求有必要校验吗?

API监控:只监控经过网关的请求,以及网关本身的一些性能指标(例如,gc等);

限流:与监控配合,进行限流操作;

API日志统一收集:类似于一个aspect切面,记录接口的进入和出去时的相关日志

上述功能是网关的基本功能,网关还可以实现以下功能:

A|B测试:A|B测试时一块比较大的东西,包含后台实验配置、数据埋点(看转化率)以及分流引擎,在服务网关中,可以实现分流引擎,但是实际上分流引擎会调用内部服务,所以如果是按照上图的架构,分流引擎最好做在open-service中,不要做在服务网关中。

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

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

相关文章

(Linux 学习十二)文件查找和文件压缩

一.文件查找 which 命令查找 也可以用 whereis find 文件查找,针对文件名 locate 文件查找,依赖数据库alias 别名 alias yyy ls --colorauto -l yyy //相当于别名 查看文件which ls //查找ls 命令位置 whereis vim //也是查找命令locate …

Gitlab介绍

1.什么是Gitlab GitLab是一个流行的版本控制系统平台,主要用于代码托管、测试和部署。 GitLab是基于Git的一个开源项目,它提供了一个用于仓库管理的Web服务。GitLab使用Ruby on Rails构建,并提供了诸如wiki和issue跟踪等功能。它允许用户通…

文献速递:基于SAM的医学图像分割---医疗 SAM 适配器:适配用于医学图像分割的 Segment Anything 模型

Title 题目 Medical SAM Adapter: Adapting Segment Anything Model for Medical Image Segmentation 医疗 SAM 适配器:适配用于医学图像分割的 Segment Anything 模型 01 文献速递介绍 最近,Segmentation Anything 模型(SAM)…

Tuxera NTFS使用教程:关于Tuxera NTFS mac还有你不知道的用法

NTFS for Mac是Mac电脑里非常重要的工具之一,因为它太实用了,解决了NTFS移动硬盘在Mac上的写入问题。但是,小伙伴在安装完软件之后,通常再也不会关注它,甚至时间长了,也就忘了Mac里还有这么一个软件。 在T…

​2024年保护微服务的前10种技术

1*5rY-jEv7qlpa_swi4WMIBw.png 引言 与当前正在使用的任何其他技术或方法一样,微服务也有其自己的一套缺陷和问题。尽管如此,微服务架构的采用率不断增加,预计到2028年将达到1718.2亿美元。 然而,尽管团队使用微服务,但…

RabbitMQ的使用—实战

RabbitMQ的使用—实战 ​ RabbitMQ是一个开源的消息代理中间件,在分布式系统开发中被广泛应用。它实现了高级消息队列协议(AMQP),提供可靠的消息传递、灵活的路由、消息确认等功能。下面是使用RabbitMQ的基本流程: 安…

动态QCA|一条通向动态QCA产出的道路2.0

一、《A General Approach to Panel Data Set-Theoretic Research 》阅读 摘要:基于一般线性统计模型的学术研究正迅速向纵向和面板数据计量经济学方法的更广泛和更丰富的应用方向发展。相比之下,集合论的实证研究,尽管其日益普及&#xff0c…

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

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

ANDRAXv6软件工具列表介绍

系统环境:Xiaomi HyperOS Android 14 以下列表仅为部分内容,实际工具更多,方便大家了解为什么ANDRAX比NetHunter更强大 注意以下内容:仅供学习,未经相关部门许可请勿随意测试或恶意破坏公共网络设备,违者…

工控机在机器人领域的应用丨工业一体机的应用

随着机器人技术的不断发展,机器人在制造、物流等领域得到了广泛应用。而工业控制计算机(工控机)作为机器人控制系统的核心设备,也在机器人领域发挥着越来越重要的作用。 机器人控制系统是机器人的核心部分,控制系统的…

基于Springboot的农产品销售管理系统+数据库+免费远程调试

项目介绍: 基于Springboot的农产品销售管理系统。Javaee项目,springboot项目。采用M(model)V(view)C(controller)三层体系结构,通过SpringMvc SpringBootMybatisVuemaven来实现。MyS…

Uscrapper:一款功能强大的网络资源爬取工具

关于Uscrapper Uscrapper是一款功能强大的网络资源爬取工具,该工具可以帮助广大研究人员从各种网络资源中轻松高效地提取出有价值的数据,并且提供了稳定、友好且易于使用的UI界面,是安全研究人员和网络分析人员的强有力工具。 Uscrapper最大…

PR如何制作火焰特效?VFX火焰动画元素PR视频剪辑素材

如何使用Premiere软件制作火焰特效动画?VFX火焰特效元素动画pr视频剪辑素材。使用颜色控制器轻松自定义辉光效果的颜色和强度。每个场景都充满逼真的火焰。在预告片、极限运动视频或任何需要电影火力的场景中添加动作的好方法。 来自:pr素材库&#xff0…

python云上水果超市的设计与实现flask-django-php-nodejs

伴随着我国社会的发展,人民生活质量日益提高。于是对云上水果超市进行规范而严格是十分有必要的,所以许许多多的信息管理系统应运而生。此时单靠人力应对这些事务就显得有些力不从心了。所以本论文将设计一套云上水果超市,帮助商家进行商品信…

仿京东项目——京西商城(数据库设计)

文章目录 仿京东——京西商城数据库设计建立E-R图数据库表设计用户表商品表订单表订单详情表评论表购物车表购物车项表 仿京东——京西商城 数据库设计 主要实体有: 用户 用户ID(User_ID):唯一标识用户的主键 用户名&#xff0…

RuoYi-Vue-Plus(基础知识点jackson、mybatisplus、redis)

一、JacksonConfig 全局序列化反序列化配置 1.1yml中配置 #时区 spring.jackson.time-zoneGMT8 #日期格式 spring.jackson.date-formatyyyy-MM-dd HH:mm:ss #默认转json的属性,这里设置为非空才转json spring.jackson.default-property-inclusionnon_null #设置属性…

数据库级别的刷新和数据表级别的刷新结果不一样吗

这个刷新和这个刷新有啥区别 我发现点左边的刷新没有办法刷新出新注册成功的用户,但是下一张图片就能刷新出来 我也知不道是不是,还是我navicat有问题 是的,数据库级别的刷新和数据表级别的刷新的结果是不同的: 数据库级别的刷新…

JavaSE(简介)

1. Java语言特性 简单 Java语法是C语法的一个“纯净版本”,相当于对C做了一个减法。这里没有头文件、指针运算(甚至指针 语法)、结构、联合、操作符重载、虚基类等等。不仅如此,Java开发环境远远超出大多数其他编程语言的开 发环…

ttkbootstrap界面美化系列之按钮Button(三)

目录 一:Button接口 二:Button创建 三:Button主题 四:Button样式 五:Button状态 从本章开始将详细介绍ttkbootstrap中支持的常用组件,从按钮BUTTON开始,在各类界面设计中按钮几乎是必不可少…