- 博客(61)
- 资源 (3)
- 收藏
- 关注
原创 理解zookeeper的一致性及缺点
理解zookeeper的一致性及缺点综述zookeeper保证理解zookeeper的顺序一致性zookeeper的缺点参考链接综述zookeeper不是为高可用性设计的,但它使用ZAB协议达到了极高的一致性。所以它经常被选作注册中心、配置中心、分布式锁等场景。zookeeper是最终一致性系统,而很多实际应用需要保证强一致。zookeeper保证根据zookeeper官方文档,zookeeper提供了如下保证:Sequential Consistency - Updates from a cl
2021-04-22 11:22:39 775
原创 深度比较Paxos和Raft
一致性协议paxos和raft的异同前言leader选举日志同步Commit Index推进崩溃恢复成员变更前言我一直在讲学习paxos和raft最好的方式就是看作者的论文和视频,只有看原滋原味的文章,才能真正体会到作者的设计思路,才能在现代繁杂的工程实践中抓住精髓。这篇文章作为系列文章的最后一篇,我想谈谈paxos与raft的异同。算法在变,但是其中的核心思想是不变的。一致性协议raft详解(一):raft整体介绍一致性协议raft详解(二):安全性一致性协议raft详解(三):raft中的
2021-04-08 16:43:28 2261 1
原创 io_uring设计理念及使用方式总结
io_uring设计理念及使用方式总结overview设计目标io_uring系统调用io_uring_setup特性io_uring_enterio_uring_registerliburingop codefeatureIO interfaces 比较spdk+io_uring参考链接overviewio_uring通过使用先进的IO特性,以及内核支持下的各种免拷贝、免context switch特性,成为kernel下一代高性能异步IO接口,不同于libaio,io_uring支持同步和异步IO
2021-07-01 16:57:27 1885 2
原创 C++右值引用和完美转发
C++右值引用和完美转发何为引用引用必须是左值右值引用完美转发move()使用move的优点move 左值测试move 右值测试注意参考链接看到有些同学,调用函数的时候总喜欢使用std::move希望避免一些开销,而实际上由于他并不理解什么是右值引用、完美转发,导致这种努力成为了徒劳,反增笑柄。本文为记录我学习右值引用和完美转发的笔记。何为引用C++新增了一种复合类型,也就是引用变量。通过引用,就可以使用该引用名称或变量名称来指向变量。引用必须是左值对于对象的引用必须是左值(常量引用除外)
2021-05-25 18:19:55 561
原创 C++使用StringPiece减少string类的拷贝
C++使用StringPiece减少string类的拷贝构造函数操作字符串比较Traits参考链接使用c++ string类不可避免会带来很多不必要的拷贝,拷贝多了必然影响性能。因此在很多高性能C++框架的实现中,都会使用StringPiece类作为string类的wrapper,该类只持有目标字符串的指针,而避免额外的拷贝,比较常见的实现有:muduo实际上是使用了pcre的StringPiece的实现ChromiumChromium也说明了引入StringPiece的意义,主要是为了免拷贝
2021-05-25 15:59:12 2189
原创 BoltDB 源码分析
BoltDB 源码分析nodeCopyOnWrite解决读写冲突Elementbucketcursor内存分配inline bucketCursorrebalancemetabacth操作事务原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(Durability)参考链接BoltDB直接使用mmap, 直接将所有的页, 也就是整个数据大文件, 全部映射到内存内,从而免去了自己实现pagecache等等,简化了实现,并且数据持久化没有编解码,因此也避免了序列化
2021-05-24 18:28:00 647 2
原创 Persistent Memory优化实践
Persistent Memory优化实践Persistent Memory的优缺点相关论文A Study of Application Performance with Non-Volatile Main MemoryWrite-Optimized and High-Performance Hashing Index Scheme for Persistent Memoryclosing the gap between DRAM with PM for key-value storeChallenges
2021-05-24 18:23:26 1369
原创 分布式数据库产品总结
PivotalGreenplum Database(GPDB)**Greenplum Database(GPDB)**是一款基于开源 PostgreSQL 扩展的 MPP(massively parallel processing),可支持大规模水平扩展的分布式数据库。 GPDB 采用的是 master-worker 模式,每个 worker process 运行在不同的机器上,拥有各自的存储和运算资源。**客户端通过 master 把查询语句分发到各个机器上,以达到并行计算来处理海量数据。**集群节点
2021-05-21 14:54:09 1487 1
原创 mysql知识总结
概述MySQL 可以分为 Server 层和存储引擎层两部分。Server 层包括连接器(和客户端交互、权限管理)、查询缓存(已经查询的请求会缓存在内存中,但是mysql经常会遇到缓存失效频繁的问题,例如table scan)、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。而存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持 InnoDB、MyISAM、
2021-05-21 14:50:49 427
原创 Persistent Memory编程简介
Persistent Memory编程简介编程libpmem持久化函数libpmemobj跟对象 root object例程事务支持type safety线程安全使用工具ipmctlndctlcreate-namespace例子测试工具fiopmembenchipmwatchemon参考链接本文主要目的是介绍PM基础的的编程方法、管理工具、监测手段等编程持久内存开发套件(Persistent Memory Development Kit-PMDK) - pmem.io: PMDKPMDK bas
2021-05-21 12:46:24 1878
原创 Persistent Memory错误注入测试
目的了解持久化内存各种故障场景下的系统和应用行为错误注入方法https://docs.pmem.io/ipmctl-user-guide/debug/inject-error测试温度测试# 模拟高温$ ipmctl set -dimm Temperature=100# 恢复$ ipmctl set -dimm Clear=1 Temperature=1坏块测试# 模拟指定dimm地址0x10000200为坏块$ ipmctl set -dimm [dimm_id] Poison=0
2021-05-19 09:54:52 367
原创 分布式事务简述
分布式事务的原子性保证实现事务原子性的协议面向应用层的 TCC2PC 数据库领域最常用的事务方案两者比较改进Percolator (NewSQL)PGXC如果分开来看的话,事务可以理解为包含一系列操作的序列,原子则代表不可分割的最小粒度。而合起来看的话,事务的原子性就是让包含若干操作的事务表现得像一个最小粒度的操作。这个操作一旦被执行,只有“成功”或者“失败”这两种结果。这就好像比特(bit),只能代表 0 或者 1,没有其他选择。关于事务的原子性,图灵奖得主、事务处理大师詹姆斯·格雷(Jim Gr
2021-05-11 18:10:24 491
原创 深入理解Memory Order
深入理解Memory Ordercpu 保证cache编程技术lock-freewait-freeRead–modify–writeCompare-And-Swap(CAS)cas原理cas开销test-and-setconsensus memberwait-freeABA problemmemory order背景知识延伸:`__asm volatile("" ::: "memory")`的含义memory modelC++ atomicmemory_ordermemory_order_relaxedme
2021-04-28 10:14:19 2009 2
原创 分布式文件系统HDFS解析
分布式文件系统HDFS解析设计目标Namenode 和 DatanodeHDFS HAHDFS Federation读写流程Replication元数据副本均衡元数据磁盘错误快照流水线复制参考链接HDFS作为分布式文件系统,主要是为了方便海量上层计算节点存取而设计的。提供posix api,将元数据(存放在NameNode)和数据(存放在DataNodes)分开存放。所有Node之间通过tcp通信。设计目标存储非常大的文件:这里非常大指的是几百M、G、或者TB级别。实际应用中已有很多集群存储的数据
2021-04-27 09:43:24 470
原创 LevelDB源码解读
LevelDB源码解读提供的功能read and writeGroup commitsequence numberdeleteAtomic Updates同步写Synchronous Writes遍历 iteration快照 SnapshotsSlice比较器 Comparatorsconcurrency保证compactionLevelDB的性能优化参数Block sizeCompressionCache键分布 Key LayoutFilters校验和 ChecksumApproximate SizesE
2021-04-27 09:31:48 1356
原创 深入理解LSM-Tree
深入理解LSM-Tree基础概念compaction策略Size-tired compaction strategy(STCS)/Tieredleveled compactionLeveled-NHybridTime-Window比较工业实现leveldbRocksDBWrite StallsscyllaDB/cassandrahbaseTiKV/Titan学术研究Dostoevsky参考链接lsm-tree的背景、定义和适用场景本文不再详述。本文意在论述LSM的存储引擎、工业取舍以及发展现状。基础概
2021-04-27 09:29:26 1875
原创 分布式块存储QoS限速算法介绍与实践以及对上层应用的影响
分布式块存储QoS限速算法以及对上层应用的影响QoS限速算法介绍令牌桶 Token Bucket漏桶 Leaky BucketLeaky bucket as a meterLeaky bucket as a queue主流的块设备流控方案Qemulibrbdspdk限速策略对块设备的影响时延IO util对数据库应用的影响参考链接QoS限速算法介绍限速策略主要有令牌桶的漏桶两种,下面分别介绍如下。令牌桶 Token BucketWiki对令牌桶的算法描述如下:A token is added
2021-04-23 13:02:04 1540
原创 spdk-nvmf指南
spdk-nvmf指南概述名词解释nvme over fabricspdk nvmfnvmf initiator 和 targetspdk nvmf targetlinux kernel NVMeOF initiator实践注意事项参考链接概述NVMe协议制定了本机高速访问PCIe SSD的规范,为了把本地高速访问的优势暴露给远端应用, 诞生了NVMe-oF 协议。NVMe-oF target 是NVMe协议在不同传输网络 (transport) 上面的延伸。NVMe-oF 协议中的 transpor
2021-04-22 10:35:31 5742 2
原创 c++的线程安全静态检查
在阅读leveldb源码的过程中,发现很多成员变量被GUARDED_BY修饰,如下:struct IterState { port::Mutex* const mu; Version* const version GUARDED_BY(mu); MemTable* const mem GUARDED_BY(mu); MemTable* const imm GUARDED_BY(mu); IterState(port::Mutex* mutex, MemTable* mem, MemT
2021-04-21 16:55:23 1049
原创 Amazon Aurora 论文解读
Amazon Aurora 论文解读复制与一致性计算与存储分离架构存储引擎基本操作WritesCommitsReadsReplicas总结Aurora是一个OLTP的分布式数据库。Amazon认为随着分布式系统的发展以及架构的演进,传统数据库的磁盘IO瓶颈已经变成了计算存储分离架构下网络IO(以及事务先关的IO处理的过程)。的Aurora通过计算节点和存储节点分离,计算节点scale up,存储节点scale out的理念将公有云的关系数据库产品推向了一个新的高度。传统关系数据库三宗罪,扩展性、可
2021-04-21 11:19:10 954 1
原创 Google Spanner 论文笔记
Google Spanner 论文笔记架构复制与一致性TrueTime事务数据迁移Google Spanner是谷歌的全球级分布式数据库(Golbally-Distributed Database)。Spanner的扩展性达到了全球级,可以扩展到数百个数据中心,数百万台机器,上万亿行数据,除了夸张的可扩展性之外,他还能通过同步复制和多版本控制MVCC来满足外部一致性。支持垮数据中心的事务。是一个大规模分布式技术和传统关系型数据库技术的完美融合。架构Spanner的模型和MegaStore系统较为相似
2021-04-20 14:46:44 571
原创 Microsoft SQL Azure论文笔记
Microsoft SQL Azure本笔记出自论文《Extreme Scale with Full SQL Language Support in Microsoft SQL Azure》和一些网络资料。论文在开头就提到了,很多互联网行业做出的存储产品如Google Bigtable、Yahoo PNUTS、Amazon Dynamo等,其提供的ACID事务、一致性保证是和传统的关系型数据库有很大区别的。互联网行业通过其上层业务的抽象,将一致性及事务限制在特定的consistency domain中,从
2021-04-19 16:57:49 218
原创 谷歌GFS论文笔记
谷歌GFS论文笔记前言masterchunkserver一致性模型data integrity下线mmap读写锁FAQ参考链接前言本篇文章主要讲解谷歌经典论文The Google File System,它构建在廉价的普通pc服务器上,并且可以自动容灾容错。其对于整个存储界具有里程碑的意义。masterGFS 为了简化设计,在整个系统中只有一个 master 进行管理。Master 不提供读写操作,它只会告诉 client,它所请求操作的文件在哪个 chunkserver 上,然后 clien
2021-04-19 11:11:22 269
原创 DPDK精准测量时间
DPDK精准测量时间DPDK实现方式实际操作参考链接DPDK实现方式简单来说就是通过rdtsc指令来获取CPU启动起来的tick值,进行减法,然后结合频率来得到时间差。对应到spdk里面的话就是spdk_get_ticks和spdk_get_ticks_hz. spdk_get_ticks最终会调用到rte_rdtsc,其实现如下://dpdk/lib/librte_eal/common/include/arch/x86/rte_cycles.hstatic inline uint64_trt
2021-04-17 12:35:34 2653
原创 linux多线程同步概览
linux多线程同步概览临界区互斥锁 mutex基本函数pthread_mutex_destroy 何时调用?互斥锁类型?互斥量和自旋锁的区别条件变量 condition variable基本函数流程读写锁 reader-writer lock单读多写的场景自旋锁 spin lock初始化自旋锁获得一个自旋锁尝试获取一个自旋锁释放(解锁)一个自旋锁销毁一个自旋锁信号量 semphoreunique_lock成员函数thread local__thread临界区当两个线程竞争同一资源时,如果对资源的访
2021-04-17 12:31:32 295
原创 linux性能优化--cpu篇
linux性能优化--cpu篇前言负载CPU使用率procperf一些链接`perf list`比较有用的event`perf stat``perf record`ProfilingStatic Tracing`perf report`perf probeMISCperf调用查看docker内部的程序`perf top`perf 优化perf生成火焰图Brendan Gregg博客上提及的生成火焰图的方法使用systemtap生成火焰图perf scriptperf使用笔记OFF-CPU分析测量off-cp
2021-04-17 12:29:03 1631
原创 linux网络编程--阻塞与非阻塞
linux网络编程--阻塞与非阻塞建立连接接受连接无阻塞的设置方式read() write()读操作写操作Linux fcntl函数详解功能描述函数原型fcntl()函数五种功能F_DUPFDF_GETFDF_SETFDF_GETFLF_SETFLF_GETOWNF_SETOWNF_GETFL和F_SETFL的标志与上面相同,如果一个fd本身就是sockfd的时候,可以直接这是socket标志建立连接阻塞方式下,connect首先发送SYN请求道服务器,当客户端收到服务器返回的SYN的确认时,则co
2021-04-17 12:19:02 673
原创 mlx rdma网卡指标参数简介
mlx rdma网卡指标参数简介综述hw_countercounter参考链接综述mlx5 driver在linux sysfs下有一系列的mlx网卡参数和计数器分布在/sys/class/infiniband/mlx5_x/ports/1/counters和/sys/class/infiniband/mlx5_x/ports/1/hw_counters目录下,这些参数统计了某种类型的事件发生的次数,如某种错误数,收包数等等。理解这些参数,可以帮助我们更好的理解mlx网卡的运行状态,通过监控,可以更快
2021-04-17 12:10:44 4282 2
原创 虚拟化技术概念基础
虚拟化技术概念基础引言狭义虚拟化广义虚拟化虚拟机Duck Typing共享经济资源复用的艺术KVMQEMU-KVMLibvirt引言计算机是为了计算而诞生的,从最早期的机械式计算器开始,复杂的计算需求一直在推动着计算设备的规模化增长,在控制机械上消耗的成本和代价也越来越高,只能被迫寻求新的方向为了战争,为了杀人,为了胜利,为了让发射出去的导弹可以依照人的意志在指定的位置又快又准确地炸裂,第一台占地面积167平方米的通用计算机ENIAC诞生了起初,计算机的计算资源是既珍贵又匮乏,为了完成计算,要求使用
2021-04-16 11:38:24 552
原创 linux 丢包排查思路简述(tcp+rdma)
linux 丢包排查思路简述概述网络包接收流程网络包发送流程丢包排查的思路tcp排查方法rdma排查方法网络工具汇总参考链接概述我们首先以tcp网络为例,谈谈linux系统如何收发网络包在进行网络传输时,数据包就会按照协议栈,对上一层发来的数据进行逐层处理;然后封装上该层的协议头,再发送给下一层。传输层在应用程序数据前面增加了 TCP 头;网络层在 TCP 数据包前增加了 IP 头;而网络接口层,又在 IP 数据包前后分别增加了帧头和帧尾。这些新增的头部和尾部,都按照特定的协议格式填充
2021-04-16 09:39:58 4632
原创 分布式事务简介
分布式事务简介事务BASE理论2PC第一阶段:投票阶段第二阶段:提交/执行阶段(成功流程)第二阶段失败回滚流程2pc可能出现的三种问题3PCTCC悲观锁与乐观锁参考链接事务BASE理论BASE 理论是 Basically Available(基本可用),Soft State(软状态)和Eventually Consistent(最终一致性)三个短语的缩写。基本可用(Basically Available):指分布式系统在出现不可预知故障的时候,允许损失部分可用性。软状态(Soft State)
2021-04-15 21:19:15 138
原创 Windows Azure Storage论文解读
Windows Azure Storage论文解读整体架构文件流层 stream layer存储引擎存储优化分区层 Partition Layer存储引擎WAS总结WAS是微软开发的云存储系统,提供Blob、Table、Queue三种类型的服务,它广泛部署与微软内部。其论文发表于2011年SOSP。整体架构WAS主要分为两个部分:定位服务(Location Service LS)和存储区(Storage Stamp)定位服务管理用户到存储区之间的映射,负责负载均衡,并且服务跨地域、高可用存储
2021-04-14 16:04:55 1002 1
原创 Kafka Without ZooKeeper ---- 不使用zookeeper的kafka集群
不使用zookeeper的kafka集群前言ZooKeeper的缺点Kakfa Without ZooKeeper简介Kakfa Without ZooKeeper的优势总结参考链接前言大名鼎鼎的Kafka作为最出名的消息处理中间件,Zookeeper在其中提供一致性服务,并且承担了选主、服务发现、服务注册、存储各种Kafka的各种元数据。随着Kafka的演进,Kafka自己也变成了一个复杂的分布式系统,它和zookeeper一样,都对外提供一致性服务。Kafka在其系统内再维护一套zookeepe
2021-04-13 14:19:53 3234
原创 副本放置策略Copysets论文解读及工程实践
副本放置策略CopySet论文解读及工程实践概述CopySet论文解读术语定义Random ReplicationCopyset ReplicationPremutationReplication工程实践参考链接概述分布式存储追求在系统成本允许的范围内(一般存储集群都是三副本,还想方设法的使用条带化、压缩等方式降低成本),降低数据丢失的概率,降低故障恢复的时间。好的副本放置策略可以优化整个集群的可用性和一致性。斯坦福大学曾经出过一篇论文,Copysets: Reducing the Frequenc
2021-04-12 11:21:10 971
原创 Google Megastore介绍
Google Megastore介绍概述策略对比异步主从 Asynchronous Master/Slave同步主从 Synchronous Master/Slave乐观复制 Optimistic ReplicationMegastore的选择Megastore系统架构实体组EG并发控制(事务)读事务写事务索引协调者读写流程读流程写流程Megastore总结概述Megastore是在Bigtable的基础上提供了友好的数据库功能支持。是介于关系型数据库(RDBMS)和NoSQL之间的存储技术。其引入了
2021-04-11 16:04:39 2747
原创 分布式表格系统Google Bigtable详解
分布式表格系统Google Bigtable详解概述Bigtable架构数据分布保证副本位置与负载均衡存储表的分裂与合并存储引擎垃圾回收总结概述bigtable系统由表格组成,每行有一个主键(Row Key),每行又包含很多列(Column),某一行的某一列构成一个单元(Cell),每个单元包含多个版本的数据。整体上看,Bigtable是一个分布式多维映射表:(row:string,column:string,timestamp:int64)−>string(row:string, colum
2021-04-10 11:15:34 2379 1
原创 分布式键值系统Amazon Dynamo简介
分布式键值系统Amazon Dynamo简介@[TOC](分布式键值系统Amazon Dynamo简介)Dynamo采用的技术虚拟节点Gossip协议NRWVector Clock读写流程参考链接Dynamo采用的技术问题采用的技术数据分布改进的一致性哈希(DHT),采用了虚拟节点技术复制协议复制写协议(Replicated-write protocal,NRW参数可调)数据冲突处理向量时钟临时故障处理数据回传机制(Hinted handoff)永久故
2021-04-09 10:35:42 544
原创 zookeeper客户端库curator分析
zookeeper客户端库curator分析前言综述zookeeper保证理解zookeeper的顺序一致性之前使用zookeeper客户端踩到的坑curator 连接保证连接状态监控以及重试机制实例管理Recipes 场景支持基本操作监听watch实现的recipesElections 选举locks 锁counters 计数器caches 缓存Nodes/WatchersQueues 队列事务tech note参考链接前言笔者在日常工作中主要使用的编程语言是C++,但从事互联网行业总离不开要和分布
2021-04-08 16:13:24 609
原创 一致性协议Paxos详解(三):Multi-Paxos的优化
一致性协议Paxos详解(三):Multi-Paxos的优化前言Multi-Paxos leader 优化client的规则client的保证幽灵复现OceanBase为何采用paxos前言有关一致性协议的资料网上有很多,当然错误也有很多。笔者在学习的过程中走了不少弯路。现在回过头来看,最好的学习资料就是Leslie Lamport和Diego Ongaro的数篇论文、Ongaro在youtube上发的三个视频讲解,以及何登成的ppt。本系列文章是只是笔者在学习一致性协议过程中的摘抄和总结,有疏漏之处
2021-04-08 15:22:40 990 2
原创 一致性协议Paxos详解(二):Multi-Paxos协议流程详解
一致性协议Paxos详解(二):Multi-Paxos协议流程详解前言Multi-Paxos什么是Multi-PaxosMulti-Paxos 介绍accpectoracceptor持久化状态proposerproposer持久化的状态proposer存储的易失状态rpc流程及优化1. prepare2. accept3. SuccessMulti-Paxos系统消息流程 *write(inputValue) → bool*集群变动 Reconfiguration前言有关一致性协议的资料网上有很多,当然
2021-04-08 15:19:46 1065
RDMA_Aware_Programming_user_manual.pdf迈络斯RDMA 编程指南
2019-12-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人