再谈Raft

正如Raft论文作者所说,鉴于Paxos协议晦涩难懂,算法本身与工程生产实践应用相距甚远,实现起来难度非常大,开源实现也少,从而以清晰易懂和工程实现较容易为目标提出了能够达到与(multi-Paxos)协议同等效果的Raft一致性协议算法,而且在强化leader角色、leader选举、成员管理等方面更清晰明确,整体上更优于Paxos或其它一致性协议算法。
阅读全文

也谈Paxos

Paxos算法用来解决什么问题?我理解的用抽象一点的语言解释,paxos算法的过程就是多方统一认知,达成共识,形成决议的过程;用算法本身的形式化运行过程解释,就是多个节点如何选定某个确定的值(一致性);分布式系统中就可以做到保障高可用性(容忍少数失败或故障)的同时,达成一个一致决议,就可以应用于这些场景:多副本一致性、数据库日志强一致同步(节点日志的顺序确定)、选主(谁成为主)、成员管理或配置变更等。
阅读全文

GCC5 std::string新变化

自从GCC-5.1开始,std::string引入了遵从C++11标准的新实现,默认使用SSO(small string optimization)特性,禁用了写时复制(COW)引用计数机制,这也带来了与旧版本std::string的ABI兼容性问题,本篇结合GCC-5.3.0源码来分析新的std::string实现。
阅读全文

并发写-RocksDB源码剖析(3)

中分析了leveldb的写流程,当写线程获取锁将本次写数据(含WriteBatch)放入写队列后却不是队首写线程时,线程本身会阻塞等待直至队首线程写完毕,锁粒度比较大,相较于leveldb,rocksdb对于多线程下并发写入做了很多细节上的优化,让我们来一一分析。
阅读全文