C++雾中风景10:聊聊左值,纯右值与将亡值

C++11的版本在类型系统上下了很大的功夫,添加了诸如 auto,decltype,move 等新的关键词来简化代码的编写与降低阅读代码的难度。为了更好的理解这些新的语义,笔者确定通过几篇文章来简单窥探一下C++类型系统的冰山一角,如果加深了对C++类型系统的理解,想必大家也能够更好的应用由C++1 ... »

大数据小视角3:CarbonData,来自华为的中国力量

连续两篇文章都聊了不同的存储格式,这篇我们继续深入来看看在存储格式的演变之上有什么新的 "黑科技" 。华为公司在2016年开源了类parquet的列存格式: CarbonData ,并且贡献给了Apache社区。CarbonData仅仅用了不到一年的时间就成功毕业,成为了Apache社区的顶级项目, ... »

大数据小视角2:ORCFile与Parquet,开源圈背后的生意

上一篇文章聊了聊基于PAX的混合存储结构的RCFile,其实这里笔者还了解一些八卦,RCfile的主力团队都是来自中科院的童鞋在Facebook完成的,算是一个由华人主导的编码项目。但是RCfile仍然存在一些缺陷,后续被 HortonWorks 盯上之后上马了 ORCFile 格式,而老对头 Cl ... »

C++雾中风景9:emplace_back与可变长模板

C++11的版本在vector容器添加了 emplace_back方法 ,相对于原先的push_back方法能够在一定程度上提升vector容器的表现性能。所以我们从STL源码角度来切入,看看这两种方法有什么样的区别,新引进的方法又有什么可学习参考之处。 1.emplace_back的用法 empl ... »

大数据小视角1:从行存储到RCFile

前段时间一直在忙碌写毕设与项目的事情,很久没有写一些学习心得与工作记录了,开了一个新的坑,希望能继续坚持写作与记录分布式存储相关的知识。为什么叫小视角呢?因为属于随想型的内容,可能一个由小的视角来审视海量数据的存储与计算技术,把知识点分为两到三章来梳理。 管中窥豹,可见一斑,希望能利用这个过程提高自 ... »

C++雾中风景8:Lambda表达式

上一篇C++的博客是Long Long ago了,前文讲到在看 Lambda表达式 的内容。笔者首次接触Lambda表达式应该是学习Python语言的时候,当时也不太明白这种表达方式的精髓,后续接触了Scala与Java8的链式调用与Lambda结合的方式,深陷无法自拔。所以借上一篇闭包的内容。我们 ... »

Linux下双网卡Firewalld的配置流程

实验室拟态存储的项目需要通过LVS NAT模式通过LVS服务器来区隔内外网的服务,所以安全防护的重心则落在了LVS服务器之上。笔者最终选择 通过firewalld放行端口 的方式来实现需求,由于firewall与传统Linux使用的iptable工具有不小的区别,接下来通过博客来记录一下firewa ... »

LVS-NAT模式的配置详解

由于实验室拟态存储的项目需要通过NAT模式来映射NFS服务器已实现负载均衡的目的,通过调研了多种负载均衡机制,笔者最终选择了 LVS的NAT模式 来实现需求,接下来通过博客来记录一下LVS NAT模式的配置流程。 1.LVS服务的简介: LVS 是 Linux Virtual Server 的简写, ... »

流处理与消息队列------《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

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

C++雾中风景7:闭包

本来说好要聊一聊命名空间的,因为最近在看C++lambda表达式的内容,所以借这个机会我们来好好聊一聊C++的闭包。 1.什么是闭包? 闭包(closure) 是函数式编程的重要的语法结构。 闭包的概念其实很简单,一言以蔽之:闭包是带有上下文的函数。说白了,就是有状态的函数。也就是说一个 局部变量 ... »

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.副本 在数据系统之中,我们通常会有这样几个原因来使用副本技术: 保持地 ... »