读发布!设计与部署稳定的分布式系统(第2版)笔记15_快速失败和替换

news2025/2/1 17:49:37

 

1. 快速失败而非缓慢响应

1.1. 如果响应缓慢比没有响应更糟,那么最坏的情况肯定是缓慢的失败响应

1.2. 如果系统能够预先确定某次调用会失败,那么最好快速失败

2. 快速失败模式通过避免响应缓慢来提高整个系统的稳定性

2.1. 当系统由于部分失效而面临压力时,快速失败模式还有助于保持系统容量

2.2. 与超时模式配合使用,快速失败模式有助于避免层叠失效

3. 预留资源并尽早验证集成点有效

3.1. 确保在开始之前就能完成事务

3.1.1. 关键资源不可用,比如所需调用的断路器已跳闸,那么就不要再浪费精力去调用

3.2. 在事务的开始阶段和中间阶段,关键资源可用状态发生变化的可能性极小

3.3. 应用程序或服务可以从传入的请求或消息中,大致了解需要哪些数据库连接和外部集成点,然后可以快速检查所需的连接,并查看集成点周围的断路器状态

4. 使用输入验证

4.1. 即使在预留资源之前,也要进行基本的用户输入验证

4.2. 找到未输入的必需参数才是关键

5. 任其崩溃并替换

5.1. 有时,为了实现系统级稳定性,放弃组件级稳定性就是所能做的最好的事情

5.1.1. 通过组件崩溃保护系统

5.1.2. 通过组件级不稳定性构建系统级稳定性

5.1.3. 这可能是将系统恢复到已知良好状态的最佳方式

5.1.4. 隔离组件以实现独立崩溃

5.2. 在Erlang语言中,这被称为“任其崩溃并替换”的哲学

5.2.1. 任其崩溃并替换的方法认为错误恢复难以完成且不可信赖,所以我们的目标应该是尽快回到刚完成启动时的干净状态

5.3. 程序所能拥有的最干净的状态,就是在刚刚完成启动的那一刻

5.4. 前提

5.4.1. 有限的粒度

5.4.1.1. 必须为崩溃定义边界

5.4.1.2. 发生崩溃的组件应该是独立的,系统的其余部分必须能够自我防护,避免受到层叠失效的影响

5.4.1.3. 在微服务架构中,服务的整个实例可能是正确的崩溃粒度

5.4.1.4. 在Erlang和Elixir中,崩溃的自然边界就是actor

5.4.2. 快速替换

5.4.2.1. actor这样的进程内组件,重启时间以微秒为单位

5.4.2.2. 在容器中运行Go二进制文件

5.4.2.2.1. 启动一个新容器及其内部一个进程的时间以毫秒为单位计算,此时就可以通过让整个容器崩溃实现快速替换

5.4.2.3. NodeJS服务在AWS中一个长时间运行的虚拟机上运行

5.4.2.3.1. 启动NodeJS进程需要花几毫秒,但启动一台新的虚拟机则需要几分钟
5.4.2.3.2. 只需要让NodeJS进程崩溃,就可以实现快速替换

5.4.2.4. 不要让单体系统崩溃

5.4.2.4.1. 运行时负载较大或启动时间较长的大型进程,不适合运用“任其崩溃并替换”策略
5.4.2.4.2. 将许多特性耦合到单个进程中的应用程序,也不推荐运用该策略
5.4.2.4.3. 在数据中心的几台虚拟机上,运行着一个老旧的前端安装API的JavaEE应用程序
5.4.2.4.3.1. 启动时间以分钟为单位计算,此时,“任其崩溃并替换”并不是正确的策略

5.4.3. 监管

5.4.3.1. 监管器不是服务的消费者

5.4.3.2. 管理工人与要求服务是两码事

5.4.3.3. 如果把两者混淆,就会损害系统

5.4.4. 重新归队

5.4.4.1. 在一个actor或实例先崩溃然后由监管器重新将其启动之后,系统必须要恢复对新启动的服务提供方的调用

5.4.4.2. 如果实例被直接调用,则调用方的断路器应该自动将该实例重新归队

5.4.4.3. 如果实例是负载均衡池中的一部分,那么必须能够将实例加回池中,接受工作

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

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

相关文章

【pytorch,onnx,bug解决】pytorch的op:pixel unshuffle转到onnx的op:SpaceToDepth

文章目录 问题1, 转换失败问题1解决问题2,精度对不上问题2解决训练时转换时 问题1, 转换失败 pytorch训练好的模型想要在onnx上部署,但是发现算子F.pixel_unshuffle 不能直接转到onnx 的 SpaceToDepth, 发生以下报错&…

Android——基本控件(下)(十六)

1. 随笔提示文本:AutoCompleteTextView 1.1 知识点 (1)了解随笔提示功能的应用; (2)可以使用AutoCompleteTextView类完成随笔提示功能的实现。 1.2 具体内容 这个组件就是提供了一个文本输入的功能&…

YOLO改进教程:6.添加NAM-Net注意力机制

论文地址:https://arxiv.org/abs/2111.12419Github:https://github.com/Christian-lyc/NAM如果你是深度学习小白,阅读本文前建议先学习一下 📖《新手入门深度学习》如果你有一定基础,但是缺乏实战经验,可通过 📖《深度学习100例》 补齐基础另外,我们正在通过 🔥365…

window11系统打开VMware虚拟机,导致主机直接重启

问题描述: window11系统打开VMware虚拟机,直接导致主机直接重启 原因: 未开启“虚拟机平台”选项。 解决方式: 打开电脑“控制面板”,选择“程序”,在再选择程序中的“启用或关闭windows功能” 控制面板➡…

MyBatis 执行流程详解及示例代码

导言: MyBatis 是一个优秀的持久层框架,它简化了数据库操作的开发过程。本文将详细介绍 MyBatis 的执行流程,并提供相应的示例代码,帮助读者更好地理解和应用 MyBatis。 1. 创建 SqlSessionFactoryBuilder 对象 在 MyBatis 中&…

基于redis的bitmap实现签到功能(后端)

项目环境 MacOS springboot: 2.7.12 JDK 11 maven 3.8.6 redis 7.0.11 StringRedisTemplate 的key和value默认都是String类型 可以避免不用写配置类,定义key和value的序列化。 实现逻辑: 获取用户登录信息 根据日期获取当天是多少号 构建…

【服务器数据恢复】热备盘同步失败导致服务器崩溃的数据恢复案例

服务器数据恢复环境: 两组分别由4块SAS硬盘组建的raid5磁盘阵列,ext3文件系统,通过LVM管理磁盘存储。 服务器故障: 一组raid5磁盘阵列中的1块硬盘故障离线,热备盘成功启用并开始同步数据,在同步还没有完成…

互联网保险驶入发展快车道,元保保险加速数字化突围

随着90后、00后这一群体逐渐进入婚育高峰期,加之相较60后、70后群体,这群互联网原住民已经成为保险消费的主力人群,互联网保险行业迎来了新的发展机遇,互联网平台恰似曾经辉煌的大卖场、集市、商场,成为汇聚流量的新平台,只不过,能量的漩涡更大,更聚焦。对此,元保集团创始人兼C…

记录一个Masonry 添加约束导致的label 文案展示不全的问题

问题如图,蓝色label 中的文字没有展示完全,后面还有“情。” 原因,我们使用masonry 布局的时候,宽度会有细微的误差,导致我们实际 添加的约束比我们期望的要小,就导致横向无法容下期望的文字宽度&#xf…

如何使用MySQL统计当月每日收益金额

如果要实现上图这个效果,这个SQL应该怎么写呢? 目录 1、实现思路 2、SQL实现 1、实现思路 首先,我们先实现查询当月每日的日期 。然后将查询结果与需要统计的表进行左连接即可。 SELECT DATE(DATE_SUB(CURRENT_DATE(), INTERVAL (DAY(CURRE…

微服务springcloud 10.config配置中心框架和rabbitmq的安装

config配置中心的作用:项目的yml 配置文件保存到 git 服务器,例如 github.com 或 gitee.com 微服务启动时,从服务器获取配置文件 1.新建 “Project”,命名为 config。注意这里的不是maven项目,而是project 2.将sp02,sp03,sp04,s…

git常用命令之Fetch

4. Fetch 命令-----------------------------------------------------------------------------作用延展阅读git fetch1. 拉取「远程仓库」的所有远程分支的最新Commit-ID 记录在 .git/FETCH_HEAD 文件中.若有多个分支则 FETCH_HEAD 内会有多行数据,该文件首行对应…

dbca添加实例时无法发现对方主机

有个12.2集群环境,需要添加一个实例,直接图形化启动dbca,第四步时只能发现本机,无法识别到另外一个节点,如下图 通过排查发现是oracle用户的密码过期了,细节如下 [roothydb1 ~]# su - grid Last login: W…

C++11关键字

decltype 根据表达式的类型自动推导类型 int main(void) {decltype(x) c 21.1; //赋值decltype((x)) d c; // 是一个引用decltype(x) e c; //d 120;cout << sizeof(int) << endl;cout << sizeof(c) << " c" << c << endl;…

【Rust】所有权

文章目录 所有权stack与heap所有权存在的原因所有权规则变量作用域String类型内存和分配变量与数据交互的方式1.Move2.Clone3.Copy 所有权与函数返回值与作用域引用借用可变引用悬空引用Dangling References引用的规则切片字符串切片将字符串切片作为参数传递其他类型的切片 所…

1.2 matlab信号分析编程基础

1.画正弦波 xlinspace(0,2*pi,100); ysin(x); plot(x,y);2.画方波 xlinspace(0,4*pi,100); ysquare(x); plot(x,y);3.矩阵赋值 4.标准函数 5.画图 title&#xff1a;标题 grid&#xff1a;开关网格线 叠加多条曲线 3.GUI画正弦波 Fs 44100; dt 1.0/Fs; T 1; N T/dt…

Acer宏碁笔记本电脑Aspire蜂鸟FUN S50-51原装Windows10系统镜像,恢复出厂系统

Acer宏碁笔记本电脑Aspire蜂鸟S50-51原厂Win10系统工厂模式恢复原装出厂OEM系统 系统自带所有驱动、办公软件、出厂主题壁纸LOGO、 Acer Care Center、Quick Access等预装程序 所需工具&#xff1a;32G或以上的U盘&#xff08;非必需&#xff09; 文件格式&#xff1a;多个I…

Java垃圾搜集算法和垃圾回收算法

垃圾回收主要针对的是JVM的堆内存&#xff0c;分为新生代和老年代。 按照以前的叫法&#xff0c;还有一个永久代&#xff0c;它在方法区里保存了class信息、静态变量、常量池等。 从jdk-1.8开始&#xff0c;方法区的实现发生了一些变化&#xff0c;取消了永久代的概念&#xff…

墨迹api实现天气预测

文章目录 需求背景解决效果接口地址index.vueweather.vue图标文件 视频效果 需求背景 使用墨迹天气api实现天气预报&#xff0c;空气质量预报功能 解决效果 接口地址 墨迹天气 index.vue <template><div class"dqhjjc-wrap"><div class"fir…

pytorch快速入门中文——03

神经网络 原文&#xff1a;https://pytorch.org/tutorials/beginner/blitz/neural_networks_tutorial.html#sphx-glr-beginner-blitz-neural-networks-tutorial-py 可以使用torch.nn包构建神经网络。 现在您已经了解了autograd&#xff0c;nn依赖于autograd来定义模型并对其进…