java面试(微服务)

在这里插入图片描述

SpringCloud五大组件

在这里插入图片描述

  1. Nacos:注册中心
  2. Ribbon:负载均衡
  3. Feign:远程调用
  4. sentinel:服务熔断
  5. Gateway:网关
    在这里插入图片描述

注册中心

Eureka

在这里插入图片描述
在这里插入图片描述

Nacos

在这里插入图片描述
在这里插入图片描述

负载均衡

Ribbon负载均衡流程

在这里插入图片描述

Ribbon的负载均衡策略

  1. RoundRobinRule:简单的轮询服务列表来选择服务器
  2. WeightedResponseTimeRule:按照权重来选择服务器,响应时间越长,权重越小
  3. RandomRule:随机选择一个可用的服务器
  4. BestAvailableRule:忽略那些短路的服务器,并选择并发数较低的服务器
  5. RetryRule:重试机制的选择逻辑
  6. AvailabilityFilteringRule:可用性敏感策略,先过滤非健康的,再选择连接数较少的实例
  7. ZoneAvoidanceRule:以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房,一个机甲等。而后再对Zone内的多个服务做轮询

自定义负载均衡策略如何实现

可以自己创建IRule接口,然后再通过配置类或者配置文件即可,通过定义IRule实现可以修改负载均衡规则,有两种方式:
在这里插入图片描述
在这里插入图片描述

服务雪崩

在这里插入图片描述

服务降级

服务降级是服务自我保护的一种方式,或者保护下游服务的一种方式,用户确保服务不会受请求突增影响变得不可用,确保服务不会崩溃
在这里插入图片描述
如果降级太多则会触发熔断

服务熔断

Hystrix熔断机制,用于监控微服务调用情况,默认是关闭的,如果需要开启需要在引导类上添加注解:@EnableCircuitBreaker,如果检测到10秒内请求的失败率超过50%,就触发熔断机制。之后每隔5秒重新尝试请求微服务,如果微服务不能响应,继续走熔断机制。如果微服务可达,则关闭熔断机制,恢复正常请求。
在这里插入图片描述
在这里插入图片描述

微服务是怎么监控的

在这里插入图片描述

skywalking

一个分布式系统的应用程序性能监控工具(Application Performance Management),提供了完善的链路追踪能力,apache的顶级项目
在这里插入图片描述
在这里插入图片描述

微服务限流

为什么要限流

  1. 并发大
  2. 防止用户恶意刷接口

限流的实现方式

  1. Tomcat:可以设置最大连接数
  2. Ngnix:漏潼算法
  3. 网关,令牌桶算法
  4. 自定义拦截器

Nginx限流

  1. 控制速率(突发流量)
    在这里插入图片描述
    在这里插入图片描述
  2. 控制并发连接数
    在这里插入图片描述

网关限流

配置文件中,微服务路由设置添加局部过滤器RequestRateLimiter
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
漏桶与令牌桶的区别:漏桶的速率绝对固定,令牌桶的速率会变化

在这里插入图片描述

CAP和BASE

CAP定理

分布式系统有三个指标:

  1. Consistency(一致性)
  2. Avaliability(可用性)
  3. Partition tolerance(分区容错性)
    分布式系统无法同时满足这三个指标,这个结论就叫做CAP定理
    在这里插入图片描述

Consistency

Consistency(一致性):用户访问分布式系统中的任意节点,得到的数据必须保持一致

Availability

Availability(可用性):用户访问集群中的任意健康节点,必须能得到响应,而不是超时或拒绝

Partition tolerance

Partition(分区):因为网络故障或其他原因导致分布式系统中的部分节点与其他节点失去连接,形成独立分区。
Tolerance(容错):在集群出现分区时,整个系统也要持续对外提供服务

结论:

  1. 分布式系统节点之间肯定是需要网络连接的,分区(P)是必然存在的
  2. 如果保证访问的高可用性(A),可以持续对外提供服务,但不能保证数据的强一致性–>AP
  3. 如果保证数据的强一致性(C),就要放弃高可用性–>CP

BASE理论

BASE理论是对CAP的一种解决思路,包含三个思想:

  1. Basicially Availability(基本可用):分布式系统在出现故障时,允许损失部分可用性,即保证核心可用
  2. Soft State(软状态):在一定时间内,允许出现中间状态,比如临时的不一致状态
  3. Eventually Consistent(最终一致性):虽然无法保证强一致性,但是在软状态结束之后,最终达到数据一致。
    在这里插入图片描述

分布式事务解决方案

Seata架构

Seata事务管理中有三个重要的角色

  1. TC(Transaction Coordinator)-事务协调者:维护全局和分支事务的状态,协调全局事务提交或回滚
  2. TM(Transaction Manager)-事务管理者:定义全局事务的范围,开始全局事务,提交或回滚全局锁事务
  3. RM(Resource Manager)-资源管理器:管理分治事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚
    在这里插入图片描述

Seata的XA模式

RM一阶段的工作:
1. 注册分治事务到TC
2. 执行分支业务sql但不提交
3. 报告执行状态到TC
TC二阶段的工作:
1. TC检测各分支事务执行状态
2. 如果都成功,通知所有RM提交事务
3. 如果有失败,通过所有RM回滚事务
RM二阶段的工作:
1. 接收TC指令,提交或回滚事务

Seata的AT模式

AT模式同样是分阶段提交的模型,不过却弥补了XA模型中资源锁定周期过长的缺陷
阶段一RM工作:
1. 注册分支事务
2. 记录undo-log(数据快照)
3. 执行业务sql并提交
4. 报告事务状态
阶段二提交时RM的工作
1. 删除undo-log
阶段二回滚时RM的工作
1. 根据undo-log恢复数据到更新之前
在这里插入图片描述

Seata的TCC模式

  1. Try:资源的检测和预留
  2. Confirm:完成资源操作业务;要求Try成功Confirm一定要能成功
  3. Cancel:预留资源释放,可以理解为Try的反向操作
    在这里插入图片描述

MQ分布式事务

在这里插入图片描述
在这里插入图片描述

接口幂等性

幂等:多次调用方法或者接口不会改变业务状态,可以保证重复调用的结果和单词调用的结果一致。
需要幂等场景:

  1. 用户重复点击
  2. MQ消息重复
  3. 应用使用失败或超时重试机制

接口幂等

基于RESTful API的角度对部分常见请求类型的幂等性特点进行分析:

请求方式说明
GET查询操作,天然幂等
POST新增操作,请求一次与请求多次造成的结果不同,不是幂等的
PUT更新操作,如果是以绝对值更新,则是幂等的。如果是通过增量的方式更新,不幂等
DELETE删除操作,根据唯一值进行删除,是幂等的

token+redis

在这里插入图片描述

分布式锁

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

C++中把Lambda 表达式作为参数传递给模板函数。

例子&#xff1a; template<class fun> void mytest(fun f) {_string s1 "abc";_string s2 "abc";if (f(s1, s2)){std::cout << "相等。\n";}}int main() {mytest([](const _string s1, const _string& s2) { return s1 s2; …

python学习笔记----异常、模块与包(九)

一、异常 1.1 什么是异常 在Python中&#xff0c;异常是程序执行时发生的错误。当Python检测到一个错误时&#xff0c;它会引发一个异常&#xff0c;这可能是由于多种原因&#xff0c;如尝试除以零、访问不存在的文件&#xff0c;或者尝试从列表中获取不存在的索引等。异常处…

数组的拷贝

数组的拷贝 文章目录 数组的拷贝浅拷贝内存分析 深拷贝内存分析 浅拷贝 概念&#xff1a;数组的浅拷贝是指新数组保存的是原数组的内存地址&#xff0c;并没有拷贝真正的值&#xff0c;如果原数组的内容发生改变那么新数组的内容也会发生相应改变。 代码实现&#xff1a; pu…

C语言/数据结构——每日一题(合并两个有序链表)

一.前言 嗨嗨嗨&#xff0c;大家好久不见&#xff01;今天我在LeetCode看到了一道单链表题&#xff1a;https://leetcode.cn/problems/merge-two-sorted-lists想着和大家分享一下&#xff0c;废话不多说&#xff0c;让我们开始今天的题目分享吧。 二.正文 1.1题目描述 1.2题…

phpstudy 搭建 upload-labs 文件上传靶场

phpstudy 搭建靶场&#xff1a;下载安装好phpstudy后&#xff0c;下载靶场源码&#xff1a; upload-labs下载地址&#xff1a; https://github.com/c0ny1/upload-labs 下载完压缩文件&#xff0c;解压文件&#xff0c;解压后的文件夹命名为upload--labs 将解压后到文件夹放…

docker如何生成springboot镜像

1、在springboot的jar包所在的目录下创建Dockerfile文件&#xff0c;此案例的目录为/usr/java Dockerfile的文件内容如下&#xff1a; FROM openjdk:8 LABEL author"zengyanhui" LABEL email"1181159889qq.com" WORKDIR /usr/java/springbootdemo COPY s…

负债56亿,购买理财产品遭违约,操纵虚假粉丝,流量在下滑,客户数量减少,汽车之家面临大量风险(六)

本文由猛兽财经历时5个多月完成。猛兽财经将通过以下二十二个章节、8万字以上的内容来全面、深度的分析汽车之家这家公司。 由于篇幅限制&#xff0c;全文分为&#xff08;一&#xff09;到&#xff08;十&#xff09;篇发布。 本文为全文的第十四章、第十五章、第十六章。 目…

机器人系统ros2-开发实践04-ROS 2 启动文件管理大型项目的最佳实践

机器人上的大型应用通常涉及多个互连的节点&#xff0c;每个节点可以有许多参数。海龟模拟器中模拟多只海龟就是一个很好的例子。海龟模拟由多个海龟节点、世界配置以及 TF 广播器和监听器节点组成。在所有节点之间&#xff0c;存在大量影响这些节点的行为和外观的 ROS 参数。 …

《与 Apollo 共创生态——Apollo7周年大会干货分享》

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 文章目录 阿波罗X企业自动驾驶解决方案自动驾驶技术提升与挑战自动驾驶系统功能与性能的详细解析<td alig…

python可视化学习笔记折线图问题-起始点问题

问题描述&#xff1a; 起始点的位置不对 from pyecharts.charts import Line import pyecharts.options as opts # 示例数据 x_data [1,2,3,4,5] y_data [1, 2, 3, 4, 5] # 创建 Line 图表 line Line() line.add_xaxis(x_data) line.add_yaxis("test", y_data) li…

数字阅览室的优势

近年来&#xff0c;随着我国社会经济的快速发展&#xff0c;信息技术的发展也得到了广泛的应用&#xff0c;我国高校图书馆和图书管理系统进入了快速发展的快车道。在这种环境下&#xff0c;数字化阅览室在校园中非常流行。数字阅览室是一套真正意义上的面向中小学图书管理、浏…

Golang | Leetcode Golang题解之第58题最后一个单词的长度

题目&#xff1a; 题解&#xff1a; func lengthOfLastWord(s string) (ans int) {index : len(s) - 1for s[index] {index--}for index > 0 && s[index] ! {ansindex--}return }

python基础语法--函数

一、函数概述 函数就是执行特定任务完成特定功能的一段代码。可以在程序中将某一段代码定义成函数&#xff0c;并指定一个函数名和接收的输入&#xff08;参数&#xff09;&#xff0c;这样就可以在程序的其他地方通过函数名多次调用并执行该段代码了。 每次调用执行后&#…

【华为】路由综合实验(基础)

【华为】路由综合实验 实验需求拓扑配置AR1AR2AR3AR4AR5PC1PC2 查看通信OSPF邻居OSPF路由表 BGPBGP邻居BGP 路由表 配置文档 实验需求 ① 自行规划IP地址 ② 在区域1里面 启用OSPF ③ 在区域1和区域2 启用BGP&#xff0c;使AR4和AR3成为eBGP&#xff0c;AR4和AR5成为iBGP对等体…

AI 图像无损放大器:多平台支持,轻松上手 | 开源日报 No.241

upscayl/upscayl Stars: 25.5k License: AGPL-3.0 upscayl 是一个免费开源的 AI 图像放大器&#xff0c;支持 Linux、MacOS 和 Windows 平台&#xff0c;并且秉承着“Linux 优先”理念构建。 使用先进的 AI 算法对低分辨率图像进行放大和增强在不损失质量的情况下放大图像&am…

ubuntu开启message文件

环境&#xff1a;ubuntu 20.04 1、首先需要修改 /etc/rsyslog.d/50-default.conf 文件&#xff1b;源文件中message被注释&#xff0c;如下图&#xff1a; 2、打开注释&#xff1a; 3、重启服务 systemctl restart rsyslog.service 如此即可&#xff01;

嵌入式学习59-ARM7(自动设备号和混杂设备)

知识零碎&#xff1a; 头文件查找&#xff1a; /arm/路径下的头文件 linux驱动程序的编写&#xff0c;编译&#xff0c;运行过程 -------------------------------------------------------------------------------------------------------------------------------- 1.…

java-函数式编程-函数对象

定义 什么是合格的函数&#xff1f;无论多少次执行函数&#xff0c;只要输入一样&#xff0c;输出就不会改变 对象方法的简写 其实在类中&#xff0c;我们很多参数中都有一个this&#xff0c;被隐藏传入了 函数也可以作为对象传递&#xff0c;lambda就是很好的例子 函数式接口中…

常用的时间序列分析方法总结和代码示例

时间序列是最流行的数据类型之一。视频&#xff0c;图像&#xff0c;像素&#xff0c;信号&#xff0c;任何有时间成分的东西都可以转化为时间序列。 在本文中将在分析时间序列时使用的常见的处理方法。这些方法可以帮助你获得有关数据本身的见解&#xff0c;为建模做好准备并…

搭建vue3组件库(三): CSS架构之BEM

文章目录 1. 通过 JS 生成 BEM 规范名称1.1 初始化 hooks 目录1.2 创建 BEM 命名空间函数1.3 通过 SCSS 生成 BEM 规范样式 2. 测试 BEM 规范 BEM 是由 Yandex 团队提出的一种 CSS 命名方法论&#xff0c;即 Block&#xff08;块&#xff09;、Element&#xff08;元素&#xf…