分类:Tech

共 22 篇文章

PhxPaxos 源码阅读笔记(二):存储层

我原以为本篇不需要很多前置内容,但越写越发现还是需要,毕竟存储层存的内容已经和算法及实现息息相关了,所以建议还是先补充前置内容。

类似网络层,PhxPaxos 对存储层也进行了抽象,给用户留下了自行扩展的能力。本篇将对 PhxPaxos 内部实现的默认存储层进行介绍,方便有自行实现需求的用户可以将官方的设计作为参考。我大概理了一遍设计后,发现并不是太复杂,所以篇幅应该不会太长。

接口

在 include/phxpaxos/storage.h 中定义了存储层所需要提供的一些接口,如下:

class LogStorage
{
public:
    virtual ~LogStorage() {}

    virtual const std::string GetLogStorageDirPath(const int iGroupIdx) = 0;

    virtual int Get(const int iGroupIdx, const uint64_t llInstanceID, std::string & sValue) = 0 ...
阅读全文

PhxPaxos 源码阅读笔记(一):网络层

本篇不需要前置内容。

我在看源码的时候,如果对整体架构上有一些了解的话,会尽可能地以自底向上的顺序去看。PhxPaxos 因为之前阅读过相关的文章,所以对于架构也比较清楚,于是也优先去阅读和消息交换相关的代码。毕竟是一个分布式算法的实现,起码现阶段是逃不开网络的,所以先把它看完也有利于后续忘掉消息交换细节专心理解算法。

接口

对于网络层,PhxPaxos 为使用者留了扩展的余地,在 include/phxpaxos/network.h 中定义了网络层所需要提供的一些接口,这里简单的贴一下:

class NetWork
{
public:
    NetWork();
    virtual ~NetWork() {}

    //Network must not send/recieve any message before paxoslib called this funtion.
    virtual void RunNetWork() = 0;

    //If paxoslib call this function, network ...
阅读全文

PhxPaxos 源码阅读笔记(零)

前言

其实之前就很想阅读 PhxPaxos 的源码来加深一下自己对 Paxos 的理解,但因为中途出差一个月加上前前后后的相关准备就搁置了,对于 Paxos 的理解一直停留在纸面上。最近阿里的 X-Paxos 宣传的很火,而自己也稍微闲了一些,就准备把阅读源码这个坑给填了。

PhxPaxos 的整体代码量不是很大,注释虽然不多,但是可读性还是非常高的,配合着那些日志代码以及官方博客中的模型介绍,基本上可以很容易地理解它的大部分内容。

利用零零碎碎的晚上休息时间,大概用了快一周把代码读完了,就想着反正自己从中也学到了不少内容,干脆写一个系列的阅读笔记吧。这是我第一次尝试写一个系列,希望能够写的稍微有点条理吧,这篇博客算是挖坑了。不过最近依旧比较忙,尽可能保持比较快的速度更新吧。

前置内容

我自己并不是一上来就试图通过阅读 PhxPaxos 来理解 Paxos 的,所以肯定是必须有前置内容的,希望对本系列感兴趣的读者能够先看完下面这些相关的内容(如果后续某篇文章与前置内容无关的话,我会在文章开头标注)。

PhxPaxos 作者之一对于 Paxos 的介绍,至少读完前两篇:

  1. Paxos理论介绍(1): 朴素Paxos算法理论推导与证明
  2. Paxos理论介绍(2 ...
阅读全文