谷粒商城项目|微服务架构的一些与思考解决跨域问题

1.微服务架构的组成每部分的作用
2.还有其他的微服务架构模式吗
3.微服务服务交互的方式
1)grpc
2)rest api
4.微服务网关与API网关?

5.注册中心比较(Nacos与Eureka)

Nacos
Nacos 是阿里巴巴开源的项目,Nacos 支持基于 DNS 和基于 RPC 的服务发现
Eureka
Eureka 是 Spring Cloud 体系中的一部分,已经停止维护且功能相对单一,主要提供服务注册与发现
//具体场景-将某一个服务注册到注册中心
服务在application.properties配置配置中心服务器地址和服务的名字。
@EnableDiscoveryClient开启服务注册与发现功能
如果用Eureka该怎么实现
5.Nacos实现注册中心的流程
大致流程相同 使用@EnableEurekaServer注释
6.Nacos与Eureka底层实现的不同?
CAP原理:
二者对CAP原理的侧重性不同
一致性(Consistency): 所有节点在同一时间具有相同的数据。
可用性(Availability): 每个请求都能收到一个响应,无论它是成功或失败的响应
分区容忍性(Partition tolerance): 系统应该能够持续提供服务,即使出现了网络分区,也就是说,某些节点之间的通信可能失败或延迟,但系统仍需继续运行。
Nacos侧重:Nacos遵循AP和CP原则
AP(可用性):读多写少
CP(一致性):秒杀服务
Eureka侧重:遵循AP原则,在网络分区发生时优先保证可用性。
7.Nacos集群

配置中心比较(Nacos与Config)

1.配置中心存储哪些数据
配置中心创建application.properties存储配置
数据源信息
微服务名称
日志和监控配置
密钥
2.使用流程
coupons模块创建bootstrap.yml
在coupons模块中创建/src/main/resources/bootstrap.yml,优先级别application.properties高
问题:nacos配置要先于yml,但如果尚未读取yml,又如何得知nacos地址并获取nacos配置呢?
答案:因此spring引入了一种新的配置文件:bootstrap.yml文件,优先级高于application.yml,会在application.yml之前被读取。
使用@Value获取配置文件中的值
使用@RefershScope获取配置中心最新的值
3.配置中心的基本概念
命名空间:微服务之间配置隔离 每个微服务抽取一个配置
支持加载多配置 比如每个业务的数据源分离开,mybatis分离开等等

/具体场景
如果用Config该怎么实现,有什么缺点
创建Config Server 将配置文件放在git上,Config Server 一个git地址
客户端开通服务
通过暴露的/actuator/refresh端点来刷新配置
4.Nacos与Config区别?
有自己的配置管理界面,配置存储在Nacos服务器
5.为什么要选Nacos?
有自己的配置管理界面,配置存储在Nacos服务器,可以进行配置的版本历史、回滚、监听
6.Nacos有可能在什么场景下出现什么问题
在大规模服务和配置的场景下,Nacos需要处理大量的请求。
问题:响应变慢,处理能力达到瓶颈。
在生产环境中,Nacos通常部署为集群以确保高可用。
问题:集群节点之间的数据不一致,或者当一个节点失败时,服务不可用。
解决办法:
监控和故障恢复:
实时监控:对Nacos集群的健康状态、性能指标和日志进行实时监控。
故障转移和恢复:确保有故障转移机制,在节点或服务失败时可以快速恢复。
负载均衡和扩容:
负载均衡:确保请求合理分配到各个节点,避免单点过载。
集群扩容:在高并发场景下,适时对集群进行扩容,增加节点以分散负载。

网关比较(GateWay与Zuul)

1.网关的作用
1)将前端的请求动态的路由到每一个服务
2)网关动态地管理,他能从注册中心中实时地感知某个服务上线还是下线。
3)请求也要加上询问权限,看用户有没有权限访问这个请求
2.网关的核心概念 工作流程
Route路由: The basic building block of the gateway. It is defined by an ID, a destination URI, a collection of predicates断言, and a collection of filters. A route is matched if the aggregate predicate is true.发一个请求给网关,网关要将请求路由到指定的服务。路由有id,目的地uri,断言的集合,匹配了断言就能到达指定位置,
Predicate断言: This is a Java 8 Function Predicate. The input type is a Spring Framework ServerWebExchange. This lets you match on anything from the HTTP request, such as headers or parameters.就是java里的断言函数,匹配请求里的任何信息,包括请求头等。根据请求头路由哪个服务
Filter过滤: These are instances of Spring Framework GatewayFilter that have been constructed with a specific factory. Here, you can modify requests and responses before or after sending the downstream request.过滤器请求和响应都可以被修改。
客户端发请求给服务端。中间有网关。先交给映射器,如果能处理就交给handler处理,然后交给一系列filer,然后给指定的服务,再返回回来给客户端。
1).具体场景
gateway 配置路由:
前端将请求发送至网关服务器

gateway:routes:- id: baidu_route              # 每一个路由的名字,唯一即可uri: https://www.baidu.com   # 匹配后提供服务的路由地址predicates:                 # 断言规则- Query=url,baidu         #如果url参数等于baidu 符合断言,转到uri

如果用Zuul该怎么实现
如果是Zuul进行相似的配置即可
GateWay的好处是什么
什么是I/O操作 网关什么时候需要发起I/O操作
磁盘I/O:涉及到数据在内存和磁盘(或其他永久存储设备)之间的传输。例如,从硬盘读取文件数据到内存,或将数据从内存写入硬盘。
网络I/O:涉及到数据在内存和网络之间的传输。例如,从互联网上下载数据到本地系统,或将数据从本地系统上传到互联网。
网关在以下情况下需要发起I/O操作:
路由请求:当接收到外部的网络请求时(比如HTTP请求),网关需要读取请求数据(网络I/O操作),然后根据路由规则将请求转发到适当的服务或应用。
路由模式:
Zuul:使用同步阻塞模型,可能在高并发场景下成为性能瓶颈。
当一个线程执行I/O操作(如读取文件、网络通信等)时,它会一直等待操作完成才继续执行后续代码。
GateWay:支持异步非阻塞模式,更适合处理大量并发请求。
长连接支持:
当线程发起I/O操作时,不需要等待操作完成即可继续执行后续代码。I/O操作与线程的其他工作是并行进行的,一旦I/O操作完成,线程会通过回调或事件通知机制得到通知。
GateWay:由于基于WebFlux,它更好地支持长连接,如WebSocket。
Zuul 1.x:不支持长连接,尽管Zuul 2.x计划改进这一点。

8.为什么使用SpringCloud Alibaba 而不是SpringCloud在这里插入图片描述

熔断降级 Hystirx Sentinel

一些项目难点

某项服务访问网关时有跨域问题?
什么是跨域
跨域:指的是浏览器不能执行其他网站的脚本,它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。
同源策略:是指协议,域名,端口都要相同,其中有一个不同都会产生跨域问题
跨域的流程
非简单请求的需要发送预检请求
在这里插入图片描述
解决方式1:
使用Nginx反向代理,不同地址、端口都被同一个域名反向代理了,这就是统一域了。这种方法在开发时没法用,所以不采用。
依赖反向代理来处理所有跨域请求可能限制了架构的可扩展性和灵活性,特别是在动态扩展和微服务自动化部署方面。每次有新的服务都要更改配置
在这里插入图片描述
反向代理是一种服务器代理模式,它位于客户端和服务器之间,接收来自客户端的请求,并将这些请求转发到内部服务器。与传统的前向代理(主要用于客户端)不同,反向代理对于客户端是透明的,客户端通常不知道实际上是与一个代理而不是真实的服务器直接通信。
解决方式2:
配置当前请求允许跨域,在请求头中配置允许跨域的信息
但是很多请求都需要配置,过于麻烦
在这里插入图片描述
最终解决方式:
新建配置类 实现一个CrosWebFilter的过滤器,解决跨域问题
这个过滤器将用于处理所有的跨域请求,根据上述配置进行相应的CORS检查和头部设置。

import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
@Configuration
public class GulimallCorsConfiguration{@Beanpublic CorsWebFilter corsWebFilter(){UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();CorsConfiguration corsConfiguration= new CorsConfiguration();//1、配置跨域// 允许跨域的请求头corsConfiguration.addAllowedHeader("*");// 允许跨域的请求方式corsConfiguration.addAllowedMethod("*");// 允许跨域的请求来源corsConfiguration.addAllowedOriginPattern("*");
//注释的这句会报错。因为当allowCredentials为真时,allowedorigin不能包含特殊值"*",因为不能在"访问-控制-起源“响应头中设置该值。//corsConfiguration.addAllowedOrigin("*");//这句会报错// 是否允许携带cookie跨域corsConfiguration.setAllowCredentials(true);// 任意url都要进行跨域配置,两个*号就是可以匹配包含0到多个/的路径source.registerCorsConfiguration("/**",corsConfiguration);return new CorsWebFilter(source);}
}

什么是响应式编程:
异步非阻塞:响应式编程模型基于异步非阻塞I/O操作,这意味着在等待I/O操作(如网络请求或数据库调用)完成时,程序可以继续执行其他任务。

数据流和变化的传播:响应式编程关注于数据流的创建、组合、过滤和转换。当数据流发生变化时,这些变化会自动传播到程序的其他部分。

背压(Backpressure):这是响应式编程的一个关键概念,指的是消费者(接收方)控制生产者(发送方)数据发送速率的能力,防止消费者被过快的数据流淹没。

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

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

相关文章

【Python学习】Python学习9-字符串

目录 【Python学习】Python学习9-字符串 前言创建语法访问字符串的值字符串拼接Python 转义字符Python字符串运算符Python格式化字符串Python 三引号Unicode字符串Python 的字符串内建函数参考 文章所属专区 Python学习 前言 本章节主要说明Python的字符串类型。 创建语法 …

SQL基础知识2

select语句 1、where语句 具体的在 SQL基础知识1 2、集函数 餐厅订单案例 where后面用集函数会导致无效/错误,原因在3.1 3、group by、having 继上面的餐厅案例 案例:用两个条件分组 1、having和where的区别 2、总值计算 (汇总&#x…

Mysql高可用|索引|事务 | 调优

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 chatgpt体验地址 文章目录 前言sql语句的执行顺序关键词连接名字解释sql语句 面试坑点存储引擎MYSQL存储引擎 SQL优化索引索引失效索引的数据结构面试坑点 锁事务四大特性事务的隔离级别M…

创建一个矩形中有两个三角形

#include <glad/glad.h> #include <GLFW/glfw3.h>#include <iostream>float vertices[] {// 第一个三角形0.5f, 0.5f, 0.0f, // 右上0.5f, -0.5f, 0.0f, // 右下-0.5f, -0.5f, 0.0f, // 左下-0.5f, 0.5f, 0.0f, // 左上 };unsigned i…

P1025 [NOIP2001 提高组] 数的划分———C++(动态规划、DFS)

目录 [NOIP2001 提高组] 数的划分题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示 动态规划的解题思路Code运行结果DFSCode运行结果 [NOIP2001 提高组] 数的划分 题目描述 将整数 n n n 分成 k k k 份&#xff0c;且每份不能为空&#xff0c;任意两个方案不相…

FCRP第一题详解一

先看效果&#xff1a; 20240106-094943 看他的第一要求&#xff1a; 1.整个模板只能出现一个数据集&#xff0c;下拉复选框与报表主体共用一个数据集&#xff0c;且不影响互相显示。 所以这里不能通过SQL语句来过滤&#xff0c;SQL语句中中只能全部查询出来&#xff0c;这样保…

Linux———head,tail命令详解(狠狠爱住)

目录 head 命令&#xff1a; head 命令基本语法&#xff1a; 常用选项 示例 显示文件的前 10 行&#xff1a; 显示文件的前 5 行&#xff1a; 显示文件的前 100 个字节&#xff1a; 不显示文件名的标题信息&#xff1a; 显示文件名的标题信息&#xff1a; tail 命令&…

基于JAVA+SpringBoot的咖啡商城

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 随着互联网的普及和发…

Transformer从菜鸟到新手(五)

引言 上篇文章我们在单卡上完成了完整的训练过程。 从本文开始介绍模型训练/推理上的一些优化技巧&#xff0c;本文主要介绍多卡并行训练。 下篇文章将介绍大模型推理常用的缓存技术。 多卡训练 第一个要介绍的是利用多GPU优化&#xff0c;因为在单卡上训练实在是太慢。这…

java开发中如何使用定时任务

定时任务概述&#xff1a; 任务调度&#xff1a; 是指系统为了自动完成特定任务&#xff0c;在约定的特定时刻执行任务的过程。有了任务调度&#xff0c;即可解放更多的人力&#xff0c;而是由系统自动去执行任务。 常用业务场景案例&#xff1a; 某电商系统需要在每天上午10点…

利用“与非”运算实现布尔代数中的与,或,非三种运算

什么是“与非”运算&#xff1f; 要想明白“与非”运算&#xff0c;首先要明白“与”运算和“非”运算。 “与”运算在离散数学中叫做合取式&#xff0c;也就是A和B相同时为1的时候结果才为1&#xff0c;其余情况都为0 下面是“与”运算的真值表 “非”运算在离散数学中叫做否…

网络协议与攻击模拟_01winshark工具简介

一、TCP/IP协议簇 网络接口层&#xff08;没有特定的协议&#xff09; 物理层&#xff1a;PPPOE宽带拨号&#xff08;应用场景&#xff1a;宽带拨号&#xff0c;运营商切网过来没有固定IP就需要拨号&#xff0c;家庭带宽一般都采用的是拨号方式&#xff09;数据链路层网络层…

基于共享储能电站的工业用户日前优化经济调度【复现】

文章提出一种基于共享储能电站的工业用户日前优化经济调度方法。首先提出共享储能电站的概念&#xff0c;分析其 商业运营模式。然后将共享储能电站应用到工业用户经济优化调度中&#xff0c;通过协调各用户使用共享储能电站进行充电和 放电的功率&#xff0c;实现用户群日运行…

越南童模受邀参加上海顶级奢侈大秀

陈宝珠 - 2010年出生 - 从小就参与艺术 - 宝珠家庭中的长女。自幼就参加艺术活动&#xff0c;并在现代舞、编舞、古装舞、走秀等方面表现出色&#xff0c;在每一个科目上&#xff0c;宝珠都展现了她的风格和才华。 - 多次获得在越南艺术大赛冠军如&#xff1a;IKIDS越南冠军、T…

Linux第5步_测试虚拟机网络连接

安装好VMwareTools后&#xff0c;就可以测试虚拟机网络连接了&#xff0c;目的是实现虚拟机上网。 1、打开“控制面板”&#xff0c;得到下图&#xff1a; 2、双击“网络和 Internet” &#xff0c;得到下图&#xff1a; 3、双击“网络和共享中心” 4、点击“更改适配器设置”…

rime中州韵小狼毫 中英互绎 滤镜

英文在日常生活中已经随处可见&#xff0c;我们一般中英互译需要使用专业的翻译软件来实现。但如果我们在输入法中&#xff0c;在输入中文的时候&#xff0c;可以顺便瞟一眼对应的英文词汇&#xff0c;或者在输入英文的时候可以顺便了解对应的中文词汇&#xff0c;那将为我们的…

linux网络配置

一、查看Linux基础得网络设置 1.网关——route -n 2.IP地址——ifconfig 或 ip a ethtool -p ens33 让ens33网卡快速闪烁&#xff0c;分辨网线对应哪个网卡 3.DNS服务器——cat /etc/resolv.conf 4.主机名——hostname 5.路由——route 6.网络连接状态——ss 或 net…

【Java并发】聊聊concurrentHashMap的put核心流程

结构介绍 1.8中concurrentHashMap采用数组链表红黑树的方式存储&#xff0c;并且采用CASSYN的方式。在1.7中主要采用的是数组链表&#xff0c;segment分段锁reentrantlock。本篇主要在1.8基础上介绍下. 那么&#xff0c;我们的主要重点是分析什么呢&#xff0c;其实主要就是p…

银联扫码第三方支付接口申请:开启便捷支付新时代

随着移动支付的普及&#xff0c;越来越多的商家开始接受微信、支付宝等第三方支付平台的付款方式。然而&#xff0c;作为国内最大的银行卡组织&#xff0c;银联也在不断拓展其业务范围&#xff0c;推出了自己的扫码支付接口。本文将为您详细介绍银联扫码第三方支付接口的申请流…

GO语言笔记3-指针

指针的概念 先看一段代码的输出 package main import "fmt" func main(){ var age int 18fmt.Println("age的内存地址值是:",&age)//age的内存地址值是: 0xc000012090// 定义一个指针变量// *int 是一个指针类型&#xff0c;可以理解为指向int类型的…