分布式系统中的乐观和错误假设

避免协调是让我们构建的分布式系统超越单机性能的一个基本要素。当我们构建避免协调的系统时,我们最终构建的组件会假设其他组件在做什么。这一点也很重要。如果两个组件不能在每一步操作后都互相检查,那么它们就需要对其他组件正在进行的行为做出假设。

有一种方法是设置假设前提,前置条件,这种前提可分为乐观假设和悲观假设。本文讨论的是这种先入为主的假设有时很多余,甚至自己绊自己。

在思考分布式系统的设计时,明确每个组件所做的假设、该假设是乐观的还是悲观的,以及如果假设错误会发生什么情况,是非常有用的。

在悲观假设和乐观假设之间做出选择,会对系统的可扩展性和性能产生巨大影响。

假设与协调性:

  • 乐观假设会避免或延迟协调,

  • 而悲观假设则需要或寻求协调。

假设与自以为是:

  • 乐观的假设认为自己会按计划行事。
  • 而悲观的假设则会铤而走险,确保自己能够得逞。

为了具体说明这一点,让我们举几个例子:

示例 1:缓存
分布式缓存几乎总是假设其所保存的数据是否发生了变化。与 CPU2 不同,分布式缓存通常并不一致,但我们仍希望它们最终保持一致。我们所说的最终一致性是指,如果写入流停止,缓存最终都会趋于包含相同的数据。换句话说,不一致的时间相对较短。

确保这一特性(即不一致性是短暂的)的最常见方法可能就是使用生存时间(TTL)。

简单地说,这意味着缓存只在一定的固定时间内保存项目。TTL 为项目的陈旧程度提供了一个强 上限。这是一种简单、强大且广受欢迎的机制。

但这也是一种悲观的假设:假设缓存中数据条目发生了变化,缓存就会做额外的工作。
在每条目的写入率较低的系统中,这种悲观假设的错误概率要比正确率高得多。(再写入较低情况下,没有必要有这种悲观假设)

TTL 是悲观假设以后制造出的新问题,另外一个缺点是:当缓存无法与源对话时,它就会清空缓存。这是不可避免的:如果缓存无法与源联系,那么缓存就无法提供有强约束的滞后性(或任何其他强滞后性保证)。

因此,悲观的 TTL 假设具有很强的可用性劣势:如果网络分区或授权停机时间超过 TTL,缓存命中率将降为零。

示例 2:乐观并发控制OCC
乐观并发控制及其与基于锁的悲观方法之间的权衡是分布式数据库中的一个经典话题(也许是最经典的话题)。

  • OCC乐观并发控制是一种实现隔离(如 ACID I)事务的方法,它假定其他并发事务不会发生冲突,并在最后时刻检测该假定是否错误。
  • 而像经典的两阶段锁2PC这样的悲观方法,则是在假定其他事务会发生冲突的基础上进行大量的协调工作,值得趁早发现,以避免重复工作并做出明智的调度决策。

一般来说,当乐观假设正确时,OCC 系统的协调程度低于悲观系统;当乐观假设错误时,OCC 系统的协调程度高于悲观系统。

对这两种方法进行比较是一个很难解决的一阶问题,但更复杂的是,在乐观和悲观之间做出选择还会导致一系列二阶问题。
例如:争执事务的数量取决于并发事务的数量,而并发事务的数量在悲观系统中取决于锁等待时间,在乐观系统中取决于重试率。
在这两种系统中,过去的争用和未来的争用之间都会产生直接的反馈回路。

例 3:租赁锁
租约是分布式系统中广泛使用的一种基于时间的锁。

在大多数系统中,租约取代了许多协调步骤。一个组件获得一个租约,然后将租约作为许可来执行多项任务,而不必担心其他组件正在执行与之冲突的任务,或可能会出现分歧等。由于不用担心冲突,持有租约的组件可以避免协调,全速前进。

租约是悲观主义(我假定其他事情会与我的工作发生冲突,所以我要阻止它们)和乐观主义(我假定我可以在接下来的一段时间内不需要协调就能继续工作)的有趣结合。

但是如果悲观这种假设是错误的呢?
那么所有的心跳、更新和租约存储都是白费功夫。其他组件在等待租约时浪费的工作时间也是如此。

结论
我喜欢对系统行为进行推理的一种方式是编写 "此组件假设...... "这样的句子。(banq注:寻找上下文的假设前提条件是关键)

对于缓存在的 TTL 例子,我们可以写出这样的语句(banq注:以逻辑命题的形式=形式逻辑):

  1. 本组件假定客户可以看到陈旧的数据,只要陈旧度是有界限的,以及

  2. 该缓存假定其保存的项目已发生变化,因此应在每次 TTL 到期后进行检查,以及

  3. 该缓存假定客户端宁愿经历不可用或更高的延迟,也不愿看到比 TTL 约束更陈旧的项目。

这些声明是帮助我们构建系统行为思维的工具。第三条--可用性与陈旧性的权衡--尤其强大,因为它通常是人们在选择严格的 TTL 时的一个隐藏假设。

通过将每种假设分为悲观型(需要协调)或乐观型(避免协调),我们还可以对协调的最佳时机进行结构化思考,并确保我们在选择需要协调的时间和原因时保持一致。 https://www.jdon.com/69933.html

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

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

相关文章

openssl C++研发之pem格式处理详解

一、PEM_writeXXX和EM_write_bio_XXX 在OpenSSL的crypto/pem.h头文件中,PEM_write_XXXX和PEM_write_bio_XXXX系列函数用于将特定类型的数据写入文件或BIO(内存缓冲区)中,其中XXXX代表不同的数据类型。 这些函数的使用方式相似&a…

C++二分查找算法:132模式枚举3简洁版

本文涉及的基础知识点 二分查找算法合集 本题不同解法 包括题目及代码C二分查找算法:132 模式解法一枚举3C二分查找算法:132 模式解法二枚举2代码简洁C二分查找算法:132 模式解法三枚举1性能最佳C单调向量算法:132 模式解法三枚…

BetterDisplay Pro v2.0.11(显示器颜色校准软件)

BetterDisplay Pro是一款为Mac电脑设计的屏幕亮度调节软件,旨在提高显示器的色彩和亮度表现。它可以根据用户的需求和显示器的特性,自动调整显示器的亮度、色温、对比度等参数,以获得更加真实、舒适的视觉效果。 这款软件拥有智能调节功能&a…

数据结构:枚举

概念 枚举主要用途是:将一组常量组织起来,在这之前表示一组常量通常使用定义常量的方式: 比如下面的例子: public static final int RED 1; public static final int GREEN 2; public static final int BLACK 3; 利用常量…

【深入Scrapy实战】从登录到数据解析构建完整爬虫流程

文章目录 1. 写在前面2. 抓包分析3. Scrapy提交登陆请求4. 列表与详情页面数据解析5. 中间件Middleware配置 【作者主页】:吴秋霖 【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xf…

python django 小程序图书借阅源码

开发工具: PyCharm,mysql5.7,微信开发者工具 技术说明: python django html 小程序 功能介绍: 用户端: 登录注册(含授权登录) 首页显示搜索图书,轮播图&#xff0…

设计模式(二)-创建者模式(1)-单例模式

概述 为何需要单例模式(Singleton Pattern)? 在程序运行当中,我们只希望一个类只能创建一个对象,在多个地方可以公用这个唯一的对象。 特点: 必须保证类只能创建一个对象。 单例模式可分为:饿汉式和懒…

使用ssh在本地环境(Windows)连接虚拟机以及其中的docker容器

配置虚拟机防火墙 防火墙的一系列操作需要root权限,默认是没有root密码的,所以首先需要设置root密码: sudo passwd root按提示完成root密码设置 切换到root账户 su root启用22端口并重启防火墙 firewall-cmd --permanent --add-port22/tc…

【NI-RIO入门】CompactRIO介绍及环境安装

CompactRIO是什么? CompactRIO系统提供了高处理性能、传感器专用I/O和紧密集成的软件工具,使其成为工业物联网、监测和控制应用的理想之选。实时处理器提供可靠,可预测的行为,而FPGA在需要高速逻辑和精确定时的较小任务上表现出色…

Microsoft Visual Studio 2019下载及安装流程记录

第一周任务: 1.笔记本上安装vc2019的环境 2.再把OpenCV安装上 3.根据网上的教程,试着写几个opencv的程序 一、安装Visual Studio 2019社区版 首先先完成安装vc2019的环境, 因为: Microsoft Visual C是用于C编程的工具集合&am…

机器学习笔记 - Ocr识别中的CTC算法原理概述

一、文字识别 在文本检测步骤中,分割出了文本区域。现在需要识别这些片段中存在哪些文本。 机器学习笔记 - Ocr识别中的文本检测EAST网络概述-CSDN博客文章浏览阅读300次。在 EAST 网络的这个分支中,它合并了 VGG16 网络不同层的特征输出。现在,该层之后的特征大小将等于 p…

什么是一阶逻辑?

一阶逻辑(FOL)是指句子或陈述的谓词只能指单个主语Subject的逻辑。 一阶逻辑也称为谓词逻辑或一阶谓词逻辑,它不但能以更简便的方式表达对象信息,还能表达这些对象之间的关系。 一阶逻辑(像自然语言一样)…

matlab 坡度滤波算法地面分割

目录 一、算法原理1、实现流程2、参考文献二、代码实现三、结果展示四、测试数据一、算法原理 1、实现流程 1、格网示意图 2、计算格网行列数 公式中的特殊符号为向上取整,

el-tree结合el-switch实现状态切换

<template><div><el-col :span"24"><el-card class"tree-card"><div class"sketch_content selectFile"><span class"span_title">组织列表 </span><div style"display: flex; jus…

【科技素养】蓝桥杯STEMA 科技素养组模拟练习试卷D

1、有一袋巧克力棒被摔倒了地上&#xff0c;其中只剩三分之一是完整的&#xff0c;而其它的每一根都断成两段。在这袋内所有的巧克力棒&#xff08;包括完整与断裂的&#xff09;中&#xff0c;请问长度不小于原来整根巧克力棒一半的根数至少占所有的根数的几分之几&#xff08…

《崩坏:星穹铁道》1.5仙舟罗浮-绥园全宝箱攻略

大家好&#xff0c;我是闲游盒小盒子&#xff0c;本篇来说下崩铁1.5版本仙舟罗浮-绥园的全宝箱攻略&#xff0c;共有19个宝箱加1个扑满&#xff1b;做完间章可获取前14个普通宝箱加2个精英怪宝箱&#xff0c;以及1个扑满&#xff1b;完成《狐斋志异》全任务可获得另外3个宝箱。…

数据结构 栈Stack的理解与C语言实现

栈&#xff0c;通俗的理解是叠盘子&#xff0c;如我们吃完饭洗碗洗盘子时&#xff0c;设盘子大小形状一样的&#xff0c;那么可以顺利的叠成一竖&#xff0c;每次我们洗好一个就叠在最上面push top&#xff0c;需要取用时候为了方便也是取最上面pop top&#xff0c;当然我们可以…

壹基金宣传进瑞金河背街社区 安全家园项目防灾减灾深入人心

11月16日下午&#xff0c;瑞金赋能公益、蓝天救援队等联合象湖镇河背街社区开展家庭安全计划社区活动包挑战赛活动暨壹基金安全家园项目防灾减灾宣传社区行活动。活动得到了救助儿童会北京代表处、壹基金、艾特公益、益心益意公益的指导&#xff0c;得到了阿里巴巴公益平台广大…

读像火箭科学家一样思考笔记04_第一性原理(下)

1. 来自无形规则的阻力 1.1. 无形规则 1.1.1. 僵化成规则的不必要习惯和行为 1.1.2. 不像有形的书面规则 1.1.2.1. 书面规则出现在标准操作流程中&#xff0c;可以修改或删除 1.1.3. 成文的规则可能会抗拒变革&#xff0c;但无形规则却更加顽固 1.1.4. 我们为强加在自己身…

【Q2—30min】

1.socket服务端创建过程 socket是应用层与TCP/IP协议族通信的中间软件抽象层&#xff0c;它是一组接口。在设计模式中&#xff0c;Socket其实就是一个门面模式&#xff0c;它把复杂的TCP/IP协议族隐藏在Socket接口后面&#xff0c;对用户来说&#xff0c;一组简单的接口就是全部…