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

在这里插入图片描述

分布式锁

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

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

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

相关文章

分类预测 | MATLAB实现LSSVM最小二乘支持向量机多分类预测

分类预测 | MATLAB实现LSSVM最小二乘支持向量机多分类预测 目录 分类预测 | MATLAB实现LSSVM最小二乘支持向量机多分类预测分类效果基本介绍程序设计参考资料分类效果 基本介绍 MATLAB实现LSSVM最小二乘支持向量机多分类预测。最小二乘支持向量机(Least Squares Support Vecto…

网络应用层之(6)L2TP协议详解

网络应用层之(6)L2TP协议 Author: Once Day Date: 2024年5月1日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文档可参考专栏:通信网络技术_Once-Day的…

python算法题

需求 代码 class Solution:def searchInsert(self, nums: List[int], target: int) -> int:if max(nums) >target:for i in range(len(nums)-1):if nums[i1] > target and nums[i] <target:return i1if max(nums) <target:return len(nums)if min(nums) > …

kubectl_入门_Pod控制器

Pod控制器 在k8s中&#xff0c;按照pod的创建方式可以将其分为两类 自主式pod&#xff1a;k8s直接创建出来的pod&#xff0c;这种pod删除后就没有了&#xff0c;也不会重建控制器创建的pod&#xff1a;通过控制器创建的pod&#xff0c;这种pod删除了之后还会自动重建 1. 什么…

【docker 】 push 镜像提示:denied: requested access to the resource is denied

往 Docker Registry &#xff08;私服&#xff09;push 镜像提示&#xff1a;denied: requested access to the resource is denied 镜像push 语法&#xff1a;docker push <registry-host>:<registry-port>/<repository>:<tag> docker push 192.16…

C语言 | Leetcode C语言题解之第61题旋转链表

题目&#xff1a; 题解&#xff1a; struct ListNode* rotateRight(struct ListNode* head, int k) {if (k 0 || head NULL || head->next NULL) {return head;}int n 1;struct ListNode* iter head;while (iter->next ! NULL) {iter iter->next;n;}int add n…

第12章 软件测试基础(第一部分)概念、质量保证、测试用例、测试执行过程

一、软件测试 &#xff08;一&#xff09;定义 动态验证计算机程序对有限的测试用例集是否可产生期望的结果的过程。测试计划是描述了要进行的测试活动的范围、方法、资源和进度的文档。编写测试计划目的&#xff1a;使测试工作顺利进行、使项目参与人员沟通更舒畅、使测试工…

操作系统:线程

目录 前言&#xff1a; 1.线程 1.1.初识线程 1.2.“轻量化”进程 1.3.线程与进程 2.线程控制 2.1.pthread原生线程库 2.2.线程控制的接口 2.2.1.线程创建 2.2.线程退出|线程等待|线程分离|线程取消 2.3.pthread库的原理 2.4.语言和pthread库的关系 2.5.线程局部…

redis核心数据结构——跳表项目设计与实现(跳表结构介绍,节点类设计,随机层级函数)

跳表结构介绍。跳表是redis等知名软件的核心数据结构&#xff0c;其实现的前提是有序链表&#xff0c;思想的本质是在原有一串存储数据的链表中&#xff0c;间隔地抽出一半元素作为上一级链表&#xff0c;并将抽提出的元素和原先的位置相关联&#xff0c;这样重复下去直到最上层…

Android AOSP探索之Ubantu下Toolbox的安装

文章目录 概述安装Toolbox解决运行的问题 概述 由于最近需要进军android的framework,所以需要工具的支持&#xff0c;之前听说江湖上都流传source insight,我去弄了一个破解版&#xff0c;功能确实强大&#xff0c;但是作为多年android开发的我习惯使用android studio。虽然使…

数据分析及AI技术在旅游行业的应用

引言 旅游行业是一个充满潜力和机遇的领域&#xff0c;而数据分析和人工智能&#xff08;AI&#xff09;技术的迅猛发展为这个行业带来了前所未有的机遇和挑战。本文将探讨数据分析及AI技术在旅游行业中的具体应用及其带来的影响。 数据分析在旅游行业的4种应用 在旅游行业…

【开源设计】京东慢SQL组件:sql-analysis

京东慢SQL组件&#xff1a;sql-analysis 一、背景二、源码简析三、总结 地址&#xff1a;https://github.com/jd-opensource/sql-analysis 一、背景 开发中&#xff0c;无疑会遇到慢SQL问题&#xff0c;而常见的处理思路都是等上线&#xff0c;然后由监控报警之后再去定位对应…

附录3-小程序常用事件

目录 1 点击事件 tap 2 文本框输入事件 input 3 状态改变事件 change 4 下拉刷新事件 onPullDownRefresh() 5 上拉触底事件 onReachBottom() 1 点击事件 tap 2 文本框输入事件 input 可以使用 e.detail.value 打印出当前文本框的值 我现在在文本框中依次输入12345&…

APScheduler定时器使用:django中使用apscheduler,使用mysql做存储后端

一、基本环境 python版本&#xff1a;3.8.5 APScheduler3.10.4 Django3.2.7 djangorestframework3.15.1 SQLAlchemy2.0.29 PyMySQL1.1.0二、django基本设置 2.1、新增一个app 该app用来写apscheduler相关的代码 python manage.py startapp gs_scheduler 2.2、修改配置文件s…

Typora+PicGo+阿里云OSS搭建个人博客图床(2024最新详细搭建教程)

创作者&#xff1a;Code_流苏(CSDN) 目录 一、什么是图床&#xff1f;二、准备工作三、配置PicGo四、配置Typora五、使用 很高兴你打开了这篇博客&#xff0c;如有疑问&#xff0c;欢迎评论。 更多好用的软件工具&#xff0c;请关注我&#xff0c;订阅专栏《实用软件与高效工具…

基于肤色模型的人脸识别FPGA实现,包含tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 matlab2022a的测试结果如下&#xff1a; vivado2019.2的仿真结果如下&#xff1a; 将数据导入到matlab中&#xff0c; 系统的RTL结构图如下图所示…

安装“STM32F4 Discovery Board Programming with Embedded Coder”MATLAB获取硬件支持包失败

安装“STM32F4 Discovery Board Programming with Embedded Coder”MATLAB获取硬件支持包失败 -完美解决方法 显示请续订您的软件维护服务&#xff0c;解决办法 根据知乎的文章 MATLAB获取硬件支持包失败&#xff0c;显示请续订您的软件维护服务&#xff0c;解决办法&#xff…

为家庭公网IP配置DDNS域名

文章目录 域名配置域名更新frp配置修改 在成功完成frp改造Windows笔记本实现家庭版免费内网穿透之后&#xff0c;某天我突然发现内网穿透失效了&#xff0c;一番排查之后原来是路由器对应的公网IP更换了。果然我分到的并不是固定的公网IP&#xff0c;而是会定期变化的。为了免受…

头歌:SparkSQL简单使用

第1关&#xff1a;SparkSQL初识 任务描述 本关任务&#xff1a;编写一个sparksql基础程序。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;1. 什么是SparkSQL 2. 什么是SparkSession。 什么是SparkSQL Spark SQL是用来操作结构化和半结构化数据的接口。…

【深耕 Python】Data Science with Python 数据科学(18)Scikit-learn机器学习(三)

写在前面 关于数据科学环境的建立&#xff0c;可以参考我的博客&#xff1a; 【深耕 Python】Data Science with Python 数据科学&#xff08;1&#xff09;环境搭建 往期数据科学博文一览&#xff1a; 【深耕 Python】Data Science with Python 数据科学&#xff08;2&…