JAVA面试专题-微服务篇

Spring cloud

Spring Cloud 5大组件有哪些

注册中心/配置中心:nacos
负载均衡:Ribbon
服务远程调用:Feign
服务保护:sentinel
服务网关:Gateway

微服务注册和发现

 nacos和eureka的区别

 负载均衡

        微服务向Ribbon发送请求,Ribbon从注册中心中拉取相应的微服务,返回微服务列表,最后选择一个微服务进行调用。

Ribbon负载均衡策略

 自定义负载均衡策略

自己创建类实现IRule接口,再通过配置类(全局生效)或者配置文件(局部生效)即可

服务雪崩

服务雪崩:一个服务失败,导致整条链路的服务都失败的情形。

服务降级:服务自我保护的一种方式,或者保护下游服务的一种方式,用于确保服务不会受请求突增影响变得不可用,确保服务不会崩溃,一般在实际开发中与feign接口整合,编写降级逻辑。

服务熔断:默认关闭,需要手动打开,如果检测到十秒内请求失败率超过百分之五十 ,就触发熔断机制,之后每个五秒重新尝试请求微服务,如果不能响应继续走熔断机制,如果微服务可达,则关闭熔断机制,恢复正常请求。

服务监控

采用skywalking进行监控:

1. skywalking主要可以监控接口、服务、物理实例的一些状态,特别是压测的时候可以看到众多服务中哪些服务的接口比较慢,可以针对性的分析和优化。

2. 在skywalking设置告警规则,当项目上线以后,设置给负责人发短信和邮件,第一时间知道bug修复。

业务相关

限流

限流的实现方式:

Tomcat:可以设置最大连接数
Nginx:漏桶算法


网关:令牌桶算法
自定义拦截器

CAP 和 BASE

CAP定理

Consistency:一致性        Availability:可用性        Partition tolerance:分区容错性

这三个指标无法同时满足,就叫做cap定理

BASE理论

Basically Available(基本可用):分布式系统在出现故障时,允许损失部分可用性,即核心可用
Soft State(软状态):在一定时间内,允许出现中间状态,比如临时的不一致状态。
Eventually Consistent(最终一致性):软状态结束后,最终达到数据一致。

解决分布式事务的思想和模型:

1. 最终一致思想:各分支事务分别执行并提交,如果有不一致的情况,再想办法恢复数据(AP)
2. 强一致思想:各分支事务执行完业务不要提交,等待彼此结果,而后统一提交或回滚(CP)

分布式事务解决方案

Seata架构

TC(Transaction Coordinator)-事务协调者:维护全局和分支事务状态,协调全局事务提交或回滚。
TM(Transaction Manager)- 事务管理器:定义全局事务的范围、开始全局事务、提交或回滚全局事务。
RM(Resource Manager)- 资源管理器:管理分支实物处理的资源,与TC交谈以注册分支实物和报告分支事务的状态,并驱动分支事务提交或回滚。

 XA模式:

         TM开启全局事务,调用分支RM,注册分支事务到TC,之后RM执行sql业务但是不提交,向TC报告事务状态。TC检测各分支事务执行状态,如果都成功,则提交,如果有失败则回滚,最后提交事务。

AT模式:

 TM开启全局事务,调用分支RM,向TC注册事务分支,RM执行sql并提交,同时记录更新前后快照undo log,向TC报告实物状态,TM申请提交或者回滚全局事务,TC检查事务分支状态,如果都成功则提交,同时删除undo log,如果有失败,则回顾log数据回滚。

TCC模式:

Try:资源的检测和预留        Confirm:完成资源操作业务        Cancel:预留资源释放

在注册分支事务以后,进行一次资源预留try,报告事务状态,在TC决定提交还是回滚时,如果提价,则confirm,如果回滚则cancel

MQ分布式事务

 

分布式服务接口幂等性

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

如果是新增数据,可以使用数据库唯一索引
如果是新增或者修改数据
        分布式锁,性能较低
        使用token+redis实现,性能较好:第一次请求,生成一个唯一token存入redis返回给前端,第二次请求,携带之前的token,到redis进行验证,如果存在执行业务,删除token,如果不存在,直接返回不处理业务

分布式任务调度

xxl-job路由策略:

大数据量的任务同时都需要执行

执行器集群部署时,任务路由策略选择分片广播,一次任务调度将会广播出发对应急群众所有执行器执行一次任务。

RabbitMQ

RabbitMQ如何保证数据不丢失

 三种情况数据丢失:消息未达到交换机或则消息未到达队列、队列中消息丢失、消费者未接收到消息。

生产者确认机制publisher confirm

消息发送到MQ后,会返回一个结果给发送者,表示消息是否成功。

如果传到给了消费者,就返回ack publish-confirm
如果没有传到MQ中,则返回ack publish-return
如果没传到交换机,则返回 nack publish-confirm

消息失败以后,可以回调方法即使重发,记录日志,或者保存到数据库然后定时重发,成功发送后删除表中数据。

消息持久化

 消费者确认

消息重复消费问题 

解决方案:每条消息设置一个唯一的标识Id

死信交换机

解决延迟队列=死信交换机+TTL(生存时间)

惰性队列

接收消息后存入磁盘而非内存,消费者要消费消息时才会从磁盘中读取并加载到内存,支持数百万条的消息存储。加入lazy()

RabbitMQ高可用

普通集群

会在集群的各个节点共享部分数据,但不包含队列中的消息,访问集群某节点时,如果队列不在该节点,会从数据所在节点传递到当前节点并返回,队列所在节点宕机,队列中的消息就会消失。

镜像集群

本质是主从模式,交换机,队列,队列消息会在各个mq的镜像节点之间同步备份,创建队列的节点被称为主节点,备份到其他节点的叫镜像节点。所有操作都是主节点完成,然后同步给镜像节点,主宕机后,镜像节点取而代之。

仲裁队列

主从模式,支持主从数据同步,基于Raft协议,强一致。

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

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

相关文章

基于Spring Boot的校园疫情防控系统设计与实现

基于Spring Boot的校园疫情防控系统设计与实现 开发语言:Java框架:springbootJDK版本:JDK1.8数据库工具:Navicat11开发软件:eclipse/myeclipse/idea 系统部分展示 管理员登录首页界面图,管理员进入校园疫…

Android --- 消息机制与异步任务

在Android中,只有在UIThread(主线程)中才能直接更新界面, 在Android中,长时间的工作联网都需要在workThread(分线程)中执行 在分线程中获取服务器数据后,需要立即到主线程中去更新UI来显示数据, 所以,如…

手撕spring框架(2)

相关系列 java中spring底层核心原理解析(1)-CSDN博客 java中spring底层核心原理解析(2)-CSDN博客 手撕spring框架(1)-CSDN博客 手撕spring框架(3)-CSDN博客 手撕spring框架(4)-CSDN博…

用龙梦迷你电脑福珑2.0做web服务器

用龙梦迷你电脑福珑2.0上做web服务器是可行的。已将一个网站源码放到该电脑,在局域网里可以访问网站网页。另外通过在同一局域网内的一台windows10电脑上安装花生壳软件,也可以在外网访问该内网服务器网站网页。该电脑的操作系统属于LAMP。在该电脑上安装…

Qt Creator导入第三方so库和jar包——Qt For Android

前言 之前了解了在Android Studio下导入so库和jar包,现在实现如何在Qt上导入so库和jar包。 实现 下面是我安卓开发(需调用安卓接口的代码)的目录(图1),此目录结构和原生态环境(Android Studi…

详细分析Java中的脱敏注解(附Demo)

目录 前言1. 基本知识2. 核心逻辑3. Demo4. 模版 前言 对于隐私信息,需要做特殊处理,比如身份证或者手机号等 对于Java的相关知识推荐阅读:java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全) 1. 基本知…

软件定义汽车落地的五大关键要素

1、架构升级 1.1 软件架构:分层解耦、服务化、API 接口标准化 随着企业向软件定义汽车开发方法的转变,软件架构也需要同步进行升级,引入面向服务的架构(Service-Oriented Architecture,简称 SOA)方法论。…

LeetCode刷题之买卖股票的最佳时机

文章目录 1. 买卖股票的最佳时机1.1 描述1.2 分析1.3 解答 2.买卖股票的最佳时机II2.1 描述2.2 分析2.3 解答2.4 拓展2.5 拓展二 1. 买卖股票的最佳时机 题121 买卖股票的最佳时机 1.1 描述 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 …

【Android学习】按钮监听代码

1. 简介 Button组件是Android中常用的组件&#xff0c;Button常需要和View.OnClickListener配合使用。这里记录下Button配置监听的过程。 2. 代码分析 2.1 Layout的XML代码 <Buttonandroid:id"id/btn"android:layout_width"match_parent"android:lay…

ThreeJS:响应式画布与全屏控制

响应式画布 响应式画布&#xff1a;在用户缩放浏览器窗口时&#xff0c;为便于动态更新画布尺寸与宽高比例&#xff0c;需要通过监听resize事件&#xff0c;来实现响应式画布。 window.onresize function () {//TODO:重置渲染器宽高比renderer.setSize(window.innerWidth, wi…

图文、视频处理等自媒体工具

文章目录 文本转文本图片canva同类竞品文本生成PDF,PDF再导出为图片贴入笔记类应用(如小米笔记App)中然后选择以图片形式分享UU在线工具的文字生成长图醒图App其他竞品文本转配音视频剪映将文本生成一段朗读该文本的配音视频(需要自行切割多段内容并分配时间轴)腾讯智影将…

为人处事电影解说,全新升级瀚海跑道一分钟一条视频,全平台可推广,轻轻松松日入1000

自古以来&#xff0c;我国流行的一种现象是&#xff0c;大多数人都会与领导或上司打交道。由于某些话题不宜公开讨论&#xff0c;因此出现了许多含蓄的表达方式。随着年龄的增长&#xff0c;人们的态度也发生了变化&#xff0c;从最初的轻视到现在的重视。 下 载 地 址&#…

VG做mirror引起的块偏移

事件起因 Oracle10.2环境 Aix操作系统使用aix的lvm技术。制作vg的mirror。以此来替换掉老的存储。 做mirror前&#xff0c;数据库已完全关闭 故障现象 在启动数据库时&#xff0c;发现IO错误。该系统的spfile&#xff0c;ctl&#xff0c;dbf均是用lv做的裸设备。其中dbf是使…

WebGL是啥

WebGL&#xff08;全写为Web Graphics Library&#xff09;是一种3D绘图协议&#xff0c;这种绘图技术标准允许把JavaScript和OpenGL ES 2.0结合在一起&#xff0c;通过增加OpenGL ES 2.0的一个JavaScript绑定&#xff0c;WebGL可以为HTML5 Canvas提供硬件3D加速渲染。这样&…

【重学C语言】十二、指针高级-函数指针

【重学C语言】十二、指针高级-函数指针 函数指针小案例回调函数如何看懂复杂的指针右左法则案例走起1.int (\*p[5])(int\*)2. int (\*fun)(int \*p,int (\*pf)(int \*))3. int (\*(\*fun)[5])(int \*p)4. int (\*(\*fun)(int \*p))[5]5. int(\*(\*fun())())()函数指针 函数指针…

cmake的使用方法: 编译生成库文件

一. 简介 前面文章学习了针对单个 .c文件&#xff0c;cmake 工具是如何编译的&#xff1f; 针对包含多个 .c文件&#xff0c;cmake工具又是如何编译的&#xff1f;文章如下&#xff1a; cmake的使用方法: 单个源文件的编译-CSDN博客 cmake的使用方法: 多个源文件的编译-CS…

Java入门-final关键字

final关键字 修饰基本类型 变量为只读&#xff0c;不能修改变量的内容。 final int SIZE 3;修饰引用类型 引用的对象不能改变&#xff0c;但是对象的内容可以修改。 final Car c new Car( );c.setColor("红色");修饰类的属性 类的属性不能被修改。 第一种方式&…

Linux 进程间通信之命名管道

&#x1f493;博主CSDN主页:麻辣韭菜&#x1f493;   ⏩专栏分类&#xff1a;Linux知识分享⏪   &#x1f69a;代码仓库:Linux代码练习&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多Linux知识   &#x1f51d; 目录 前言 命名管道 创建一个命名管道 …

Pandas库的基本使用

什么是Pandas? 一个开源的Python类库&#xff1a;用于数据分析、数据处理、数据可视化 高性能容易使用的数据结构容易使用的数据分析工具 很方便和其它类库一起使用&#xff1a; numpy&#xff1a;用于数学计算scikit-learn&#xff1a;用于机器学习 怎样下载安装Pandas …

Flask后端之建立模型类间的外键联系

1、模型类代码&#xff1a; 定义了三个模型类&#xff1a;User、Goods 和 Sign&#xff1a; class User(db.Model):__tablename__ userid db.Column(db.Integer, primary_keyTrue)name db.Column(db.String(100), nullableFalse)email db.Column(db.String(100), uniqueT…