摘要: 一致性算法 是分布式系统中最重要的问题之一。表面上看,这似乎很简单,只是让几个节点在某些方面达成一致。在本篇之中,会带大家完整的梳理分布式系统之中的共识算法,来更加深刻的理解分布式系统的设计。 1.原子提交和两阶段提交(2PC) 原子提交防止了数据库处于半更新的状态,这对于需要满足多对象事务和维护次 阅读全文
posted @ 2018-02-21 18:01 HappenLee 阅读(957) 评论(0) 推荐(0) 编辑
摘要: 上一篇聊了聊构建分布式系统所面临的困难,这篇将着重讨论构建容错分布式系统的算法与协议。构建容错系统的最佳方法是使用通用抽象,允许应用程序忽略分布式系统中的一些问题。本篇我们先聊一聊线性一致性,以及与线性一致性有关的技术,后续需要了解的分布式协调服务,如:ZooKeeper等,都是基于分布式系统的线性 阅读全文
posted @ 2018-02-19 12:19 HappenLee 阅读(2148) 评论(0) 推荐(0) 编辑
摘要: 使用分布式系统与在单机系统中处理问题有很大的区别,分布式系统带来了更大的处理能力和存储容量之后,也带来了很多新的 "烦恼" 。在这一篇之中,我们将看看分布式系统带给我们新的挑战。 1.故障 当我们在使用单机系统时,它通常以一种相当可预测的方式工作:要么它正常工作,要么不工作。 而当我们在使用分布式系 阅读全文
posted @ 2018-02-15 10:16 HappenLee 阅读(794) 评论(0) 推荐(0) 编辑
摘要: 和数据库打交道的程序员绕不开的话题就是: 事务 ,作为一个简化访问数据库的应用程序的编程模型。通过使用事务,应用程序可以忽略某些潜在的错误场景和并发问题,由数据库负责处理它们。而并非每个应用程序都需要事务,有时削弱事务性担保或完全放弃事务,可以获得更高的性能或更高的可用性。怎么样更好的理解数据库中的 阅读全文
posted @ 2018-02-13 18:00 HappenLee 阅读(851) 评论(0) 推荐(3) 编辑
摘要: 进入到第六章了,我们要开始聊聊分布式系统之中的核心问题: 数据分区 。分布式系统通常是通过大规模的数据节点来处理单机没有办法处理的海量数据集,因此,可以将一个大型数据集可以分布在多个磁盘上,查询负载可以分布在多个处理器上。在这一章中,我们首先讨论划分大型数据集的不同方法,并观察数据索引如何与分区交互 阅读全文
posted @ 2018-02-10 18:04 HappenLee 阅读(728) 评论(0) 推荐(2) 编辑
摘要: 本来说好要聊一聊命名空间的,因为最近在看C++lambda表达式的内容,所以借这个机会我们来好好聊一聊C++的闭包。 1.什么是闭包? 闭包(closure) 是函数式编程的重要的语法结构。 闭包的概念其实很简单,一言以蔽之:闭包是带有上下文的函数。说白了,就是有状态的函数。也就是说一个 局部变量 阅读全文
posted @ 2018-02-07 16:23 HappenLee 阅读(718) 评论(0) 推荐(1) 编辑
摘要: 前文涉及到了很多与Leader相关的算法,大家有木有想过,王侯将相,宁有种乎,既然Leader这么麻烦,干脆还是采用P2P模型吧,来个大家平等的架构。本篇需要和大家探讨的就是多副本下实现民主政治的 Quorum机制 。至于它是怎么样解决我们在前文提及的各种问题的,接着这篇文章我们继续聊聊~~ 1. 阅读全文
posted @ 2018-01-28 11:26 HappenLee 阅读(818) 评论(0) 推荐(2) 编辑
摘要: 接着上一篇的内容,我们继续来梳理分布式系统之中的副本机制与副本一致。上文我们聊到了在可用性与一致性之间的一个折中的一致性等级: 最终一致性 。我们顺着上篇的内容,由用户来分析一致性等级。 1. 客户端的困扰 上篇文章我们提到了数据系统常用的模型,当提交新数据时,必须将它发送给Leader节点,但是当 阅读全文
posted @ 2018-01-23 10:48 HappenLee 阅读(757) 评论(0) 推荐(1) 编辑
摘要: 进入到第五章了,来到了分布式系统之中最核心与复杂的内容: 副本与一致性 。通常分布式系统会通过网络连接的多台机器上保存相同数据的副本,所以在本篇之中,我们来展开看看如何去管理和维护这些副本,以及这个过程之中会遇到的各种问题。 1.副本 在数据系统之中,我们通常会有这样几个原因来使用副本技术: 保持地 阅读全文
posted @ 2018-01-19 11:30 HappenLee 阅读(1362) 评论(0) 推荐(0) 编辑
摘要: 在进行C++类编写的过程之中,通常会涉及到类的拷贝构造函数与类的赋值函数。初涉类编写的代码,对于两类函数的用法一直是挺让人困惑的内容。这篇文章我们会详细来梳理拷贝构造函数与赋值函数的区别。 1.调用了哪个函数? 上述两种函数的使用和C++之中类的定义紧密相关,所以我们先定义一个类: java cla 阅读全文
posted @ 2018-01-17 13:22 HappenLee 阅读(399) 评论(0) 推荐(0) 编辑