MapReduce

这是我看的第一篇论文,我真的是硬着头皮去看,出乎意料,虽然磕磕绊绊,但是竟然一气呵成,我读完我发现为什么其思想竟然如此的简单。 Mapreduce,有人翻译成map 映射,reduce 归总,map的目的是分而治之,reduce是合。 1. mapreduce的提出背景 在google需要对海量的原 ... »

聊一聊顺序消息(RocketMQ顺序消息的实现机制)

当我们说顺序时,我们在说什么? 日常思维中,顺序大部分情况会和时间关联起来,即时间的先后表示事件的顺序关系。 比如事件A发生在下午3点一刻,而事件B发生在下午4点,那么我们认为事件A发生在事件B之前,他们的顺序关系为先A后B。 上面的例子之所以成立是因为他们有相同的参考系,即他们的时间是对应的同一个 ... »

解读Raft(四 成员变更)

将成员变更纳入到算法中是Raft易于应用到实践中的关键,相对于Paxos,它给出了明确的变更过程(实践的基础,任何现实的系统中都会遇到因为硬件故障等原因引起的节点变更的操作)。 显然,我们可以通过shutdown集群,然后变更配置后重启集群的方式达到成员变更的目的。但是这种操作会损失系统的可用性,同 ... »

解读Raft(三 安全性)

前言 之前的两篇文章更多的是在描述Raft算法的正常流程,没有过多的去讨论异常场景。 而实际在分布式系统中,我们更多的都是在应对网络不可用、机器故障等异常场景,所以本篇来讨论一下Raft协议的安全性,即在异常场景下是否会导致数据丢失、数据不一致等情况。 选举限制 在Raft协议中,所有的日志条目都只 ... »

解读Raft(二 选举和日志复制)

Leader election Raft采用心跳机制来触发Leader选举。Leader周期性的发送心跳(如果有正常的RPC的请求情况下可以不发心跳)包保持自己Leader的角色(避免集群中其他节点认为没有Leader而开始选举)。 Follower在收到Leader或者Candidate的RPC请 ... »

解读Raft(一 算法基础)

最近工作中讨论到了Raft协议相关的一些问题,正好之前读过多次Raft协议的那paper,所以趁着讨论做一次总结整理。 我会将Raft协议拆成四个部分去总结:算法基础、选举和日志复制、安全性、节点变更。 这是第一篇:《解读Raft(一 算法基础)》 ... »

模拟Paxos算法及其简单学习总结

一、导读 Paxos算法的流程本身不算很难,但是其推导过程和证明比较难懂。在Paxos Made Simple[1]中虽然也用了尽量简化的流程来解释该算法,但其实还是比较抽象,而且有一些细节问题没有交代,读完也只能了解到算法的一个大致轮廓。在《从Paxos到Zookeeper 分布式一致性原理与实践 ... »

流处理与消息队列------《Designing Data-Intensive Applications》读书笔记16

上一篇聊了聊批处理的缺点,对于无界数据来说, 流处理 会是更好的选择,“流”指的是随着时间的推移逐步增加的数据。消息队列可以将这些流组织起来,快速的在应用程序中给予反馈。但是消息队列与传统的数据库之间又存在着“剪不断,理还乱”的“纠葛”,最后我们将探讨通过消息队列之中与时序有关的一些问题。 文件是批 ... »

流式计算与计算抽象化------《Designing Data-Intensive Applications》读书笔记15

上篇的内容,我们探讨了分布式计算中的 MapReduce与批处理 。所以本篇我们将继续探索分布式计算优化的相关细节,并且分析MapReduce与批处理的局限性,看看 流式计算 是否能给我们在分布式计算层面提供一个更好的解决方案。 1.MapReduce的局限 MapReduce作业是独立于其他作业, ... »

线性一致性与全序广播------《Designing Data-Intensive Applications》读书笔记12

上一篇聊了聊构建分布式系统所面临的困难,这篇将着重讨论构建容错分布式系统的算法与协议。构建容错系统的最佳方法是使用通用抽象,允许应用程序忽略分布式系统中的一些问题。本篇我们先聊一聊线性一致性,以及与线性一致性有关的技术,后续需要了解的分布式协调服务,如:ZooKeeper等,都是基于分布式系统的线性 ... »

分布式系统的烦恼------《Designing Data-Intensive Applications》读书笔记11

使用分布式系统与在单机系统中处理问题有很大的区别,分布式系统带来了更大的处理能力和存储容量之后,也带来了很多新的 "烦恼" 。在这一篇之中,我们将看看分布式系统带给我们新的挑战。 1.故障 当我们在使用单机系统时,它通常以一种相当可预测的方式工作:要么它正常工作,要么不工作。 而当我们在使用分布式系 ... »

事务与隔离级别------《Designing Data-Intensive Applications》读书笔记10

和数据库打交道的程序员绕不开的话题就是: 事务 ,作为一个简化访问数据库的应用程序的编程模型。通过使用事务,应用程序可以忽略某些潜在的错误场景和并发问题,由数据库负责处理它们。而并非每个应用程序都需要事务,有时削弱事务性担保或完全放弃事务,可以获得更高的性能或更高的可用性。怎么样更好的理解数据库中的 ... »

数据分区------《Designing Data-Intensive Applications》读书笔记9

进入到第六章了,我们要开始聊聊分布式系统之中的核心问题: 数据分区 。分布式系统通常是通过大规模的数据节点来处理单机没有办法处理的海量数据集,因此,可以将一个大型数据集可以分布在多个磁盘上,查询负载可以分布在多个处理器上。在这一章中,我们首先讨论划分大型数据集的不同方法,并观察数据索引如何与分区交互 ... »

P2P结构与Quorum机制------《Designing Data-Intensive Applications》读书笔记8

前文涉及到了很多与Leader相关的算法,大家有木有想过,王侯将相,宁有种乎,既然Leader这么麻烦,干脆还是采用P2P模型吧,来个大家平等的架构。本篇需要和大家探讨的就是多副本下实现民主政治的 Quorum机制 。至于它是怎么样解决我们在前文提及的各种问题的,接着这篇文章我们继续聊聊~~ 1. ... »

客户端一致性与多Leader机制------《Designing Data-Intensive Applications》读书笔记7

接着上一篇的内容,我们继续来梳理分布式系统之中的副本机制与副本一致。上文我们聊到了在可用性与一致性之间的一个折中的一致性等级: 最终一致性 。我们顺着上篇的内容,由用户来分析一致性等级。 1. 客户端的困扰 上篇文章我们提到了数据系统常用的模型,当提交新数据时,必须将它发送给Leader节点,但是当 ... »

副本机制与副本同步------《Designing Data-Intensive Applications》读书笔记6

进入到第五章了,来到了分布式系统之中最核心与复杂的内容: 副本与一致性 。通常分布式系统会通过网络连接的多台机器上保存相同数据的副本,所以在本篇之中,我们来展开看看如何去管理和维护这些副本,以及这个过程之中会遇到的各种问题。 1.副本 在数据系统之中,我们通常会有这样几个原因来使用副本技术: 保持地 ... »

分布式系统中的必备良药 —— RPC

阅读目录 前言 成熟的解决方案 剖析 性能测试 结语 一、前言 在上一篇分布式系统系列中《分布式系统中的必备良药 —— 服务治理》中阐述了服务治理的一些概念,那么与服务治理配套的必然会涉及到RPC框架。在当前互联网的大背景下,RPC的运用应该大家或多或少都有涉及,国内外的RPC框架也是百花齐放。那么 ... »