Masutangu

也許我這一生 始終在追逐那顆九號球

etcd-raft 源码学习笔记(Linearizable Read 之 ReadIndx)

这篇文章介绍 etcd-raft 如何实现 linearizable read(linearizable read 简单的说就是不返回 stale 数据,具体可以看这篇文章 《Strong consistency models》)。 raft 论文第 8 节阐述了思路: Read-only operations can be handled without writing anyt...

etcd-raft 源码学习笔记(概览篇)

这篇文章主要整体上介绍 etcd-raft 库,包括各个类的作用,类之间的串联。不涉及 raft 算法。先来看看 etcd-raft 几个结构体的定义: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 type raft struct { id uint64 Term uint64 Vote uint64...

etcd-raft 源码学习笔记(示例篇)

本系列文章为 etcd-raft 源码阅读笔记,采用自顶向下的方式。这篇是开篇,首先来看看 etcd 提供的基于 raft 库实现的 kv store 示例,代码目录位于 contrib/raftexample。 从 main 函数开始读起: 1 2 3 4 5 6 7 8 9 10 11 12 func main() { ... proposeC := make(cha...

Libco 之 coctx_swap

前言 在之前的文章《浅读 Libco》 粗略的介绍了 libco,这篇文章则重点关注协程上下文切换的实现细节(coctx_swap.S)。 首先回顾下函数调用的 stack frame layout: 调用子函数时,父函数从右到左将函数入栈,最后将返回地址入栈保存后,跳到子函数的地址执行。子函数压栈保存父函数的 %ebp,并将 %ebp 设置为当前 %esp。子函数通过 %ebp ...

Programming Language Part B 课程笔记

本文是学习Coursera Programming Language课程的学习笔记,文章内容及代码均取自课程材料。 Interpreter or Compiler 实现编程语言的 workflow 如下图: Parser 读取程序文本,检查 syntax,如果语法正确则输出 AST(abstract syntax tree)。如果该编程语言有 type checker,则将 AST ...

The Part-Time Parliament 论文笔记

背景 Paxos 岛兼职议会类似容错式分布式系统面对的问题:议员对应分布式系统中的进程,议员缺席对应进程挂掉。Paxos 设计的议会协议在议员经常缺席的情况下可以保证法令的一致性。 The Single-Decree Synod 单一法令的神会协议的演化如下: 首先由几个能保证一致性和允许进展性的约束推导出初级协议(preliminary protocol) prelimina...

多排行榜数据刷新方案

一. 背景 最近工作遇到一个棘手的问题:多个不同的排行榜的玩家信息如何保持一致。简单描述下场景,以小游戏跳一跳为例子,一开始游戏只有一个好友排行榜,好友排行榜以玩家的最高分数进行排序,这样好处理,搭一个关系链svr,该 svr 上缓存玩家好友的信息(避免每次去 DB 查询),并使用玩家信息中的最高分数进行排序。客户端请求时下方相应的排名和玩家信息,包括最高分数信息(客户端需要展示)即可。但如...

Programming Language 课程笔记

本文是学习Coursera Programming Language课程的学习笔记,文章内容及代码均取自课程材料。 一. 声明式编程和命令式编程 声明式编程(Declarative Programming) Building the structure and elements of computer programs, that expresses the logic of a co...

基于 Replicated State Machine 实现游戏进程恢复

Introduction 游戏服务器实现的业务逻辑普遍比较复杂,且大部分是带有状态的。如果进程重启或意外崩溃,会导致该服务器上的玩家断线,丢失进行中的游戏数据,带来极差的游戏体验。为了避免这种情况出现,一般游戏服务器都会持久化玩家数据以实现进程恢复,当重启或进程意外崩溃时,重新拉起进程后可以恢复到之前的状态。常用的做法是将玩家的状态信息保存在共享内存中,重启时加载共享内存进行恢复。 共享...

MIT 6.824 学习笔记(四)

本系列文章是对 MIT 6.824 课程的学习笔记。 ZooKeeper Abstract ZooKeeper 旨在提供简单高效的内核以供客户端实现更复杂的 coordination primitives。In addition to the wait-free property, ZooKeeper provides a per client guarantee of FIFO ex...