MIT6.824 2022 Raft Lab2C Log Compaction

介绍 对Raft Figure2 中需要持久化的字段进行保存。 完成persist()和readPersist()函数,编码方式参照注释 优化nextIndex[]回退方式,否则无法通过所有测试 提示: ...

2023-03-16 19:34 · 3 min · 1309 words · Reid

MIT6.824 2022 Raft Lab2D Log Persistence

介绍 snapshot是状态机某一时刻的副本,具体格式依赖存储引擎的实现,比如说:B+树、LSM、哈希表等,6.824是实现一个键值数据库,所以我们采用的是哈希表,在Lab 3可以看到实现。 ...

2023-03-16 19:34 · 6 min · 2536 words · Reid

MIT6.824 2022 Raft 0 介绍

前言 论文 博士论文 博士论文翻译 官网 动画展示 Students’ Guide to Raft (重要) MIT6.824 本篇是实验的前言, 先对论文里面提到的RPC做个大概的梳理和介绍。 Raft 原理可以参考这篇Raft Figure2 Raft 实现的核心在这个图,想要正确实现Raft 必须对这个图有深刻理解,在这里我们对图上的各个RPC 进行介绍和阐述。 ...

2023-03-16 19:34 · 11 min · 5011 words · Reid

MIT6.824 2022 Raft Lab2A Leader Election

介绍 查看Raft0 流程梳理 整体逻辑, 从 ticker goroutine 开始, 集群开始的时候,所有节点均为Follower, 它们依靠ticker()成为Candidate。ticker 协程会定期收到两个 timer 的到期事件,如果是 election timer 到期,则发起一轮选举;如果是 heartbeat timer 到期且节点是 leader,则发起一轮心跳。 ...

2023-03-16 19:34 · 6 min · 2691 words · Reid

MIT6.824 2022 Raft Lab2B Log Replication

流程梳理 相关的RPC 在Raft0 中已经介绍, 这里不再赘述。 启动的Goroutine: ticker 一个,用于监听 Election Timeout 或者Heartbeat Timeout applier 一个,监听 leader commit 之后,把log 发送到ApplyCh,然后从applyCh 中持久化到本地 replicator n-1 个,每一个对应一个 peer。监听心跳广播命令,仅在节点为 Leader 时工作, 唤醒条件变量。接收到命令后,向对应的 peer 发送 AppendEntries RPC。 日志结构 ...

2023-03-16 19:34 · 14 min · 6794 words · Reid

Go Function Option 函数选项模式

介绍 Go 语言没有构造函数,一般通过定义 New 函数来充当构造函数。然而,如果结构有较多字段,要初始化这些字段,有很多种方式,但有一种方式认为是最好的,这就是函数式选项模式(Functional Options Pattern)。 ...

2023-03-16 19:34 · 4 min · 1852 words · Reid

Spark Join 原理详解

介绍 Join大致包括三个要素:Join方式、Join条件以及过滤条件。其中过滤条件也可以通过AND语句放在Join条件中。 Spark支持的Join 包括: ...

2023-03-16 19:34 · 8 min · 3766 words · Reid

Http 502 问题 排查

前言 刚工作那会,有一次,上游调用我服务的老哥说,你的服务报"502错误了,快去看看是为什么吧"。 当时那个服务里正好有个调用日志,平时会记录各种200,4xx状态码的信息。于是我跑到服务日志里去搜索了一下502这个数字,毫无发现。于是跟老哥说,"服务日志里并没有502的记录,你是不是搞错啦?" ...

2023-03-16 19:34 · 10 min · 4703 words · Reid

Http长连接和TCP长连接的区别

介绍 事实上,这两个完全是两样不同东西,实现的层面也不同: HTTP 的 Keep-Alive,是由应用层(用户态) 实现的,称为 HTTP 长连接; TCP 的 Keepalive,是由 TCP 层(内核态) 实现的,称为 TCP 保活机制; 接下来,分别说说它们。 ...

2023-03-16 19:34 · 4 min · 1768 words · Reid

Raft 介绍

1. Raft 算法简介 1.1 Raft 背景 在分布式系统中,一致性算法至关重要。在所有一致性算法中,Paxos 最负盛名,它由莱斯利·兰伯特(Leslie Lamport)于 1990 年提出,是一种基于消息传递的一致性算法,被认为是类似算法中最有效的。 ...

2023-03-16 19:34 · 25 min · 12051 words · Reid