微服务八股(自用)

微服务

SpringCloud

注册中心:Eureka

负载均衡:Ribbon

远程调用:Feign

服务熔断:Hystrix

网关:Gateway/Zuul

Alibaba

配置中心:Nacos

负载均衡:Ribbon

服务调用:Feign

服务保护:sentinel

服务网关:Gateway

注册中心:服务注册和发现

1.注册服务(心跳续约,每30s一次)

2.拉取服务,服务提供者信息

3.负载均衡选择服务提供者

4.远程调用

Nacos

yml设置非临时实例

临时实例采用心跳监测

非临时实例nacos主动询问,主动向服务消费者推送变更消息

Nacos和Eureka

同:服务注册,服务拉取,心跳方式健康监测

异:

  1. nacos支持服务端主动监测提供者状态

    1. 临时实例:心跳模式

    2. 非临时实例:主动检测模式

  2. 临时实例不正常会被剔除,非临时实例不会剔除

  3. nacos服务变更推送

  4. nacos集群默认采用ap方式,当存在非临时实例采用cp方式

    eureka采用ap方式

nacos支持配置中心

负载均衡

发起远程调用feign使用Ribbon

feign发送请求给Ribbon,Ribbon拉取服务列表

注册中心向Ribbon返回服务列表,决定访问哪一个服务器

负载均衡策略有哪些

1.轮询

2.权重,响应时间长,权重小

3.随机

4.区域敏感策略

区域可用的服务器为基础进行服务器选择,再对区域内的服务器进行轮询(默认)

如何设置负载均衡策略

创建类实现iRule接口,

通过配置类(全局)或者配置文件配置(局部,某一个服务调用)

服务雪崩

一个服务失败,导致整条链路的服务都失败

服务降级

保护下游服务

防止请求突增不可用,确保服务不崩溃

如果降级太多,会触发熔断机制

在OpenFeign的接口上增加一个自定义的fallback回调函数(继承之后重写里面的方法)

服务熔断

Hystrix熔断机制,监控微服务调用情况,默认关闭(引导类添加注解打开)

请求失败率超过一定阈值,触发熔断(快速失败),一定时间内重新尝试请求,

不能响应,继续走熔断机制,微服务可达,关闭熔断,恢复正常请求

微服务监控方式

Springboot-admin

prometheus+Grafana

zipkin 链路追踪工具

skywalking 链路追踪工具

skywalking 程序性能监控工具,链路追踪能力

可以监控:

服务(微服务)

端点(接口)

实例(物理机)

告警服务:发短信发邮件

限流

并发大

用户恶意刷接口

实现方式:

1.Tomcat:可以设置最大的连接数 在xml文件设置

2.Nginx:漏桶算法

3.网关:令牌桶算法

4.自定义拦截器

Nginx限流(漏桶算法)

水滴代表请求的流量

漏桶存储请求

多余请求等待或抛弃

漏桶以固定速率漏出请求

控制并发连接数

网关限流(令牌桶算法)

yml配置文件,微服务路由设置添加局部过滤器

限流对象、平均速率、令牌桶总容量

固定速度生成令牌,存入令牌桶,桶满后暂停生成

请求需要到令牌桶申请令牌

申请到令牌的请求才会被服务处理

没有令牌的请求,会被阻塞或被丢弃

CAP

C一致性(任意节点数据必须一致)

A可用性(不能超时或拒绝)

P分区容错性

分区:因为网络故障导致部分节点与其他节点失联,独立分区

容错:集群出现分区,也要对外提供服务

分区P必然存在(需要网络连接)

AP最终一致性

CP强一致性

BASE是对CAP的一种解决思路

基本可用:允许损失部分可用性,保证核心可用

软状态:允许出现中间状态,临时不一致状态

最终一致性

分布式事务解决方式

seata(XA、AT、TCC)

MQ

seata架构

TC事务协调者:协调全局事务提交或回滚

TM事务管理器:定义全局事务范围,开始、提交、回滚全局事务

RM资源管理器:向TC注册报告分支事务状态,驱动分支事务提交、回滚

XA模式

TM向TC开启全局事务

TM向RM调用分支

RM向TC注册分支事务

RM内部执行业务sql

RM向TC报告事务状态

TM向TC提交、回滚全局事务

TC检查分支事务的状态

TC向RM提交、回滚

AT模式

TM向TC开启全局事务

调用分支

RM向TC注册分支事务

执行业务sql并提交

记录更新前后快照 undo.log

RM向TC报告事务状态

TM向TC提交、回滚全局事务

TC检查事务分支状态

TC通知RM提交/回滚事务

RM删除log/恢复log数据

TCC模式

TM向TC开启全局事务

TM调用分支

RM注册分支事务

RM内进行资源预留(Try)

RM向TC报告事务的状态

TM向TC提交、回滚全局事务

TC检查分支事务状态

TC通知RM提交(完成资源操作业务,try成功Confirm一定成功)

/回滚(预留资源释放,try的反向操作)

MQ模式实现分布式事务 异步 性能最好

分布式服务的接口幂等性

多次调用方法或者接口不会改变业务状态

重复调用的结果与单次调用的结果一致

网络波动用户重复点击、MQ消息重复、使用失败或超时重试机制

RESTful API

GET DELETE 幂等

POST PUT 不是幂等的

新增 数据库唯一索引

token+redis 新增修改

分布式锁 新增修改

token+redis

创建商品、提交订单、转账、支付

第一次请求

客户端获取token

生成唯一token将token存入redis中

返回token

第二次请求

带token请求业务接口

验证token是否存在

存在则处理业务(删除token)

不存在返回

返回请求结果

分布式锁(redisson)

抢不到锁的线程快速失败

控制锁的粒度

xxl-job

解决集群任务的重复执行

cron表达式定义灵活

定时任务失败了,重试和统计

任务量大,分片执行

路由策略

轮询

故障转移:按照顺序依次进行心跳检测,

选择第一个心跳检测成功的机器

分片广播:广播触发对应集群中所有机器执行一次任务

同时系统自动传递分片参数

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

集群部署时,任务路由策略选择分片广播

通过对任务项进行取模就知道这个任务项属于哪个分片

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

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

相关文章

ESP32_IDF_OTA_HTTP升级固件

ESP32_IDF_OTA_HTTP升级固件 前言:一个项目的主控使用的是ESP32,因为封装外壳的原因,所以需要采用OTA的方式进行升级,因为之前有对WIFI的OTA有所了解,所以在此基础上,使用官方提供的native_ota_example例程…

MySQL表结构化:数据类型与表生命周期详解

引言 各位数据库学习者大家好!今天我们将深入探讨MySQL中最核心的对象——表(Table)的各类操作 🎯。表是存储数据的基石,就像Excel中的工作表一样,但功能要强大得多!无论是电商网站的用户信息&…

React中的状态管理Dva总结

在 React 开发中,随着应用的复杂度增加,如何高效地管理应用状态成为了一个非常重要的问题。为了解决这一问题,很多开发者选择了 Redux,然而 Redux 的学习曲线较陡,且需要配置较多的样板代码。为此,Ant Desi…

数据结构中的高级排序算法

希尔排序 你可以将希尔排序理解成——先通过几次分组的、较小的组间插入排序将原数组变得有序&#xff0c;最后再进行一次序列基本有序的完整插入排序。 #include <stdio.h>#define ARR_LEN(arr) (sizeof(arr) / sizeof(arr[0]))void print_arr(int arr[], int len) {for…

计算机视觉最不卷的方向:三维重建学习路线梳理

提到计算机视觉&#xff08;CV&#xff09;&#xff0c;大多数人脑海中会立马浮现出一个字&#xff1a;“卷”。卷到什么程度呢&#xff1f;2022年秋招CV工程师岗位数下降了16%&#xff0c;但求职人数增加了23%&#xff0c;求职人数与招聘岗位的比例达到了恐怖的15:1&#xff0…

【Docker】Docker环境下快速部署Ollama与Open-WebUI:详细指南

Docker环境下快速部署Ollama与Open-WebUI&#xff1a;详细指南 在本篇文章中&#xff0c;我们将深入探讨如何在Docker中高效部署 Ollama 和 Open-WebUI&#xff0c;并解决在实际使用中常见的问题&#xff0c;确保你的模型服务稳定高效地运行。 一、Ollama 和 Open-WebUI 快速部…

Vue3学习(组合式API——Watch侦听器详解)

目录 一、Watch侦听器。 &#xff08;1&#xff09;侦听单个数据。 &#xff08;2&#xff09;侦听多个数据。&#xff08;数组写法&#xff1f;&#xff01;&#xff09; &#xff08;3&#xff09;immediate参数。(立即执行回调) &#xff08;3&#xff09;deep参数。(深层监…

SARIMA-LSTM融合模型对太阳黑子数量预测分析|附智能体数据代码

全文智能体链接&#xff1a;https://tecdat.cn/?p41969 分析师&#xff1a;Peng Fan 本研究以太阳黑子活动数据为研究对象&#xff0c;旨在帮助客户探索其未来走势并提供预测分析。首先&#xff0c;通过对数据的清洗和处理&#xff0c;包括离群值的识别与处理以及时间序列的建…

简单易懂的JavaScript中的this指针

文章目录 默认绑定 / 隐式绑定如何调整this1.用变量固定this2.箭头函数2.bind3.call/apply&#xff08;一次性&#xff09; 默认绑定 / 隐式绑定 要找this指针指向谁&#xff0c;我们首先要做的是&#xff1a;找到一个明确的对象&#xff0c;这个对象调用了含有this指针的函数…

Spring MVC数据绑定和响应 你了解多少?

数据绑定的概念 在程序运行时&#xff0c;Spring MVC接收到客户端的请求后&#xff0c;会根据客户端请求的参数和请求头等数据信息&#xff0c;将参数以特定的方式转换并绑定到处理器的形参中。Spring MVC中将请求消息数据与处理器的形参建立连接的过程就是Spring MVC的数据绑…

BMS工具箱用来执行贝叶斯模型平均(BMA)计算模块

贝叶斯模型平均&#xff08;Bayesian Model Averaging&#xff0c;BMA&#xff09;是一种用于处理模型不确定性的统计方法&#xff0c;通过结合多个模型的预测结果来提高预测的准确性和鲁棒性。在 MATLAB 中&#xff0c;可以使用专门的工具箱&#xff08;如 BMS 工具箱&#xf…

Java内存马的检测与发现

【网络安全】Java内存马的检测与发现 一、Java内存马的现象二、检测思路三、重点关注类四、检测方法1. 检查方法&#xff08;FindShell&#xff09;2. 检查方法&#xff08;sa-jdi&#xff09;3. 检查方法&#xff08;arthas-boot&#xff09;4. 检查方法&#xff08;cop.jar&a…

ISP有感自发

一、黑电平 由于传感器&#xff0c;即便在无光的情况下&#xff0c;依然会产生微小的暗电流&#xff0c;这些暗电流可能是噪点会影响后期的调试。因此&#xff0c;我们便将这些电流处理为0&#xff0c;成为纯黑的颜色。可以在源头消除这些误差。 如何矫正黑电平&#xff1a; …

数字信号处理-大实验1.1

MATLAB仿真实验目录 验证实验&#xff1a;常见离散信号产生和实现验证实验&#xff1a;离散系统的时域分析应用实验&#xff1a;语音信号的基音周期&#xff08;频率&#xff09;测定 目录 一、常见离散信号产生和实现 1.1 实验目的 1.2 实验要求与内容 1.3 实验…

【SSL证书系列】https双向认证中客户端认证的原理

HTTPS双向认证&#xff08;也称为双向SSL/TLS认证&#xff09;是一种增强安全性的机制&#xff0c;其中客户端和服务器都需要验证彼此的数字证书&#xff0c;以确保双方身份的真实性。以下是其核心原理和步骤的详细解析&#xff1a; 一、双向认证的核心目标 双向身份验证&#…

Linux系统编程——fork函数的使用方法

在 Linux 系统编程 中&#xff0c;fork() 函数是创建新进程的关键系统调用。fork() 在当前进程&#xff08;父进程&#xff09;中创建一个几乎完全相同的子进程。子进程和父进程从调用 fork() 的位置继续执行&#xff0c;但它们是两个独立的进程&#xff0c;每个进程都有自己的…

LLMs之ChatGPT:《Connecting GitHub to ChatGPT deep research》翻译与解读

LLMs之ChatGPT&#xff1a;《Connecting GitHub to ChatGPT deep research》翻译与解读 导读&#xff1a;这篇OpenAI帮助文档全面介绍了将GitHub连接到ChatGPT进行深度代码研究的方法、优势和注意事项。通过连接GitHub&#xff0c;用户可以充分利用ChatGPT强大的代码理解和生成…

flutter 视频通话flutter_webrtc

flutter 比较热门的库 flutter_webrtc | Flutter package agora_rtc_engine | Flutter package 我使用的是flutter_webrtc 下面是官方推荐的demo库 GitHub - flutter-webrtc/flutter-webrtc-demo: Demo for flutter-webrtc 其中 https://demo.cloudwebrtc.com:8086/ 已经停…

同设备访问php的多个接口会有先后等待问题

同设备访问php的多个接口会有先后等待问题 这个现象的核心原因通常与 PHP 的 Session 锁机制 有关&#xff0c;即使两个接口表面上无关联&#xff0c;也可能因共享 Session 导致请求排队。以下是详细分析&#xff1a; 关键背景&#xff1a;PHP 的 Session 锁机制 PHP 的 Sessi…

【免杀】C2免杀技术(三)shellcode加密

前言 shellcode加密是shellcode混淆的一种手段。shellcode混淆手段有多种&#xff1a;加密&#xff08;编码&#xff09;、偏移量混淆、UUID混淆、IPv4混淆、MAC混淆等。 随着杀毒软件的不断进化&#xff0c;其检测方式早已超越传统的静态特征分析。现代杀软往往会在受控的虚…