自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 ceph的 cache tier实现分析

1 基本介绍 1.1 设计思想 数据的存储可划分为active和inactive两大类,active数据是小部分,会频繁访问,使用更高性能的底层存储介质进行存储;inactive的数据是全集,使用廉价的存储介质存储。这种分冷热的思想与CPU的多级缓存、操作系统的cache、各类软件系统的软件缓...

2019-06-14 13:08:03 988 1

原创 gossip协议介绍

背景 gossip 协议(gossip protocol)又称 epidemic 协议(epidemic protocol),是基于流行病传播方式的节点或者进程之间信息交换的协议,在分布式系统中被广泛使用,比如我们可以使用 gossip 协议来确保网络中所有节点的数据一样。 Gossip pr...

2019-06-14 12:51:53 527 0

原创 Linux文件存储抽象VFS

概念VFS(Virtual Filesystem Switch)称为虚拟文件系统或虚拟文件系统转换,是一个内核软件层,在具体的文件系统之上抽象的一层,用来处理与Posix文件系统相关的所有调用,表现为能够给各种文件系统提供一个通用的接口,使上层的应用程序能够使用通用的接口访问不同文件系统,同时也为...

2018-03-18 23:38:12 881 1

原创 Ceph的BlueStore总体介绍

整体架构bluestore的诞生是为了解决filestore自身维护一套journal并同时还需要基于系统文件系统的写放大问题,并且filestore本身没有对SSD进行优化,因此bluestore相比于filestore主要做了两方面的核心工作:去掉journal,直接管理裸设备针对SSD进行单...

2018-03-15 19:35:10 8573 0

原创 Ceph的FileStore代码阅读问题整理

1.bufferlist中的_memcopy_count作用是什么?bufferlist提供了一个rebuild函数,用来将整个buffterptr链表的所有bufferraw都copy到一个新建的bufferptr中,然后清空链表并将新建的这个bufferptr插入到链表中。_memcopy_c...

2018-03-15 19:05:04 811 0

原创 Ceph单机引擎FileStore简介

Ceph作为一个高可用和强一致性的软件定义存储实现,去使用它非常重要的就是了解其内部的IO路径和存储实现。这篇文章主要介绍在IO路径中最底层的ObjectStore的实现之一FileStore。ObjectStoreObjectStore是Ceph OSD中最重要的概念之一,它封装了所有对底层存储...

2018-03-15 18:58:43 1715 0

转载 socks5协议中文版

目录 1.介绍 2.现有的协议 3.基于TCP协议的客户 4.请求 5.地址 6.应答 7.基于UDP协议的客户 8. 安全性考虑 9. 参考书目 1.介绍 利用网络防火墙可以将组织内部的网络结构从外部网络如INTERNET中有效地隔离,这种方法在许多网络系统中正...

2017-12-15 00:42:31 985 0

原创 Raft协议整理

复制状态机是当前分布式系统中最核心最基础的组件,提供命令在多个节点之间有序复制和执行,当多个节点初始状态一致的时候,保证节点之间状态一致。系统只要多数节点存活就可以正常处理,它允许消息的延迟、丢弃和乱序,但是不允许消息的篡改。 Raft将一致性问题分解成了如下三个子问题 Leader el...

2017-12-13 19:44:03 488 0

原创 磁盘挂载信息:/etc/fstab

磁盘被手动挂载之后都必须把挂载信息写入/etc/fstab这个文件中,否则下次开机启动时仍然需要重新挂载。 系统开机时会主动读取/etc/fstab这个文件中的内容,根据文件里面的配置挂载磁盘。这样我们只需要将磁盘的挂载信息写入这个文件中我们就不需要每次开机启动之后手动进行挂载了...

2017-09-04 19:39:00 883 0

原创 vim查找与替换

vim提供了:s(substitute)命令进行替换和查找,基本格式如下::{作用范围}s{分隔符}{目标}{分隔符}{替换}{分隔符}{替换标志}作用范围 %:全文 n,m:第n行到第m行 .,$:当前行到最后一行 .,+n:当前行到其后n行 '<,>':visu...

2017-08-25 21:04:10 355 0

原创 Erasure Coding

1. 介绍Erasure Code可以认为是RAID的通式,任何RAID都可以转换为特定的erasure code。在传统的RAID中,仅支持少量的磁盘分布,当系统中存在多个分发点和多节点时,RAID将无法满足需求。比如RAID5只支持一个盘失效,即使是RAID6也仅支持两个盘失效,所以支持多个盘...

2017-08-10 12:56:07 628 0

原创 C++版ThreadPool实现

个人基于pthread实现的C++版ThreadPool,代码见github。

2017-07-17 22:54:06 1296 0

原创 基于python生成器封装的协程类

自从python2.2提供了yield关键字之后,python的生成器的很大一部分用途就是可以用来构建协同程序,能够将函数挂起返回中间值并能从上次离开的地方继续执行。python2.5的时候,这种生成器更加接近完全的协程,因为提供了将值和异常传递回到一个继续执行的函数中,当等待生成器的时候,生成器...

2017-03-14 14:32:21 668 0

原创 协程的概念总结

并发最早的计算机,每次只能执行一个程序,只有当当前执行的程序结束后才能执行其它程序,在此期间,别的程序都得等着。到后来,计算机运行速度提高了,程序员们发现,单任务运行一旦陷入IO阻塞状态,CPU就没事做了,很是浪费资源,于是就想要同一时间执行那么三五个程序,几个程序一块跑,于是就有了并发。原理就是...

2017-02-24 14:45:43 1362 1

转载 C++11特性维基百科总结

C++11标准发布已有一段时间了, 维基百科上有对C++11新标准的变化和C++11新特性介绍的文章. 我是一名C++程序员,非常想了解一下C++11. 英文版的维基百科看起来非常费劲,而中文版维基百科不是知道是台湾还是香港人翻译的然后由工具转换成简体中文的,有些术语和语言习惯和大陆程序不一样! ...

2017-02-24 11:19:28 659 0

原创 模版元编程:C++11中type traits的部分实现

C++11新加入的type_traits头文件提供了模版元编程中常用的type trait基础设施,这些type traits基于编译期间的运算,能够极早提示出程序中的错误。这些type traits的基础就是整形包装器,见之前的博文总结:http://blog.csdn.net/u0104875...

2016-12-26 23:32:26 1508 0

转载 g++编译选项

介绍 代码编译过程分为: 预处理,生成.i文件编译,转换成汇编语言, 生成.s文件将汇编代码转换成机器码,生成.o文件链接目标代码,生成可执行程序 总体选项 -E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面. gcc -E hello.c &g...

2016-12-19 15:36:58 524 0

原创 C++11 强类型enum

旧式enum问题容易被隐式转换成int默认情况下enum的每一项都有一个整数对应,可以显式指定或者从前一个自增得到。 旧式enum的类型限制是: 禁止不同枚举体之间的赋值 禁止整形向枚举体的隐式转换等 但是,当使用enum作为函数参数或者返回值时,如果此时参数类型或者返回值类型为int类型,是...

2016-12-14 18:40:36 436 0

原创 C++11类的新语法和特性

sizeof计算类成员大小sizeof可以直接用于获取Class::member的大小,而不用通过Class的实例获取。class A { public: long ...

2016-11-28 16:50:03 357 0

原创 C++11新增语法(糖)

新增类型long longC++11标准中新加入了long long类型属性,占用空间不小于long类型。long large = LONG_MAX; long long long_large = LLONG_MAX; long long long_long_large = 1LL <<...

2016-11-23 23:51:01 838 0

原创 事件循环开发框架eventloop(python版)

基于不同操作系统提供的多路IO通知机制,实现了一个可以针对文件描述符或者同类结构进行事件监听开发的小型框架,基于tornado的IOLoop实现。主要结构如下:LoopImpl类依据不同操作系统,按照epoll的接口实现了统一的loop注册方式:class LoopImpl(object): ...

2016-11-23 21:11:11 4638 0

原创 C++11模版新特性

模板友元C++11新标准中,可以声明一个类的模板参数类型为类的友元。template<typename T> class Bar { friend T; protected: int val = 100; };class Foo { public: void print...

2016-11-22 21:43:28 343 0

原创 http4cpp - 易用的C++ http开发微框架

根据最近基于C++开发http应用的经历,积累了一个基于libcurl库的微型开发框架,源码见github。

2016-11-15 14:56:11 844 0

原创 libcurl库(C++)快速使用

简介libcurl作为是一个多协议的便于客户端使用的URL传输库,基于C语言,提供C语言的API接口,支持DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, S...

2016-10-28 17:44:26 11443 0

转载 libcurl库返回状态码解释与速查

CURLE_OK(0) 支持返回 CURLE_UNSUPPORTED_PROTOCOL(1) 你的URL传递给libcurl的使用协议,这libcurl的不支持。支持可能是你没有使用一个编译时的选项,它可以是一个拼写错的协议字符串,或者只是一个协议的libcurl没有代码。   CURL...

2016-09-22 16:41:42 3124 0

原创 自行编写的Makefile文件的结构

对于文件较多的C++项目,目录结构的组织清晰能方便开发,多个文件夹存放了多个源文件和头文件,一般下方式在编译之后都会生成与源文件同目录下的目标文件,个人觉得这种方式不太好,各个目标文件分散不太集中,希望所有目标文件和可执行文件都放在bin目录下,具体目录结构如下:--bin |--a.o ...

2016-09-08 21:54:59 406 0

转载 Makefile撰写教程

1. Makefile 简介 Makefile 是和 make 命令一起配合使用的. 很多大型项目的编译都是通过 Makefile 来组织的, 如果没有 Makefile, 那很多项目中各种库和代码之间的依赖关系不知会多复杂. Makefile的组织流程的能力如此之强, 不仅可以用来编译项目...

2016-09-08 21:29:25 321 0

转载 makefile下的echo颜色控制

echo 颜色 echo     -e     enable interpretation of the backslash-escaped characters listed below 字背景颜色范围:40----49  40:黑  41:深红  42:绿  43...

2016-09-03 12:32:34 1170 0

原创 一个输出内容不同引发的问题

常用的curl、mysql命令行客户端等程序,进行操作后会进行输出,这都是很正常的程序交互,并没有什么问题。但是,在使用他们的过程中,出现了下面这样的问题: curl 下载一个文件的命令后续没有任何其他管道符操作时,会默认讲文件输出到命令行,但是添加管道符进行后续操作时,就会输出下载文件的进度...

2016-08-13 02:03:12 449 0

原创 多线程抽象编程模型(Python版)

最近需要完成一个多线程下载的工具,对其中的多线程下载进行了一个抽象,可以对所有需要使用到多线程编程的地方统一使用这个模型来进行编写。 主要结构: 1、基于Queue标准库实现了一个类似线程池的工具,用户指定提交任务线程submitter与工作线程worker数目,所有线程分别设置为后台运行,提...

2016-07-31 23:53:31 496 0

原创 关于linux下时间延迟函数精度问题

Linux内核时钟中断设施linux的时钟中断需要两个全局变量,分别是xtime与jiffies。1、xtime一个timeval结构类型变量,是从cmos电路中取得的时间,一般是从某一历史时刻开始到现在的时间,也就是为了取得我们操作系统上显示的日期。这个就是“实时时钟”,它的精确度是微秒。获取方...

2016-07-27 10:31:51 5764 0

原创 python的多线程基础设施

当我们在使用线程时,存在以下基本的多线程编程的概念: lock:多个线程访问临界资源时,为满足线程安全必须保证访问临界资源的代码同一时刻仅有一个线程执行。 condition:传递消息的工具。线程中的条件,不满足条件就wait,获得条件就执行。 wait():在条件实例中可用的wait()。 no...

2016-07-19 00:02:01 370 0

原创 线程本地存储

对于多线程程序,所有线程共享全局和静态变量,任何线程使用变量之后都会在其他线程可见,因此对于执行顺序非常重要的场景,需要使用多重方式来进行同步确保线程安全。但是,如果希望每个线程单独拥有一个全局或静态变量,所有线程都可以使用它,但是在每个线程中是单独存储的,那么就需要使用线程本地存储。pthrea...

2016-07-05 21:13:46 711 0

原创 Linux修改Shell命令提示符及颜色

1. Linux登录过程中加载配置文件顺序: /etc/profile → /etc/profile.d/*.sh → ~/.bash_profile → ~/.bashrc → [/etc/bashrc] 可查看默认的~/.bashrc文件如下: [root@~] cat ~/.b...

2016-07-05 15:11:58 531 0

原创 HTTP协议头——Content-MD5

以下为RFC1864的英文主要部分原文:1. IntroductionDespite all of the mechanisms provided by MIME [1] which attempt to protect data from being damaged in the course...

2016-06-30 19:55:18 7408 0

原创 HTTP协议全览

http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式,成熟的版本是HTTP1.0和1.1,HTTP1.1版本中给出一种持续连接的机制,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。 HTTP协议以明文方式发送内容,不提供任何方式的数...

2016-06-30 17:23:58 3718 0

原创 C++11的Lambda表达式

随着函数式编程语言的应用,很多语言都提供了 lambda 表达式,如 C#,Python,Java 8。lambda 表达式可以方便地构造匿名函数,如果代码里面存在大量的小函数,而这些函数一般只被调用一次,那么将他们重构成 lambda 表达式。C++11新标准里添加了lambda表达式这个语言特...

2016-06-23 00:05:07 336 0

原创 线段树应用

问题描述: Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive. The update(i, val) function modif...

2016-06-15 23:57:06 619 0

原创 C++对象的构造

C++中通过用户自定义类建立对象时,需要调用构造函数,这里包含默认构造函数、复制构造函数和自定义构造函数。其中自定义构造函数,按照函数重载机制进行匹配调用,与普通重载函数调用类似。因此,这里讨论的是默认构造函数和复制构造函数,因为这两种构造函数如果用户不显式定义,会在特定情况下被编译器合成出来。编...

2016-05-31 23:39:26 1015 0

原创 C++标准库——random

C++11引入了random头文件,可以更加得到更精确和功能更完善的随机数以及相关领域问题。这个标准库分为两大部分,分别是: - 生成器:定义了用来产生均匀分布的伪随机数的机制,也称为随机数引擎(engine)。 - 分布:以生成器得到的均匀分布的随机数序列转换为某种特定数学概率分布的序列,如...

2016-05-28 19:31:03 7530 2

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