自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 rocksdb介绍之compaction流程

rocksdb最常用的compaction方式是Leveled Compaction,首先介绍一下Leveled Compaction。参考https://github.com/facebook/rocksdb/wiki/Leveled-Compaction数据库的数据存放在sst文件中,sst文件有多个,会分到不同的level(L0,L1,L2…)中。最新的数据先保存在内存中,满足一定条件后写入到L0的sst文件,sst文件写入后不会再进行修改,只能读取、删除。L0有几个文件数量相关的配置:当L0层的

2022-06-23 16:57:49 2257 5

原创 rocksdb介绍之数据写入流程

rocksdb是一个kv数据库,其介绍可以参考http://vpha.rd.tp-link.net/phame/post/view/3566/rocksdb_%E5%AD%98%E5%82%A8%E5%8E%9F%E7%90%86%E4%BB%8B%E7%BB%8D/本文主要介绍rocksdb写入数据的流程与相关代码,因为是边学习边写的,可能有一些疏漏请读者见谅。rocksdb的写入操作大致可以分为4中:put, merge, deletion, range deletion。put指的是插入操作,插入一个

2022-06-23 16:53:51 2007

原创 踩内存问题分析工具

踩内存问题,大家都知道,是一个比较难分析的问题。踩内存问题被发现,通常是程序崩溃的时候,能够生成coredump分析,知道是哪个内存被踩了,但通常是很难分析出是哪段代码出现了踩内存的问题。本文会介绍几种分析踩内存问题的工具,有些工具是最近发现的,我还没有大量使用过,所以只是个简单的介绍,各位看官自行判断是否实用。文章写的比较匆忙,内容可能会不太完整,请各位见谅。发现踩内存问题后,我们可以通过gdb来起出现问题的应用程序,然后对出现问题的变量进行watch,每次这个变量被读取/修改时,程序都会暂停,我们就可以

2022-06-23 16:48:45 2944

原创 使用bcc来调试你的代码

bcc之前有一篇介绍:bcc/ebpf使用介绍使用bcc,除了官方已经提供的一些工具(主要是对系统的调试,例如io、内存、网络、cpu),我们还可以用它来调试我们的应用代码。我们可以把调试手段分为两类:1. 静态调试 2. 动态调试。什么意思呢?我们以游戏为例,我们在游戏中进入战斗之前,通常会先对自己的装备、药品等做一些准备,进入战斗之后,这些装备、药品就可以直接使用了,这就是静态调试,也就是预先准备好的调试手段。但是,在战斗的过程中,我们可能发现我们需要其他装备,或者获得了更好的装备需要更换上去,那么我

2022-06-22 17:40:47 1023

原创 rocksdb设计架构

rocksdb是一个kv(key和value作为一条数据,一般key用于查询,value存储数据)存储引擎,常用于数据库存储数据。rocksdb的编译产物是动态库,无法直接使用,没有提供sql命令,一般需要在程序中调用rocksdb提供的api进行对数据库的读写等操作。rocksdb是以leveldb为基础开发的,都使用了LSM Tree来存储数据。rocksdb的主要设计目标是满足使用需求的同时,提供高性能的存储,相比leveldb提供了很多额外的特性,优化性能。rocksdb提供了很多的参数配置,所以非

2022-06-15 11:46:16 823

原创 bcc/ebpf使用介绍

ebpf是linux trace框架的一部分内容,trace的介绍可以参考linux tracers使用介绍。trace框架允许我们在内核态/用户态的代码中加钩子,并定义了一些预置的钩子函数,实现一些基本的调试功能。而对于需要比较灵活的处理的情况,可以使用ebpf,允许用户自定义钩子函数,进行例如信息的过滤、统计、计算等处理。bcc是一个工具包,使用python来对ebpf进行封装,以便更加方便的使用ebpf,并内置了很多已经写好的工具,bcc的github地址是:https://github.com/io

2022-06-08 09:28:47 2616

原创 raft算法介绍

raft算法中,写入请求的一般执行过程:接收到写入请求的node,将请求转发给leader。leader将写入请求记录到leader自己的log中。leader向其他节点发起append请求,可能包含旧数据的append。leader确认半数以上的node已经成功append之后,执行commit。commit之后可以执行apply,也就是执行写入请求,apply完成之后,认为请求执行成功,返回。leader节点fail后,如何产生新的leader每个node都和leader之间保证着心

2022-04-20 18:50:51 2014

原创 perf与火焰图使用介绍

一、介绍perf是linux上的性能分析工具,perf可以对event进行统计得到event的发生次数,或者对event进行采样,得到每次event发生时的相关数据(cpu、进程id、运行栈等),利用这些数据来对程序性能进行分析。perf可以统计或采样的event有很多,如果我们要分析cpu,那么我们可以使用cpu-cycles、cpu-clock来衡量占用cpu的程序的分布情况,还可以通过cache-misses、page-faults、branch-misses等event来分析造成cpu占用高的底

2022-04-11 13:45:02 5835 1

原创 事务隔离性(Isolation)介绍

一、概念介绍我们都知道,数据库的事务有ACID这4个需要具备的特性,本文主要介绍I即隔离性(Isolation)。一个事务,就是一些对数据库的操作(增删改查)的组合,这个操作的组合需要满足ACID四个特性:A(atomic):原子性,整个事务要么全部完成,要么全部不执行,一般实现是通过在执行过程中发现出错时,将之前的操作回滚。C(consistency):一致性,意思是事务的执行前后,数据就要满足规定的一些规则,例如主键唯一,或者其他由用户规定的规则。这个特性并不完全由数据库提供,还与事务中的执行

2022-03-29 16:26:07 5236

原创 linux tracers使用介绍

一、tracers简介在linux的kernel/trace目录下,有一些用于调试内核的工具,也就是tracers,包括:tracepoint,或者也叫做event trace。tracepoint需要手动在代码中增加,默认情况下功能类似于printk,就是用于打印信息。但在trace框架中,你可以通过操作/sys/kernel/debug/tracing下的对应文件来控制打印的开关、过滤(例如只打印特点值时的信息),也可以配perf、ebpf进行使用。ftrace/function tracer。

2022-03-28 10:25:30 4770 1

原创 rocksdb数据库的打开过程(DBImpl::open)

简要流程rocksdb版本:6.19DB::open函数:Status DB::Open(const DBOptions& db_options, const std::string& dbname, const std::vector<ColumnFamilyDescriptor>& column_families, std::vector<ColumnFamilyHandle*>*

2021-12-07 16:23:21 3410

原创 硬盘坏道介绍

1.坏道介绍1.1. 坏道的定义坏道指的是硬盘中的部分数据无法使用,或者使用出现了异常。更标准的说法应该是坏扇区而不是坏道,因为磁盘的最小寻址单位是扇区而不是磁道。坏道的表现可能有:1.无法响应读写指令(可能时好时坏,也可能完全不响应)2.读取出来的数据与写入的数据不一致目前碰到的问题主要是问题一,问题二较难发现,不确定实际使用中是否遇到过。物理坏道是指因为物理原因导致的扇区损坏,不管是操作系统还是磁盘上的磁盘控制器固件都无法对这样的扇区进行读写操作。这几年的硬盘,单个盘片容量通常超过1TB,

2021-11-30 19:05:30 4869

原创 ext4文件系统布局设计

1.硬盘整体布局-基本布局2.硬盘整体布局-开启flex_bg3.inode与文件数据分布关系3.1.只是用inode,不扩展extent tree时一个inode对应一个file,inode中的i_block字段记录file中的内容与硬盘中的地址对应关系。3.2扩展了extent tree后扩展之后,extent tree有了两个node:inode中的i_block,扩展的一个block此时i_block作为Internal node,扩展的bl...

2021-01-09 22:27:31 379

原创 vfs源码框架介绍

对文件系统,我们一般的操作主要有:1.初始化vfs,准备好相关资源进行后续操作;2.mount,挂载文件系统,挂载后文件系统有了路径,才可以进行后续的其他操作;3.open,打开文件,open参数可以带O_CREATE,创建文件后打开,打开文件后,才可以进行后续的读写等操作;4.read,write,读写文件;5.删除文件这些是基本的文件操作。1.start_kernel初始化过程中,对dentry、inode、superblock的缓存哈希表进行初始化。并调用init_rootf...

2021-01-09 17:36:52 321

原创 paxos算法

paxos算法解决集群的一致性问题。问题描述:有一个集群,集群就是由多个节点组成的系统,每个节点可以担当以下的一个或几个角色:a)proposer:提议者,可以提出一个提议(propose),提议的内容就是设置某个值b)acceptor:判决者,可以针对一个提议判断是否通过。一个acceptor通过提议不代表集群通过提议,集群通过提议的方法待定。c)leaner:使用提议的结果要求集群满足一致性:在任一时刻,集群中的值都是唯一的,即无论从哪个可访问的节点访问一个值,得到的结果都.

2020-12-25 17:17:25 250 1

原创 seastar介绍及源码分析

目录1.运行入口a)入口b)run_deprecatedc)smp::configured)reactor::rune)run_some_tasks1.运行入口a)入口int seastar::app_template::run(int ac, char ** av, std::function<future<int> ()>&& func);参数说明:ac和av是传入的相关配置,例如可以配置内存上限、使用的cpu核.

2020-12-23 12:58:12 8486 2

原创 scylladb-源码分析-gossip

一、gossip协议介绍基本原理Gossip protocol 也叫 Epidemic Protocol (流行病协议),实际上它还有很多别名,比如:“流言算法”、“疫情传播算法”等。这个协议的基本思想就是:一个节点同步信息到整个集群中的所有节点时,每次只向集群中的几个随机节点发送消息,收到消息的节点也会发送消息给其他随机几个节点,直至整个集群中的所有节点都收到了这个消息。优缺点优点:1.扩展性网络可以允许节点的任意增加和减少,新增加的节点的状态最终会和其他节点一致2..

2020-12-11 16:35:33 447 1

原创 无序唯一ID生成算法

最近遇到一个需要生成无序唯一ID的问题,虽然只是个小问题,也花了一些时间思考,因此记录一下。以下介绍几种方法。一、直接生成随机数1. GUID这个方法应该最容易想到,GUID就是一个利用随机算法生成的128bit的随机数,并不保证前后生成的两个数字不相同,但由于长度足够长,所以生成的两个数字重复的概率非常小,可以认为是不会重复的。然而这么长的数字并不适合用作会议号,所以该方案不合适。2.随机数+查重这个方法也很容易想到:1 生成随机数2 查询数据库,生成的随机数是否已被使用2-1

2020-12-10 09:47:08 1567

原创 scylladb数据存储结构

一、整体结构scylladb的大致存储结构如下图所示。1.一个集群有多个节点组成,一个节点是一个scylladb服务,一般就是一台主机。2.集群中可以创建多个keyspace,每个keyspace都分布在所有节点上,可以针对keyspace指定副本数、副本策略等属性3.keyspace中可以创建多个column family,column family类似与sql中的表,可以指定列的名称、类型等信息,可以对行进行插入、删除、更新操作4.parition key是一个特殊的列,作为分区(即

2020-12-07 13:37:19 1649

原创 scylladb集群管理

一.创建集群1.安装scylladb2.修改scylla.yaml配置文件,主要需要配置:cluster_name:集群名称,所有节点相同seeds:种子节点列表listen_address:scylladb和集群其他节点进行通信的IP地址auto_bootstrap:新节点是否自动同步数据到本节点rpc_address:Thrift、CQL等客户端连接的地址3.所有节点上启动scylladb。不需要同时启动,非seed节点要在有seed节点启动完成后才能加入集群。.

2020-12-07 11:50:56 677

原创 scylladb源码安装过程

1.安装ubuntuhttp://mirrors.163.com/ubuntu-releases/18.04.4/使用以上的国内地址下载镜像速度更快,使用的ubuntu版本是ubuntu-18.04.5-desktop-amd64.iso。虚拟机使用vmware,安装过程略过,可能遇到卡在安装vmtools,参考https://blog.csdn.net/qq_34415586/article/details/80347813解决。安装完成后配置为国内源,参考https://www.cnbl

2020-11-28 23:58:13 1323

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除