Follow feeds: blogs, news, RSS and more. An effortless way to read and digest content of your choice.
Get Feedercodedump.info
Get the latest updates from codedump directly as they happen.
Follow now 57 followers
Last updated about 22 hours ago
1 day ago
在分布式系统中,多个节点协同工作。客户端请求会发送不同的节点上处理,这些请求就成为了一个一个的节点上的事件。我们将看到,系统的状态由这些一个一个的事件按照特定的顺序执行之后形成。因此,事件的顺序尤为重要。不同的节点中,看到的事件先后顺序可能会有差别,这也造成了这些节点可能形成不同的状态。 由此可见,处理多个事件时,事件的先后顺序将影响节点的状态,因此如何测量事件的顺序就成了分布式系统中的一个核心问题。一个自然的想法是,按照事件发生的物理时间排序即可。我们将在后续章节了解物理时钟原理,从而遗憾地发现:在一个分布式系统中,通过对比多个节点之间的物理时间来判断事件发生的先后顺序并不精确,甚至有时候会发生错误,而一旦事件的顺序错乱,整个分布式集群的状态也就错乱了。 如果物理时间不可行,那么还有什么办法决定一个分布式系统中事件的先后顺序?答案是逻辑时钟。 令人惊讶的是,前面我们一再谈及事件的先后顺序尤为重要,但是在分布式系统中,还可能出现两个事件无法判断其发生先后顺序的情况,这样的事件称为*“并发事件”*。为了解释事件的顺序,我们还需要了解两个数学中的定义:偏序和全序。事实上,这两个数学定义应该深植在每个分布式系统工程师的心里,在后面我们还会一再见到这两个定义在分布式系统中的应用。 我们将在本章中讨论以下的主题: 事件发生的先后顺序是如何影响系统的状态的; 物理时间为何不能在分布式系统中用来衡量事件的先后顺序; 逻辑时钟的理论基础和计算规则; 偏序和全序的直观解释和定义; 基于逻辑时钟延伸出来的向量时钟。 状态、事件和快照 #...
7 days ago
在第一章中,我们对比过单机系统和分布式系统的区别,单机系统通过共享内存进行通信、有全局唯一的时钟,在出错时有确定的表现,在单机系统上编程是相对容易的。相较而言,分布式系统由多个节点组成,节点之间通过消息进行通信,这导致了分布式系统更加复杂。因此在开始设计分布式系统之前,需要一套描述系统运行模型的理论框架,开发者需要在设计时就明确系统的运行环境所满足的各种条件,不同的条件系统的实现难度不同。分布式系统模型就是用于描述和分析分布式系统行为、属性和设计的理论框架。它们为研究分布式系统的通信、计算、故障、同步等特性提供了一种抽象方式,帮助设计者和研究者在复杂环境中理解系统行为并解决实际问题。 在本章中,我们从两个著名的分布式实验两将军问题和拜占庭将军问题开始,展开对分布式系统模型的讨论。 两将军问题 # 两将军问题(Two Generals’ Problem)1是分布式领域里的一个思想实验,旨在说明:试图通过不可靠的连接来进行通信,协调分布式系统中的多节点之间的操作,会遇到的陷阱和挑战。 实验中假设有两支军队,分别由一位将领负责给军队发号施令,两支军队准备进攻一座城市。这座城市的防守很坚固,需要两支军队一起行动才能胜利,而任何一方单独行动都将失败。两位将领需要协调一个共同发起攻击的时间。两支军队驻扎在城市的两处,中间有一个山谷将两支军队分开,他们之间通信的唯一方式就是派遣信使穿越山谷。然而,山谷被城市的守军控制,途经该山谷传递的消息有可能被俘。 虽然两位将军已经就进攻城市达成了共识,但是并没有就进攻时间达成共识。两位将军必须同时让自己的军队一起发起进攻才能取胜。因此,他们之间必须沟通协调一个发起进攻的时间。如果一位将军以为协调了一个进攻时间,而另一位将军却并不知情,导致只有一个军队发起进攻,那么这将是一个灾难性的失败,如下表所示: 军队A1 军队A2 结果...
9 days ago
分布式系统概述 # 在现代软件工程的演进历程中,从单机应用迈向分布式架构是一个关键的分水岭。这一跨越并非简单的硬件堆叠或代码迁移,而是一场涉及思维模式、设计哲学乃至对物理规律重新认知的深刻变革。 作为全书的开篇,本章将带领读者走出单机系统的舒适区,直面分布式环境下的真实挑战。我们将首先厘清分布式系统的核心定义,剖析其相较于集中式系统的本质差异与优势;随后,我们将重点探讨这一领域中不可回避的技术难题——从不可靠的网络通信到破碎的全局时钟,再到部分失效带来的不确定性。最后,本章将阐述架构师在转型过程中所需完成的心智转变,从追求绝对的确定性转向在一致性与可用性之间寻求平衡的权衡艺术。理解这些基础概念与思维范式,是掌握后续章节中复杂算法与一致性模型的前提,也是构建高可靠、高扩展系统的基石。 什么是分布式系统 # 在展开介绍分布式系统之前,我们先来看分布式系统的对立面:集中式的单机系统(Monolithic)。在单机系统中,所有计算、存储和处理任务都集中在一台计算机或一个中心节点上。单机系统的主要特点有: 单一节点:所有功能(如计算、数据存储、用户请求处理)都在一台机器或单一服务器上完成。 共享资源:使用共享内存和本地资源,通信速度快,无需网络消息传递。 单点控制:所有决策和数据管理由中心节点控制,无需节点间协调。 单一时钟:机器上的所有运行进程,使用同一个时钟的时间。 集中式单机系统的优点是:系统简单,请求、计算、存储、处理都在同一台节点上完成,不存在网络延迟、系统时间不一致等分布式系统才会出现的问题,但是缺点也很明显:单一机器节点的故障会导致整个系统的不可用,缺乏容错性;同时性能受限于单台机器的处理能力,只能通过升级硬件(垂直扩展(scale...
9 months ago
周刊目录 # 2022年 # 周刊(第14期):重读Raft论文中的集群成员变更算法(二):实践篇 周刊(第13期):重读Raft论文中的集群成员变更算法(一):理论篇 周刊(第12期):Page oriented类存储引擎里可能同时存在多种结构 周刊(第11期):mmap适用于存储引擎吗? 周刊(第10期):“忘记目标,专注于体系” 周刊(第9期):Mozilla rr使用简介...
about 1 year ago
过去的几年里,由于长期在家远程办公,多了很多自己做菜的机会,厨艺也精进了不少。目前一些普通的家常菜,即便我之前没有做过,但是可以根据网上的视频教程就能还原大体的风味出来。究其原因,我想是写代码中模块化的思想,用在了做菜上。 不妨把做菜大体分为三个阶段: 准备阶段:包括一些预处理,如改刀、腌制、去腥等等; 烹饪阶段:使用日常说的煎炒烹炸等手段对材料进行烹制,包括煮、红烧、煎、炒、清蒸等等; 收尾阶段:烹饪阶段完毕之后,还要对菜进行一些收尾工作,例如收汁、清蒸鱼时的泼油等等。 做菜三阶段 按照写代码模块化的思想,当把这些阶段划分成具体的模块之后,模块之间进行排列组合之后,就可以做成不同的菜,举例来说,红烧鱼和清蒸鱼是两种不同的料理鱼的方式,但是却有着相同的预处理阶段: 准备阶段:鱼去腥、鱼背花刀方便入味 烹饪阶段: 清蒸鱼:清蒸 红烧鱼:调入酱料红烧 收尾阶段:...
almost 3 years ago
周刊目录 2022年 周刊(第14期):重读Raft论文中的集群成员变更算法(二):实践篇 周刊(第13期):重读Raft论文中的集群成员变更算法(一):理
over 3 years ago
引言:本文梳理sqlite并发读写方案的演进之路。 sqlite并发读写的演进之路 # 概论 # sqlite底层的存储基于B-tree,B-Tree对底层存储的基本读写单位是页面,而每个页面都由全局唯一的页面编号与之对应,一般来说页面编号从1开始递增。 类B-Tree的存储引擎修改数据的流程如下图所示: b-tree 从上图中,需要区分B-Tree类的存储引擎几个核心的模块: B-Tree算法模块:从页面管理器中读取页面到内存,进行逻辑的修改,修改完毕之后标记该页面为脏页面,这样页面管理器就知道哪些页面被修改,后续需要进行落盘。 页面管理器:负责向B-Tree算法模块提供根据页面编号读、写页面的接口。 数据库文件:这其实不是一个模块,泛指在磁盘上的数据库相关文件,任何的修改最终都要落到数据库文件。在sqlite中,数据库文件是单一文件,在其他存储引擎里可能是一组相关的文件。...
over 3 years ago
引言:本文梳理sqlite并发读写方案的演进之路。 sqlite并发读写的演进之路 概论 sqlite底层的存储基于B-tree,B-Tree对底层存储的基
over 3 years ago
引言:《Efficient Locking for Concurrent Operations on B-Trees 》论文中提出了一种称为“Blink-Tree”的数据结构,这个数据结构提供了B+Tree并发访问的一些优化方式,本文对这篇论文进行解读。 概论 # 由于Blink-Tree本质上是B+Tree的一种优化,所以要理解它首先要对B+Tree有一些了解,在这以前介绍过B+Tree,就不在这里阐述了,可以参考: B树、B+树索引算法原理(上)...
over 3 years ago
引言:《Efficient Locking for Concurrent Operations on B-Trees 》论文中提出了一种称为“Blink-Tree”的数据结构,这个数据结构提供了B+Tree并发访问的一些优化方式,
over 3 years ago
引言:《Concurrency of Operations on B-Trees》论文中提供了一些并发访问B-Tree的优化算法,本文对这篇论文进行分析。 Concurrency of Operations on B-Trees # 本文将假设读者对B-Tree有一定的了解,如果还不了解可以先看看之前的文章:...