从 2016 年底就开始阅读 《SRE Google 运维解密》 这本书,断断续续看得差不多。对于 Google 这种超大规模的互联网公司,他的运维体系在相当长的时间内都是领先业界很多,虽然说其公开的资料已经是 Google 几年前的事情了,但是其体系还是有很大的研究和实践价值。
这本书的重点是指导思想+具体实践,其中的关键词是分布式。众所周知,Google 在分布式系统方面的理论和实践相当先进,其分布式存储 GFS、分布式计算 MapReduce,分布式数据库 BigTable 也是被广泛地研究与学习。

Read more »

ceph集群中的心跳机制研究3

之前研究了Ceph集群的心跳机制和故障检测机制,那从心跳机制到故障判断的过程又是什么样的?因为涉及多个源代码文件,并且函数调用嵌套很多层,这里看起来不是那么清晰,所以这也是我最后要讲的地方。

Read more »

ceph集群中的心跳机制研究2

我知道Ceph的基石是RADOS,而RADOS的含义是Reliable Autonomic Distributed Object Storage,而Autonomic(自治)的实现则依赖于Ceph中很好的故障检测机制。
下面进入正题。

Read more »

ceph集群中的心跳机制研究

基于Ceph 0.94.5版本,进行Ceph集群中的心跳机制进行研究。
在ceph中,心跳机制通过ping来实现,用来作为集群中故障检测的方法。分为两类:osd与osd之间的心跳,osd与mon之间的心跳。下面去一探究竟。

Read more »

A mind map about storage

我个人现在的工作方向是云存储,这要求我既对目前接触的分布式存储方案、技术(Ceph)有深入的研究,对于存储这个较大的领域的一些基本原理、通用性、本质性的东西也很需要有所了解。先贴一张自己总结的思维导图,以后会基于此图进行补充或者细化。

Read more »

日常工作中经常会遇到哈希算法,出于好奇想多了解一些关于哈希的理论。
在Ceph中(一种分布式存储系统),从Object到PG的映射就是采用了一种哈希算法,名为“rjenkins”。所以就是从这里作为切入点,看了一些资料。

Read more »

c++在c的char类型基础上引入了string类,从而更加方便地对字符串进行操作。但是如果是不会使用string类也会带来很多麻烦。在自己编码的基础上总结了几点误区。

1、char*类型与string类型的相互转换

从char*到string,需要调用string类的构造函数
  如:char* a; string s(a);
从string到char*,需要使用string类的c_str()函数
  如:string s = “hello”, const char* c = s.c_str();

Read more »

最近做课程设计,接触到了Huffman编码与Morse编码。在此总结,分享。之前认为编码是个很神奇的存在,现在能够用代码实现,感觉还是很开心的!

一、Huffman编码

1、概念(摘自wikipedia

  霍夫曼编码(Huffman Coding)是一种编码方式,是一种用于无损数据压缩的熵编码(权编码)演算法。也称“哈夫曼编码”,“赫夫曼编码”。1952年,David A. Huffman在麻省理工攻读博士时所发明的,并发表于《一种构建极小多馀编码的方法》(A Method for the Construction of Minimum-Redundancy Codes)一文。

  在计算机资料处理中,霍夫曼编码使用变长编码表对源符号(如文件中的一个字母)进行编码,其中变长编码表是通过一种评估来源符号出现机率的方法得到的,出现机率高的字母使用较短的编码,反之出现机率低的则使用较长的编码,这便使编码之后的字符串的平均长度、期望值降低,从而达到无损压缩数据的目的。

Read more »

因为之前面试的时候遇见这样的题,今天又遇到了,才想起来,所以拿出来总结一下。

1
2
3
4
5
6
7
8
//strcpy不合格实现
char *my_strcpy(char* dst, const char* src) {
assert(dst != NULL);
assert(src != NULL);
char* ret = dst;
while((*dst++ = *src++) != '\0') ;
return ret;
}

考虑特殊情况:

1
2
char a[] = "abc";
my_strcpy(a+1, a);

这时程序会崩溃!!

Read more »