微服务八股(自用)
微服务
SpringCloud
注册中心:Eureka
负载均衡:Ribbon
远程调用:Feign
服务熔断:Hystrix
网关:Gateway/Zuul
Alibaba
配置中心:Nacos
负载均衡:Ribbon
服务调用:Feign
服务保护:sentinel
服务网关:Gateway
注册中心:服务注册和发现
1.注册服务(心跳续约,每30s一次)
2.拉取服务,服务提供者信息
3.负载均衡选择服务提供者
4.远程调用
Nacos
yml设置非临时实例
临时实例采用心跳监测
非临时实例nacos主动询问,主动向服务消费者推送变更消息
Nacos和Eureka
同:服务注册,服务拉取,心跳方式健康监测
异:
-
nacos支持服务端主动监测提供者状态
-
临时实例:心跳模式
-
非临时实例:主动检测模式
-
-
临时实例不正常会被剔除,非临时实例不会剔除
-
nacos服务变更推送
-
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表达式定义灵活
定时任务失败了,重试和统计
任务量大,分片执行
路由策略
轮询
故障转移:按照顺序依次进行心跳检测,
选择第一个心跳检测成功的机器
分片广播:广播触发对应集群中所有机器执行一次任务
同时系统自动传递分片参数
大数据量的任务同时需要执行
集群部署时,任务路由策略选择分片广播
通过对任务项进行取模就知道这个任务项属于哪个分片
相关文章:
微服务八股(自用)
微服务 SpringCloud 注册中心:Eureka 负载均衡:Ribbon 远程调用:Feign 服务熔断:Hystrix 网关:Gateway/Zuul Alibaba 配置中心:Nacos 负载均衡:Ribbon 服务调用:Feign 服务…...
指定elf文件dwarf 版本以及查看dwarf版本号
背景: 在实际项目开发过程中,为了让低版本的CANape 工具识别elf 文件,需要在编译elf文件时,指定dwarf的版本。 使用方法: 需要再CMakeLists.txt中指定dwarf 版本 add_compile_options(-g -gdwarf-2) #-gdwarf-4 验…...

Fidder基本操作
1.抓取https请求 Fidder默认不能抓取https请求,我们必须通过相应的设置才能抓取https请求 1.选择tools下的option 2.选择https选项,并且勾选下面的选项 3.点击Actions导出信任证书到桌面(expert root certificate to desktop) 4.在浏览器中添加对应的证…...

项目管理进阶:精读 78页华为项目管理高级培训教材【附全文阅读】
本文概述了华为项目管理(高级)课程的学习目标及学习方法。学习该课程后,学员应能: 1. **深刻理解项目管理**:掌握项目管理的基本概念与方法,构建项目管理思维框架。 2. **应用IBEST理念**:结合I…...

[Java] 方法和数组
目录 1. 方法 1.2 什么是方法 1.2 方法的定义 1.3 方法的调用 1.4 方法的重载 1.5 递归 2. 一维数组 2.1 什么是数组 2.2 数组的创建 2.3 数组的初始化 2.4 遍历数组 2.5 引用数据类型 2.6 关于null 2.7 数组转字符串 2.8 数组元素的查找 2.9 数组的排序 2.10…...

微软家各种copilot的AI产品:Github copilot、Microsoft copilot
背景 大家可能听到很多copilot,比如 Github Copilot,Microsoft Copilot、Microsoft 365 Copilot,有什么区别 Github Copilot:有网页版、有插件(idea、vscode等的插件),都是面向于程序员的。Mi…...
KL散度 (Kullback-Leibler Divergence)
KL散度,也称为相对熵 (Relative Entropy),是信息论中一个核心概念,用于衡量两个概率分布之间的差异。给定两个概率分布 P ( x ) P(x) P(x) 和 Q ( x ) Q(x) Q(x)(对于离散随机变量)或 p ( x ) p(x) p(x) 和 q ( x …...
深入解析:java.sql.SQLException: No operations allowed after statement closed 报错
在 Java 应用程序开发过程中,尤其是涉及数据库交互时,开发者常常会遇到各种各样的异常。其中,java.sql.SQLException: No operations allowed after statement closed是一个较为常见且容易令人困惑的错误。本文将深入剖析这一报错,…...
DAY 23 训练
DAY 23 训练 DAY23 机器学习管道 pipeline基础概念转换器(Transformer)估计器(Estimator) 管道(Pipeline)代码演示没有 pipeline 的代码pipeline 的代码教学导入库和数据加载分离特征和标签,划分…...
wordcount程序
### 在 IntelliJ IDEA 中编写和运行 Spark WordCount 程序 要使用 IntelliJ IDEA 编写并运行 Spark 的 WordCount 程序,需按照以下流程逐步完成环境配置、代码编写以及任务提交。 --- #### 1. **安装与配置 IntelliJ IDEA** 确保已正确安装 IntelliJ IDEA&#x…...

回溯法理论基础 LeetCode 77. 组合 LeetCode 216.组合总和III LeetCode 17.电话号码的字母组合
目录 回溯法理论基础 回溯法 回溯法的效率 用回溯法解决的问题 如何理解回溯法 回溯法模板 LeetCode 77. 组合 回溯算法的剪枝操作 LeetCode 216.组合总和III LeetCode 17.电话号码的字母组合 回溯法理论基础 回溯法 回溯法也可以叫做回溯搜索法,它是一…...

【进程控制二】进程替换和bash解释器
【进程控制二】进程替换 1.exec系列接口2.execl系列2.1execl接口2.2execlp接口2.3execle 3.execv系列3.1execv3.2总结 4.实现一个bash解释器4.1内建命令 通过fork创建的子进程,会继承父进程的代码和数据,因此本质上还是在执行父进程的代码 进程替换可以将…...
线性回归策略
一种基于ATR(平均真实范围)、线性回归和布林带的交易策略。以下是对该策略的全面总结和分析: 交易逻辑思路 1. 过滤条件: - 集合竞价过滤:在每个交易日的开盘阶段,过滤掉集合竞价产生的异常数据。 - 价格异常过滤:排除当天开盘价与最高价或最低价相同的情况,这…...
Linux下的c/c++开发之操作Redis数据库
C/C 操作 Redis 的常用库 在 C/C 开发中操作 Redis 有多种方式,最主流的选择是使用第三方客户端库。由于 Redis 官方本身是使用 C 编写的,提供的 API 非常适合 C/C 调用。常见的 Redis C/C 客户端库包括: hiredis:官方推荐的轻量…...
Bitmap、Roaring Bitmap、HyperLogLog对比介绍
一、Bitmap(位图)概述 Bitmap 是一种用位(bit)来表示集合元素是否存在的数据结构。每个位代表一个元素的状态(0或1),非常节省空间且支持快速集合操作。 常见Bitmap类型: 普通Bitmap 最简单的位数组,适合元素范围固定且不稀疏的场景。例如,元素范围是0~1000,用1001…...

JavaScript 的编译与执行原理
文章目录 前言🧠 一、JavaScript 编译与执行过程1. 编译阶段(发生在代码执行前)✅ 1.1 词法分析(Lexical Analysis)✅ 1.2 语法分析(Parsing)✅ 1.3 语义分析与生成执行上下文 🧰 二…...
fastapi项目中数据流转架构设计规范
一、数据库层设计 1.1 ORM模型定义 class SysUser(Base):__table_args__ {"mysql_engine": "InnoDB","comment": "用户表"}id: Mapped[int] mapped_column(Integer, primary_keyTrue, autoincrementTrue, comment"用户ID&quo…...

NHANES指标推荐:FMI
文章题目:Exploring the relationship between fat mass index and metabolic syndrome among cancer patients in the U.S: An NHANES analysis DOI:10.1038/s41598-025-90792-9 中文标题:探索美国癌症患者脂肪量指数与代谢综合征之间的关系…...

【JDBC】JDBC常见错误处理方法及驱动的加载
MySQL8中数据库连接的四个参数有两个发生了变化 String driver "com.mysql.cj.jdbc.Driver"; String url "jdbc:mysql://127.0.0.1:3306/mydb?useSSLfalse&useUnicodetrue&characterEncodingutf8&serverTimezoneAsia/Shanghai"; 或者Strin…...
React中useState中更新是同步的还是异步的?
文章目录 前言一、useState 的基本用法二、useState 的更新机制1. 内部状态管理2. 状态初始化3. 状态更新 三、useState 的更新频率与异步行为1. 异步更新与批量更新2. 为什么需要异步更新? 四、如何正确处理 useState 的更新1. 使用回调函数形式的更新2. 理解异步更…...
Vim编辑器命令模式操作指南
Vim 的命令模式(即 Normal 模式)是 Vim 的核心操作模式,用于执行文本编辑、导航、搜索、保存等操作。以下是命令模式下的常用操作总结: 1. 模式切换 进入命令模式:在任何模式下按 Esc 键(可能需要多次按&a…...

车载以太网驱动智能化:域控架构设计与开发实践
title: 车载以太网驱动专用车智能化:域控架构设计与开发实践 date: 2023-12-01 categories: 新能源汽车 tags: [车载以太网, 电子电气架构, 域控架构, 专用车智能化, SOME/IP, AUTOSAR] 引言:专用车智能化转型的挑战与机遇 专用车作为城市建设与工业运输…...

如何利用技术手段提升小学数学练习效率
在日常辅导孩子数学作业的过程中,我发现了一款比较实用的练习题生成工具。这个工具的安装包仅1.8MB大小,但基本能满足小学阶段的数学练习需求。 主要功能特点: 参数化出题 可自由设置数字范围(如10以内、100以内) 支…...
C# DataGrid功能总览
目录 前言一、DataGrid基础功能1.DataGrid基础属性2.DataGridTextColumn属性3.DataGridTemplateColumn属性4.表DataGrid点击单元格或行时弹出两个按钮 二、其他功能1.表行DataGrid出现斑马纹效果2.表行DataGrid字体、行背景标红 前言 最近所实现的功能里,表DataGri…...

BGP路由策略 基础实验
要求: 1.使用Preva1策略,确保R4通过R2到达192.168.10.0/24 2.用AS_Path策略,确保R4通过R3到达192.168.11.0/24 3.配置MED策略,确保R4通过R3到达192.168.12.0/24 4.使用Local Preference策略,确保R1通过R2到达192.168.1.0/24 …...

第9讲、深入理解Scaled Dot-Product Attention
Scaled Dot-Product Attention是Transformer架构的核心组件,也是现代深度学习中最重要的注意力机制之一。本文将从原理、实现和应用三个方面深入剖析这一机制。 1. 基本原理 Scaled Dot-Product Attention的本质是一种加权求和机制,通过计算查询(Query…...
2025B难题练习
1.启动多任务排序 拓扑排序 每次选入度为0的点 对每次选的点进行排序 package mainimport ("bufio""fmt""os""slices""strings" )func main() {scanner : bufio.NewScanner(os.Stdin)scanner.Scan()text : scanner.Text()…...

双向长短期记忆网络-BiLSTM
5月14日复盘 二、BiLSTM 1. 概述 双向长短期记忆网络(Bi-directional Long Short-Term Memory,BiLSTM)是一种扩展自长短期记忆网络(LSTM)的结构,旨在解决传统 LSTM 模型只能考虑到过去信息的问题。BiLST…...

MySQL UPDATE 执行流程全解析
引言 当你在 MySQL 中执行一条 UPDATE 语句时,背后隐藏着一套精密的协作机制。从解析器到存储引擎,从锁管理到 WAL 日志,每个环节都直接影响数据一致性和性能。 本文将通过 Mermaid 流程图 和 时序图,完整还原 UPDATE 语句的执行…...

亚马逊云科技:开启数字化转型的无限可能
在数字技术蓬勃发展的今天,云计算早已突破单纯技术工具的范畴,成为驱动企业创新、引领行业变革的核心力量。亚马逊云科技凭借前瞻性的战略布局与持续的技术深耕,在全球云计算领域树立起行业标杆,为企业和个人用户提供全方位、高品…...