论文阅读笔记(MeteorShower)

哎,拖更了,PhxPaxos 系列本来是打算一周一篇的,结果周中偷懒了一会儿,想着干脆拖到周末再写吧,但周四的时候收到邮件说下周二要例会做报告(= =# 为啥每学期都是第一个),于是这周基本就无法更新了,写篇论文阅读笔记做交代吧。这类型的笔记之前也会写,但基本不发,这次试试看吧。内容可能会偏翻译性质,但是水平有限,尽量避免渣翻。理解有误的话很正常,望交流。

原文来自 IPDCS 2017:MeteorShower: Minimizing Request Latency for Majority Quorum-based Data Consistency Algorithms in Multiple Data Centers。

介绍

背景

目前很多的存储系统都有跨数据中心部署的需求,具体表现就是同一份数据的多个副本会分散在多个数据中心,并且,副本的数量一般都可以根据工作负载的情况来进行调整。这种多副本位于多数据中心的形式可以很好地实现位置相关的访问,为用户提供就近访问,从而降低时延。但是,在为一份数据提供多副本时,由于需要维护数据一致性,会引入额外的代价。

不同的系统出于各自的设计 ...

阅读全文

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 ...
阅读全文