分布式
一缕阳光a
(1)、从2018年8月开始从事分布式数据库内核开发工作,包括自研分布式分析型数据库OLAP、自研分布式数据库HTAP,根据开源数据库实现本公司集群型的OLTP产品,以及现在正在做的根据opengaussDB开发的HTAP类型数据库。
(2)、乐于专研,对分布式数据库有强烈的兴趣。
个人邮箱: zgaoq@163.com。
展开
-
强一致性和弱一致性的区别
一致性包括强一致性和弱一致性:弱一致性:可以理解为CAP定律中的不一致现象。但是经过一定的时间会达到最终一致性强一致性: 包含线性一致性和顺序一致性。因此强一致性不一定是线性一致性,但线性一致性一定是强一致性...原创 2021-06-02 14:35:13 · 1661 阅读 · 0 评论 -
raft协议中统计一条log被多少节点复制
在raft协议中,client的请求都会转化为一条log,并且只能由leader才能处理来自client的请求,如果一个log请求到了follower上,最后也会重定向到leader上的。好的,废话说多了,开始主题:raft协议中统计一条log被多少节点复制,在raft协议中,leader会统计由多少个节点已经复制了该log,如果超过一半的节点(包括leader)复制了该log(是复制,并没有落盘),那么leader就会提交该log,也即是将该log落盘。此外,log的复制是单向的,只能从leade原创 2021-04-14 11:52:39 · 92 阅读 · 0 评论 -
MySQL NDB Cluster
1. MySQL Cluster 是一种技术,该技术允许在无共享的系统中部署“内存中”数据库的 Cluster 。通过无共享体系结构,系统能够使用廉价的硬件,而且对软硬件无特殊要求。此外,由于每个组件有自己的内存和磁盘,不存在单点故障。2. MySQL Cluster 由一组计算机构成,每台计算机上均运行着多种进程,包括MySQL服务器,NDB Cluster 的数据节点,管理服务器,以及(可能)专门的数据访问程序。3. MySQL集群是一个无共享的(share-nothing)、分布式节点架构的转载 2021-03-30 16:57:07 · 223 阅读 · 0 评论 -
分布式事务2PC、3PC模型
工作中使用最多的是本地事务,但是在对单一项目拆分为 SOA、微服务之后,就会牵扯出分布式事务场景文章以分布式事务为主线展开说明,并且针对 2PC、3PC 算法进行详细的讲解,最后通过一个 Demo 来更深入掌握分布式事务,文章目录结构如下 什么是事务 什么是分布式事务 DTP 模型和 XA 规范 什么是 DTP 模型 什么是 XA 规范 2PC 一致性算法 2PC-准备阶段 2PC-提交阶段转载 2021-03-26 18:36:49 · 330 阅读 · 0 评论 -
深入理解Presto
深入理解Presto阿里云日志服务已关注50 人赞同了该文章简介Presto是一个facebook开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节。presto的架构由关系型数据库的架构演化而来。presto之所以能在各个内存计算型数据库中脱颖而出,在于以下几点:清晰的架构,是一个能够独立运行的系统,不依赖于任何其他外部系统。例如调度,presto自身提供了对集群的监控,可以根据监控信息完成调度。 简单的数据结构,列式存储,逻辑行,大部分数据都可以轻易转载 2020-11-05 17:47:49 · 1129 阅读 · 1 评论 -
Presto入门介绍
最近在调研presto查询引擎的模块,先了解了下大体的框架和基本知识。这篇文章适合入门的童鞋看,因此转载了,用于以后查询使用。1,Presto基本认识1.1 定义Presto是一个分布式的查询引擎,本身并不存储数据,但是可以接入多种数据源,并且支持跨数据源的级联查询。Presto是一个OLAP的工具,擅长对海量数据进行复杂的分析;但是对于OLTP场景,并不是Presto所擅长,所以不要把Presto当做数据库来使用。和大家熟悉的Mysql相比:首先Mysql是一个数据库,具有存储和计...转载 2020-11-05 15:39:42 · 278 阅读 · 1 评论 -
《In Search of an Understandable Consensus Algorithm》翻译
AbstractRaft是一种用于管理replicated log的consensus algorithm。它能和Paxos产生同样的结果,有着和Paxos同样的性能,但是结构却不同于Paxos;它让Raft比Paxos更易于理解,并且也为用它构建实际的系统提供了更好的基础。为了增强可理解性,Raft将例如leader election, log replication以及safety等共识的关键元素进行了分离,并且提供了更强的一致性用于减少必须考虑的状态。从用户调查的结果来看,Raft比Paxos更易转载 2020-10-27 16:32:33 · 1092 阅读 · 0 评论 -
在leveldb中,为什么要有immutable memtable?
目的是:为了防止写入kv时被阻塞。设想,如果没有immutable memtable,当memtable满了之后后台线程需要将memtable 立即flush到新建的sst中,在flush的过程中,新的KV记录是无法写入的,只能等待,就会造成新写入的KV记录被阻塞。盗一个其他人的图如下:延伸:在leveldb中只有两个memtable:memtable和immutable memtable;但是在rocksdb中,memtable的数量是可以配置的,当memtable中的数据量超过设定值后,原创 2020-10-23 19:49:19 · 809 阅读 · 1 评论 -
leveldb中为什么L 0层中每个sst文件中key的范围都是有重叠的?
在leveldb中,level 0层中的sst文件是由immutable memtable通过后台线程flush得到的,但是由于immutable memtable中的key可能是由重复的,因此在leveldb中将sst文件中key的范围有重叠的所有sst文件都放在了level 0层中,而其他level层中sst文件中的key不会有重复的。下面的图使用了其他作者的图,如下:这样在查询的时候,将读放大的倍数都放在了level 0层中。...原创 2020-10-23 19:39:07 · 770 阅读 · 1 评论 -
聊透分布式系统一致性
一、强一致性一致性大家庭中,虽然细分种类很多,但是实际上只有两大类,其中之一就是强一致性,其具体包含了严格一致性(也叫原子一致性或者线性一致性)和顺序一致性。 严格(原子/线性)一致性 严格一致性代表着,当数据更新后,所有Client的读写都是在数据更新的基础上。如下图所示,我们假设每份数据有三个副本,分别落到三个节点上。当Client1尝试将X的值置为1时,严格一致性要求当Client1完成更新操作以后,所有Client都要在最新值的基础上进行读写,这里的Client10读取到的.转载 2020-10-12 20:50:35 · 419 阅读 · 0 评论 -
skiplist原理与实现
今天继续介绍分布式系统当中常用的数据结构,今天要介绍的数据结构非常了不起,和之前介绍的布隆过滤器一样,是一个功能强大原理简单的数据结构。并且它的缺点和短板更少,应用更加广泛,比如广泛使用的Redis就有用到它。SkipList简介SkipList是一个实现快速查找、增删数据的数据结构,可以做到O(logN)O(logN)复杂度的增删查。从时间复杂度上来看,似乎和平衡树差不多,但是和平衡树比较起来,它的编码复杂度更低,实现起来更加简单。学过数据结构的同学应该都有了解,平衡树经常需要旋转操作..转载 2020-06-13 18:53:33 · 495 阅读 · 0 评论 -
bloom filter
今天的文章和大家一起来学习大数据领域一个经常用到的算法——布隆过滤器。如果看过《数学之美》的同学对它应该并不陌生,它经常用在集合的判断上,在海量数据的场景当中用来快速地判断某个元素在不在一个庞大的集合当中。它的原理不难,但是设计非常巧妙,老实讲在看《数学之美》之前,我也没有听说过这个数据结构,所以这篇文章也是我自己学习的笔记。 原理在我之前的理解当中,如果想要判断某个元素在不在集合当中,经典的结构应该是平衡树和hash table。但是无论是哪一种方法,都逃不开一点,都需要存储原值...转载 2020-06-13 14:56:42 · 170 阅读 · 0 评论 -
LSM Tree
今天给大家分享的内容是LSM树,它的英文是Log-structed Merge-tree。看着有些发怵,但其实它的原理不难,和B树相比简直算是小儿科了。并且这也是一个非常经典的数据结构,并且在大数据系统当中有非常广泛的应用。有许多耳熟能详的经典系统,底层就是基于LSM树实现的。因此,今天就和大家一起来深入学习一下它的原理。背景知识首先,我们先从背景知识开始。我们之前介绍B+树的时候说过,B+树和B树最大的不同就是将所有的数据都放在了叶子节点。从而优化了我们批量插入以及批量查询的效率,而优化的核心转载 2020-06-13 14:29:44 · 352 阅读 · 0 评论 -
HDFS的读/写流程
1.HDFS读流程HDFS读流程1.1 、Client通过FileSystem.open(filePath)方法,与NN节点进行【rpc】协议通信,校验是否有权限是否存在,假如都ok,返回该文件的部分或全部的block的列表(包含各个block块的分布在DN地址的列表),也就是返回【FSDataInputStream】对象;1.2、Clinet调用FSDataInputStream.read方法。a.与第一个块的最近的DN进行read,读取完成后,会check,假如ok,会关闭与当前的DN的转载 2020-05-25 15:17:18 · 242 阅读 · 0 评论 -
RocksDB事务实现TransactionDB分析
基本概念1. LSN (log sequence number)RocksDB中的每一条记录(KeyValue)都有一个LogSequenceNumber(后面统称lsn),从最初的0开始,每次写入加1。该值为逻辑量,区别于InnoDB的lsn为redo log物理写入字节量。我有几张阿里云幸运券分享给你,用券购买或者升级阿里云相应产品会有特惠惊喜哦!把想要买的产品的幸运券都领走吧!快下手,马上就要抢光了。这个lsn在RocksDB内部的memtable中是单调递增的,在WriteAh.转载 2020-05-22 19:29:54 · 497 阅读 · 0 评论 -
Redis pub/sub机制在实际运用场景的理解(转载)
Redis 的pub/sub机制与23种设计模式中的观察者设计模式极为类似。但Redis对于这个机制的实现更为轻便和简结,没有观察者模式的那么复杂的逻辑考虑而仅仅需要通过两个Redis客户端配置channel即可实现,因此它也仅仅做了消息的"发布"和"订阅"的实现,而在实际处理这类场景时遇到的情况根本没有考虑到。数据可靠性无法保证一个redis-cli发布消息n个redis-cli接受消息。...转载 2020-04-13 14:21:21 · 203 阅读 · 0 评论 -
Redis的持久化机制
Redis 的数据全部在内存里,如果突然宕机,数据就会全部丢失,因此必须有一种机制来保证 Redis 的数据不会因为故障而丢失,这种机制就是 Redis 的持久化机制。Redis 的持久化机制有两种,第一种是RDB快照,第二种是 AOF 日志。快照是一次全量备份,AOF 日志是连续的增量备份。快照是内存数据的二进制序列化形式,在存储上非常紧凑,而 AOF 日志记录的是内存数据修改的指令记录文本...转载 2020-04-06 22:57:08 · 162 阅读 · 0 评论 -
什么是一致性Hash算法?
原文链接:https://blog.csdn.net/bntX2jSQfEHy7/article/details/7954936最近有小伙伴跑过来问什么是Hash一致性算法,说面试的时候被问到了,因为不了解,所以就没有回答上,问我有没有相应的学习资料推荐,当时上班,没时间回复,晚上回去了就忘了这件事,今天突然看到这个,加班为大家整理一下什么是Hash一致性算法,希望对大家有帮助!文末送书,长按...转载 2019-12-03 16:44:35 · 100 阅读 · 0 评论 -
如何解决数据倾斜问题?
转载:https://blog.csdn.net/Mr_HHH/article/details/89399518今天在工作中遇到了数据倾斜的问题,一条SQL执行了8小时才执行完,看计划是先join再做distinct,卡在了join上,数据量比较大,并且重复数据比较多,后续经过分析计划,查资料,在不影响结果的前提下,改为先进行distinct,然后再join,最后在2min12s就出了结果。...转载 2019-11-19 18:46:30 · 3044 阅读 · 0 评论 -
SkipList 以及高度的确定
转载:https://www.cnblogs.com/lnlvinso/p/8848883.html 结果:skiplist的高度是个随机值。SkipList理解 记下自己对跳表SkipList的理解。 SkipList采用空间换时间的思想,通过增加数据间的链接,达到加快查找速度的目的。 数据库LevelDB和RocksDB中用到了SkipLis...转载 2019-11-18 14:04:56 · 1300 阅读 · 0 评论 -
一种简单的LRU cache设计 C++
最近在工作中需要用到LRU cache用作缓存来提高性能,经过查阅各种资料,了解了其运行的机制,如下:LRU cache可以用于在内存中保持当前的热点数据,下面实现一个有大小限制的lru cache,相关如下: 1. 模板化; 2. 利用std::unordered_map实现o(1)查找,利用std::list实现o(1)删除 (双链表+hash表); 3. 用...原创 2019-01-25 11:46:28 · 566 阅读 · 1 评论 -
linux下修改max_user_processes和open_file的最大值
从事分布式服务器开发工作的都会遇到,linux下open_file的值默认是1024;max user processes的值默认是4096,在实际用于中,这两个值严重不足,常常需要调整这两个值。默认配置如下: 可以通过以下两种方式修改:1、临时修改sudo sh -c "ulimit -n 102431 && exec su $LOGNAME"ulimit ...原创 2019-02-14 15:36:42 · 10431 阅读 · 0 评论 -
理解zookeeper选举机制
转载:https://www.cnblogs.com/shuaiandjun/p/9383655.html一、zookeeper集群配置多个实例共同构成一个集群对外提供服务以达到水平扩展的目的,每个服务器上的数据是相同的,每一个服务器均可以对外提供读和写的服务,这点和redis是相同的,即对客户端来讲每个服务器都是平等的。这篇主要分析leader的选择机制,zookeeper提供了...转载 2019-03-20 16:34:33 · 382 阅读 · 0 评论 -
redis事务的简单介绍
所谓事务应具有以下特效:原子性(Atomicity), 一致性(Consistency),隔离性(Isolation),持久性(Durability),简称ACID,但redis所提供的事务比较简单,它通过MULTI、EXEC、DISCARD和WATCH等命令实现事务。而Redis只支持简单的事务,将执行命令放入队列缓存,当程序中有异常或命令出错,执行DISCARD清空缓存队列不执行队列中命令...原创 2019-04-28 16:35:43 · 145 阅读 · 0 评论 -
Redis源码分析之小型测试框架testhelp.h和redis-check-aof.c日志检测
使用的是redis 3.2版本test中的文件主要分为以下几个:1.memtest.c 内存检测2.redis_benchmark.c 用于redis性能测试的实现,后续会当做单独的一个章节进行分析3.redis_check_aof.c 用于更新日志检查的实现。4.redis_check_dump.c 用于本地数据库检查的实现。5.testhelp.h 一个C风格的小型测试框架。今...原创 2019-05-09 16:23:54 · 431 阅读 · 0 评论 -
Redis源码分析之内存检测memtest
redis的内存检测会和机器的CPU位数有关,32位或64位会影响后面的一些宏定义参数。首先给出memtest中的API:void memtest_progress_start(char *title, int pass) /* 内存检测加载开始,输出开始的一些图线显示 */void memtest_progress_end(void) /* progress bar加载完再次清屏操作 *...原创 2019-05-09 17:04:19 · 1338 阅读 · 0 评论 -
Redis源码分析之anet网络通信的封装
anet是redis对tcp/ip网络中socket api接口的一个全面的封装,针对server/client端。封装的api的接口如下,注释了主要的接口:// tcp连接int anetTcpConnect(char *err, char *addr, int port);// 非阻塞连接int anetTcpNonBlockConnect(char *err, char *add...原创 2019-05-12 18:13:49 · 493 阅读 · 0 评论 -
为什么分布式一定要有redis,redis的一些优缺点
1、为什么使用redis分析:博主觉得在项目中使用redis,主要是从两个角度去考虑:性能和并发。当然,redis还具备可以做分布式锁等其他功能,但是如果只是为了分布式锁这些其他功能,完全还有其他中间件(如zookpeer等)代替,并不是非要使用redis。因此,这个问题主要从性能和并发两个角度去答。回答:如下所示,分为两点(一)性能如下图所示,我们在碰到需要执行耗时特别久,且结果...转载 2019-05-22 19:10:23 · 258 阅读 · 0 评论 -
CAP定理以及证明
历史这个定理起源于柏克莱加州大学University of California, Berkeley的计算机科学家埃里克·布鲁尔在2000年的分布式计算原则研讨会(Symposium on Principles of Distributed Computing(PODC))上提出的一个猜想。 在2002年,麻省理工学院(MIT)的赛斯·吉尔伯特和南希·林奇发表了布鲁尔猜想的证明,使之成为一个定...转载 2019-09-18 15:09:27 · 2378 阅读 · 0 评论 -
不理解Zookeeper一致性原理,谈何异地多活改造
转载:http://developer.51cto.com/art/201805/574334.htmZookeeper 是最终一致性的,由于多副本,以及保证大多数成功的 Zab 协议,当一个客户端进程写入一个新值,另一个客户端进程不能保证马上就会读到,但能保证最终会读到这个值。Zookeeper 的 Zab 协议类似于 Paxos 协议,并且提供了强一致性。每当听到这两种说法,我都想...转载 2019-01-09 14:25:24 · 329 阅读 · 0 评论