读发布!设计与部署稳定的分布式系统(2版)笔记12_超时模式

news2024/11/23 22:18:33

 

1. “模式采用量”绝不是好的质量指标

1.1. 应该形成一种“面向恢复”的思维模式

1.2. 良好的模式能为开发工程师提供架构和设计方面的指导,从而减少、消除或缓解系统中的裂纹产生的影响

1.2.1. 在新发布软件后,它们能让你睡个安稳觉

2. 超时

2.1. 超时是一种简单的机制,只要认为响应不会到来,就可以停止等待

2.2. 代码不能永远等待响应,它迟早需要放弃等待

2.3. 早些年

2.3.1. 网络问题只影响那些从事操作系统、网络协议、远程文件系统等低层级软件开发的程序员

2.4. 今天

2.4.1. 每个系统都是分布式系统

2.4.2. 每个应用程序都必须应对网络的基本特点:网络会出故障

2.4.2.1. 电缆可能会断开

2.4.2.2. 传输线路上的交换机或路由器可能会坏掉

2.4.2.3. 正在寻址的计算机可能会崩溃

2.4.3. 即使已经建立了通信,参与其中的任何部件都可能随时中断

3. 超时机制/模式

3.1. 良好的超时机制可以提供失误隔离功能

3.1.1. 其他服务或设备中出现的问题不一定会成为你的问题

3.2. 在远离复杂硬件层的抽象层,良好的超时设置越来越罕见

3.2.1. 一些高级API只有很少的超时设置,有些几乎没有明确的设置

3.2.2. 许多API只提供了一个带有超时时间的调用和一个更简单、更容易但永久阻塞的调用

3.2.3. 商业软件客户端程序库缺乏超时设置

3.2.3.1. 这些库通常代表系统直接进行套接字调用

3.3. 超时可以用于单个服务

3.3.1. 任何资源池都可能枯竭

3.3.2. 在向资源池检入一个资源之前,调用线程会被阻塞

3.3.3. 无论资源是否可用,所有引起线程阻塞的资源池都必须有一个超时时间,以确保调用线程最终会解除阻塞

3.4. 处理所有潜在的超时会给代码带来不必要的复杂性

3.4.1. 网络连接代码完全充斥着针对各类超时的错误处理逻辑

3.4.2. 有一半的代码是进行错误处理,而不是提供特性

3.5. 以生产环境(而不是QA环境)为目标,其本质就是处理“是生存还是毁灭”这样的终极问题

3.5.1. 用于错误处理的代码会增强系统的韧性

3.5.2. 系统的用户可能不会因此而感激你,系统不发生停机就没人会留意你,但你晚上能睡得更好

3.6. 超时模式和快速失败模式都解决了延迟问题

3.6.1. 快速失败模式适用于传入系统的请求

3.6.2. 超时模式则主要适用于系统发出的出站请求

3.7. 超时模式还可以通过阻止客户端处理整个结果集,缓解“无限长结果集”的问题

3.8. 超时模式适用于一般类型的问题,它能帮助系统从意料之外的事件中恢复过来

4. 方案

4.1. 使用通用网关为连接处理、错误处理、查询执行和结果处理提供模板

4.1.1. 将这种通用的交互模式收集到一个类中,采用断路器模式时就会变得更加容易

4.1.2. 断路器可以记录一段时间内的超时情况,如果超时过于频繁,断路器就会跳闸

4.2. 那些使用回调函数或响应式编程风格的编程语言运行时,也能更轻松地设定超时时间

4.3. 将超时模式应用于集成点、阻塞线程和缓慢响应

4.4. 当操作时间过长,有时无须明确其原因时,只需要放弃操作并继续做其他事

4.5. 超时通常与重试一同出现

4.5.1. 在“尽力而为”的设计理念下,软件会试图重复执行一次超时操作

4.5.2. 在系统失效后立即重试,会产生一系列结果,其中只有一些是有益的

4.5.3. 如果由于重大问题而导致操作失败,那么立即重试的结果可能是再次失败

4.5.4. 在数据中心的内部,系统失效可能是因为连接的另一端出现问题

4.5.4.1. 快速重试很有可能再次失败

4.6. 慢慢地重试排队等待的任务,能使系统更加稳健

4.6.1. 延迟重试

4.6.2. 大多数情况下,应该把操作任务放入队列,稍后再重试

4.7. 务必给客户一个答案

4.7.1. 由于某种超时而无法完成操作,最好返回一个结果

4.7.1.1. 失败了

4.7.1.2. 成功了

4.7.1.3. 其他提示信息

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

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

相关文章

车载网络测试 - CANCANFD - 基础篇_04

9、CAN报文包含帧格式 1)数据帧 2)远程帧 3)错误帧 4)过载帧 SOF:Start Of Frame,帧起始位;一个显性位,表明一帧的开始 RTR:Remote Transmission Request,远…

数字孪生世界建设核心能力:数字孪生高效建模能力

创建高保真的数字孪生体虚拟模型是构建数字孪生应用的重要步骤之一,需要真实的再现物理实体的几何图形、属性、行为和规则等。数字孪生体模型不仅要在几何结构上与物理实体保持一致,更重要的是要能模拟物理实体的时空状态、行为、功能等。 1、三维数字孪…

python爬虫之Scrapy框架--日志信息--数据提取

目录 Scrapy日志信息 了解日志信息 关于日志信息的重要性 利用日志信息进行调试和优化 Scrapy数据的提取 选择器(Selector)的基本使用 Item的定义与使用 数据处理与管道(Pipeline) Scrapy日志信息 在开发和调试过程中&a…

chatgpt赋能python:Python能跨平台吗?一文详解

Python 能跨平台吗?一文详解 Python 是一种高级编程语言,自问世以来就一直备受欢迎。其简洁明了的语法,高效率的开发和优秀的文档支持为 Python 赢得了数量众多的粉丝。与其他编程语言相比,Python 最大的优势之一是其可在多个操作…

基于Java应急资源管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍: ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精…

什么是HuggingFace

一.HuggingFace简介 1.HuggingFace是什么 可以理解为对于AI开发者的GitHub,提供了模型、数据集(文本|图像|音频|视频)、类库(比如transformers|peft|accelerate)、教程等。 2.为什么需要HuggingFace 主要是HuggingFace…

机器学习——决策树算法

一、实验目的 掌握如何实现决策树算法,用并决策树算法完成预测。 二、实验内容 本次实验任务我们使用贷款申请样本数据表,该数据表中每列数据分别代表ID、年龄、高薪、有房、信贷情况、类别,我们根据如下数据生成决策树,使用代…

Python基础 P7 字典和集合

文章目录 Python基础 P7 字典和集合字典字典基础内置函数增操作fromkeys()删操作pop()、popitems()和clear()改操作update()查操作get()和in/not in视图对象keys(),values(),items()拷贝copy()setdefault() 其他函数键值数量len()列表转换list()迭代器转换iter()逆向序列revers…

【初识C语言(1)】变量和常量

文章目录 1. 局部变量和全局变量2. 变量的作用域和生命周期3. 常量 生活中的有些值是不变的(比如:圆周率,性别,身份证号码,血型等等)有些值是可变的(比如:年龄,体重&…

GitHub 上数百万个存储库可能容易被劫持

GitHub 上数以百万计的企业软件存储库很容易受到重新劫持,这是一种相对简单的软件供应链攻击,威胁行为者将依赖于特定存储库的项目重定向到恶意攻击。 研究人员在本周的一份报告中表示,这个问题与 GitHub 用户或组织更改项目名称或将其所有权…

chatgpt赋能python:Python自动执行程序:提高效率,降低出错率的利器

Python自动执行程序:提高效率,降低出错率的利器 随着科技的进步和信息技术的发展,人们越来越依赖计算机和自动化技术来完成繁琐的工作。自动化编程技术的应用也越来越广泛,其中Python自动执行程序被广泛使用。 Python自动执行程…

图像处理的两种变换:2D-DWT和Gabor变换

pywt官方API文档: 2D Forward and Inverse Discrete Wavelet Transform 目录 1. 二维离散小波变换2D-DWT 1.1 二维离散小波变换的相关公式 1.2 使用pywt实现2D-DWT 2. 窗口傅里叶变换Gabor 1. 二维离散小波变换2D-DWT DWT(Discrete Wavelet Transformation)代…

c语言通讯录——静态版本(带详细文字解释)

1.定义用于存储一个人信息的结构体 typedef struct PeoInfo {char name[NAME_MAX];int age;char sex[SEX_MAX];char addr[ADDR_MAX];char tele[TELE_MAX]; }PeoInfo;定义了一个名为 “PeoInfo” 的结构体(struct)类型,用于存储有关一个人的信…

MIAOYUN“一云多芯”全栈信创解决方案获认可!

信创,即信息技术产业创新,是数据安全、网络安全的基础,也是新基建的重要组成部分。信创产业发展已经成为经济数字化转型、提升产业链发展的关键,促进信创产业在本地落地生根,带动传统IT信息产业转型,构建区…

使用POI将excel文件导入到数据库

概要 随着时代变化,有的需求也会越来越多,例如:有的文件上千条数据需要导入数据库不可能手动一条条导入吧?太浪费时间了!所以需要编写程序让程序来导入 整体架构流程 我这里使用的是springbootmybatisMVC的项目架构…

接口测试流程、测试点和测试工具

目录 前言: 一、什么情况下开展接口测试? 二、如何进行接口测试 三、接口测试用例设计 四、接口测试工具 前言: 接口测试是一种重要的测试类型,用于验证应用程序接口的功能、性能和可靠性。 一、什么情况下开展接口测试&am…

AtomicInteger源码

介绍 Atomic包是java.util.concurrent下的另一个专门为线程安全设计的Java包,包含多个原子操作类。这个包里面提供了一组原子变量类。其基本的特性就是在多线程环境下,当有多个线程同时执行这些类的实例包含的方法时,具有排他性,…

大坝渗流监测的目的和意义

​  大坝渗流监测是对坝体内渗流场进行的监测,是确保大坝安全运行的重要手段。通过监测,可以掌握渗流场的变化规律,并根据渗流场的变化趋势预测坝体、坝基可能出现的问题。通常根据渗漏量与渗流量两个指标来进行监测,即渗漏量小…

【ndarry的基本操作】——numpy03

目录索引 基本索引和切片:普通索引:省略索引:多省略索引:间隔索引: 形态变换操作:reshape():resize():transpose():*通过参数进行转置:* flatten()&#xff1…

usb转8路串口模块

开源USB转8路串口PCB设计 文章目录 开源USB转8路串口PCB设计1. 简介2. 说明3. 一种跨电脑跨USB口的端口号自动识别方法4.开源地址 今天给大家介绍一款USB转8路串口的PCB设计,并提供一种跨电脑跨USB口的端口号自动识别方法。 1. 简介 芯片采用沁恒的CH348Q&#xff…