6 OshynSong

尚未进行身份认证

百度云计算事业部研发工程师

等级
博文 186
排名 1w+

ceph的 cache tier实现分析

1基本介绍1.1设计思想数据的存储可划分为active和inactive两大类,active数据是小部分,会频繁访问,使用更高性能的底层存储介质进行存储;inactive的数据是全集,使用廉价的存储介质存储。这种分冷热的思想与CPU的多级缓存、操作系统的cache、各类软件系统的软件缓存是相通的,但ceph通过软件层面的配合,充分利用不同的硬件介质和软件存储模式,为上层用户提供透明统一...

2019-06-14 13:08:03

gossip协议介绍

背景gossip协议(gossipprotocol)又称epidemic协议(epidemicprotocol),是基于流行病传播方式的节点或者进程之间信息交换的协议,在分布式系统中被广泛使用,比如我们可以使用gossip协议来确保网络中所有节点的数据一样。Gossipprotocol最早是在1987年发表在ACM上的论文《EpidemicAlgorithms...

2019-06-14 12:51:53

Linux文件存储抽象VFS

概念VFS(VirtualFilesystemSwitch)称为虚拟文件系统或虚拟文件系统转换,是一个内核软件层,在具体的文件系统之上抽象的一层,用来处理与Posix文件系统相关的所有调用,表现为能够给各种文件系统提供一个通用的接口,使上层的应用程序能够使用通用的接口访问不同文件系统,同时也为不同文件系统的通信提供了媒介。架构VFS在整个Linux系统中的架构视图如下:Linux系统的User...

2018-03-18 23:38:12

Ceph的BlueStore总体介绍

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

2018-03-15 19:35:10

Ceph的FileStore代码阅读问题整理

1.bufferlist中的_memcopy_count作用是什么?bufferlist提供了一个rebuild函数,用来将整个buffterptr链表的所有bufferraw都copy到一个新建的bufferptr中,然后清空链表并将新建的这个bufferptr插入到链表中。_memcopy_count成员记录了在进行拷贝过程中每个bufferraw的长度之和。这个值用来在进行内存对齐时需要重新...

2018-03-15 19:05:04

Ceph单机引擎FileStore简介

Ceph作为一个高可用和强一致性的软件定义存储实现,去使用它非常重要的就是了解其内部的IO路径和存储实现。这篇文章主要介绍在IO路径中最底层的ObjectStore的实现之一FileStore。ObjectStoreObjectStore是CephOSD中最重要的概念之一,它封装了所有对底层存储的IO操作。从上图中可以看到所有IO请求在Clieng端发出,在Message层统一解析后会被OSD层...

2018-03-15 18:58:43

socks5协议中文版

目录1.介绍2.现有的协议3.基于TCP协议的客户4.请求5.地址6.应答7.基于UDP协议的客户8.安全性考虑9.参考书目1.介绍利用网络防火墙可以将组织内部的网络结构从外部网络如INTERNET中有效地隔离,这种方法在许多网络系统中正变得流行起来。这种防火墙系统通常以应用层网关的形式工作在两个网络之间,提供TELNET、FTP、SMT

2017-12-15 00:42:31

Raft协议整理

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

2017-12-13 19:44:03

磁盘挂载信息:/etc/fstab

磁盘被手动挂载之后都必须把挂载信息写入/etc/fstab这个文件中,否则下次开机启动时仍然需要重新挂载。系统开机时会主动读取/etc/fstab这个文件中的内容,根据文件里面的配置挂载磁盘。这样我们只需要将磁盘的挂载信息写入这个文件中我们就不需要每次开机启动之后手动进行挂载了。挂载的限制  1、根目录是必须挂载的,而且一定要先于其他mountpo

2017-09-04 19:39:00

vim查找与替换

vim提供了:s(substitute)命令进行替换和查找,基本格式如下::{作用范围}s{分隔符}{目标}{分隔符}{替换}{分隔符}{替换标志}作用范围%:全文n,m:第n行到第m行.,$:当前行到最后一行.,+n:当前行到其后n行'<,>':visual模式下选择区域后输入:得到选区分隔符常用为/作为分隔符,可以使用其他字符,但同一命令需要保持一致。替换标志[空]:仅从光标开始替

2017-08-25 21:04:10

Erasure Coding

1.介绍ErasureCode可以认为是RAID的通式,任何RAID都可以转换为特定的erasurecode。在传统的RAID中,仅支持少量的磁盘分布,当系统中存在多个分发点和多节点时,RAID将无法满足需求。比如RAID5只支持一个盘失效,即使是RAID6也仅支持两个盘失效,所以支持多个盘失效的算法也就是erasurecode是解决这一问题的办法。(ErasureCode作为可有效提升存

2017-08-10 12:56:07

C++版ThreadPool实现

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

2017-07-17 22:54:06

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

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

2017-03-14 14:32:21

协程的概念总结

并发最早的计算机,每次只能执行一个程序,只有当当前执行的程序结束后才能执行其它程序,在此期间,别的程序都得等着。到后来,计算机运行速度提高了,程序员们发现,单任务运行一旦陷入IO阻塞状态,CPU就没事做了,很是浪费资源,于是就想要同一时间执行那么三五个程序,几个程序一块跑,于是就有了并发。原理就是将CPU时间分片,分别用来运行多个程序,可以看成是多个独立的逻辑流,由于能快速切换逻辑流,看起来就像是大

2017-02-24 14:45:43

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

C++11标准发布已有一段时间了,维基百科上有对C++11新标准的变化和C++11新特性介绍的文章.我是一名C++程序员,非常想了解一下C++11.英文版的维基百科看起来非常费劲,而中文版维基百科不是知道是台湾还是香港人翻译的然后由工具转换成简体中文的,有些术语和语言习惯和大陆程序不一样! 我决定结合这两个版本按照我自己的习惯把这篇文章整理到我的博客中.分享给关注我和关注C++11的朋友们.

2017-02-24 11:19:28

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

C++11新加入的type_traits头文件提供了模版元编程中常用的typetrait基础设施,这些typetraits基于编译期间的运算,能够极早提示出程序中的错误。这些typetraits的基础就是整形包装器,见之前的博文总结:http://blog.csdn.net/u010487568/article/details/51273920。本文对typetraits的部分进行总结和实现

2016-12-26 23:32:26

g++编译选项

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

2016-12-19 15:36:58

C++11 强类型enum

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

2016-12-14 18:40:36

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

sizeof计算类成员大小sizeof可以直接用于获取Class::member的大小,而不用通过Class的实例获取。classA{public:longlongllint=0;};cout<<sizeof(A::llint)<<endl;上

2016-11-28 16:50:03

C++11新增语法(糖)

新增类型longlongC++11标准中新加入了longlong类型属性,占用空间不小于long类型。longlarge=LONG_MAX;longlonglong_large=LLONG_MAX;longlonglong_long_large=1LL<<63;cout<<"testlonglong:"<<large<<'\t'<<long_large<<'\

2016-11-23 23:51:01
奖章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周上午根据用户上周的博文发布情况由系统自动颁发。