随笔分类 - 分布式系统
摘要:DuckDB 是近年来颇受关注的OLAP数据库,号称是OLAP领域的SQLite,以精巧简单,性能优异而著称。笔者前段时间在调研Doris的Pipeline的算子并行方案,而DuckDB基于论文《Morsel-Driven Parallelism: A NUMA-Aware Query Evalua
阅读全文
摘要:终于来到这本书最后的一章了 "《Designing Data Intensive Applications》" 大部头,这本书应该是我近两年读过最棒的技术书籍。作者 "Martin Kleppmann" 帮助我们梳理了数据系统的纷繁复杂的技术逻辑,在这本书的最后,他将带领我们瞭望数据系统的未来,虽然
阅读全文
摘要:上一篇聊了聊批处理的缺点,对于无界数据来说, 流处理 会是更好的选择,“流”指的是随着时间的推移逐步增加的数据。消息队列可以将这些流组织起来,快速的在应用程序中给予反馈。但是消息队列与传统的数据库之间又存在着“剪不断,理还乱”的“纠葛”,最后我们将探讨通过消息队列之中与时序有关的一些问题。 文件是批
阅读全文
摘要:上篇的内容,我们探讨了分布式计算中的 MapReduce与批处理 。所以本篇我们将继续探索分布式计算优化的相关细节,并且分析MapReduce与批处理的局限性,看看 流式计算 是否能给我们在分布式计算层面提供一个更好的解决方案。 1.MapReduce的局限 MapReduce作业是独立于其他作业,
阅读全文
摘要:之前的文章大量的内容在和大家探讨分布式存储,接下来的章节进入了分布式计算领域。坦白说,个人之前专业的重心侧重于存储,对许多计算的内容理解可能不是和确切,如果文章中的理解有所不妥,愿虚心赐教。本篇将和大家聊一聊分布式计算的一个子集: 批处理 。 批处理系统通常也叫脱机系统 ,需要大量的输入数据,运行一
阅读全文
摘要:一致性算法 是分布式系统中最重要的问题之一。表面上看,这似乎很简单,只是让几个节点在某些方面达成一致。在本篇之中,会带大家完整的梳理分布式系统之中的共识算法,来更加深刻的理解分布式系统的设计。 1.原子提交和两阶段提交(2PC) 原子提交防止了数据库处于半更新的状态,这对于需要满足多对象事务和维护次
阅读全文
摘要:上一篇聊了聊构建分布式系统所面临的困难,这篇将着重讨论构建容错分布式系统的算法与协议。构建容错系统的最佳方法是使用通用抽象,允许应用程序忽略分布式系统中的一些问题。本篇我们先聊一聊线性一致性,以及与线性一致性有关的技术,后续需要了解的分布式协调服务,如:ZooKeeper等,都是基于分布式系统的线性
阅读全文
摘要:使用分布式系统与在单机系统中处理问题有很大的区别,分布式系统带来了更大的处理能力和存储容量之后,也带来了很多新的 "烦恼" 。在这一篇之中,我们将看看分布式系统带给我们新的挑战。 1.故障 当我们在使用单机系统时,它通常以一种相当可预测的方式工作:要么它正常工作,要么不工作。 而当我们在使用分布式系
阅读全文
摘要:和数据库打交道的程序员绕不开的话题就是: 事务 ,作为一个简化访问数据库的应用程序的编程模型。通过使用事务,应用程序可以忽略某些潜在的错误场景和并发问题,由数据库负责处理它们。而并非每个应用程序都需要事务,有时削弱事务性担保或完全放弃事务,可以获得更高的性能或更高的可用性。怎么样更好的理解数据库中的
阅读全文
摘要:进入到第六章了,我们要开始聊聊分布式系统之中的核心问题: 数据分区 。分布式系统通常是通过大规模的数据节点来处理单机没有办法处理的海量数据集,因此,可以将一个大型数据集可以分布在多个磁盘上,查询负载可以分布在多个处理器上。在这一章中,我们首先讨论划分大型数据集的不同方法,并观察数据索引如何与分区交互
阅读全文
摘要:前文涉及到了很多与Leader相关的算法,大家有木有想过,王侯将相,宁有种乎,既然Leader这么麻烦,干脆还是采用P2P模型吧,来个大家平等的架构。本篇需要和大家探讨的就是多副本下实现民主政治的 Quorum机制 。至于它是怎么样解决我们在前文提及的各种问题的,接着这篇文章我们继续聊聊~~ 1.
阅读全文
摘要:接着上一篇的内容,我们继续来梳理分布式系统之中的副本机制与副本一致。上文我们聊到了在可用性与一致性之间的一个折中的一致性等级: 最终一致性 。我们顺着上篇的内容,由用户来分析一致性等级。 1. 客户端的困扰 上篇文章我们提到了数据系统常用的模型,当提交新数据时,必须将它发送给Leader节点,但是当
阅读全文
摘要:进入到第五章了,来到了分布式系统之中最核心与复杂的内容: 副本与一致性 。通常分布式系统会通过网络连接的多台机器上保存相同数据的副本,所以在本篇之中,我们来展开看看如何去管理和维护这些副本,以及这个过程之中会遇到的各种问题。 1.副本 在数据系统之中,我们通常会有这样几个原因来使用副本技术: 保持地
阅读全文
摘要:进入到第四章了,本篇主要聊的点是编码(也就是 序列化 )与代码升级的一些场景,来梳理存储之中涉及到的编解码的流程。目前主流的编解码便是来自Apache的 Avro ,来自Facebook的 Thrift 与Google的 Protocolbuf ,在本篇之中,我们也会一一梳理各种编码的优点与痛点。
阅读全文
摘要:由于第三章的内容比较多,这里我们拆分成两篇读书笔记来记录。上一章我们聊了聊如何数据库是如何实现存储和检索的,今天这篇我们继续来看看OLTP与OLAP存储引擎的区别与联系。 1.OLTP与OLAP 联机事务处理过程( O n L ine T ransaction P rocessing)也就是我们通常
阅读全文
摘要:在上一篇的笔记之中,我们讨论了数据模型和查询语言。在第三章之中我们来聊一聊不同的数据引擎内部是如何实现存储和检索的,以及不同设计之间的折中与妥协。 1.键值对数据库 键值对数据库是数据库形式之中最简单的一种模式,我们可以把它简化的实现为下面两个函数: 底层存储格式也十分简单:一个文本文件,其中每行包
阅读全文
摘要:坦白说也是机缘巧合,在硕士生阶段进入分布式系统领域学习。无论是大规模存储或计算,其核心也是运用分布式技术利用并行性来解决数据密集型应用的需求。最近开始在啃这本 "《Designing Data Intensive Applications》" 大部头,作者 "Martin Kleppmann" 在分
阅读全文
摘要:Ceph官方版本目前支持的纠删码很有限,实验室这块希望能够整合我们自主开发的纠删码BRS( " B inary R eed– S olomon encoding" ),所以需要编译Ceph环境。Ceph官方目前推荐的安装方式都是通过Ceph deploy的工具来安装配置,搭建起来十分简单。目前直接通
阅读全文