Tags

C++

std::chrono in plain words, part 1

之前断断续续使用过chrono中的方法, 对于其中的概念总是一知半解, 导致每次查cppreference总是抓不到重点. 这次就试着用直白的语言, 描述下chrono的概念和原理. 这一篇主要着重于介绍chrono的核心, duration.

thrift compact protocol

我们代码里之前升级了fbthrift,客户端使用的channel类型从HeaderClientChannel换成了RocketClientChannel,默认是使用CompactProtocol,然后通过tcpdump抓包看了眼RPC层发送的数据,发现已经完全看不懂了,正好借此机会梳理一下。

fbthrift start-up and tear-down

最近看了下在退出服务时在一些极端case下出现core的问题,顺便也重新梳理下fbthrift的启动和停止流程。在我们的一个服务进程中,会启动多个ThriftServer,他们的IO线程池和工作线程池是共享的,除了RPC Server对外暴露接口之外,当接收到一个RPC请求时,可能会调用服务进程中的其他组件(比如...

Back to Top ↑

RocksDB

RocksDB Iterator Internal, part 3

RocksDB Iterator系列的最后一篇,看一看SST文件的格式,以及基于SST的迭代器是如何工作的。

RocksDB Iterator Internal, part 2

书接上篇,本文会分析MergingIterator内部是如何通过最小堆来保证迭代器输出的数据有序的。

RocksDB Iterator Internal, part 1

Nebula里面的二级索引都是基于kv形式实现的,对索引而言,最重要的就是需要保证有序,然而RocksDB官方wiki一直对于使用Iterator的参数语焉不详。我在之前的博客中大概说明了相关参数的作用,但没有详细结合代码解释其原理,这次就重新整理一下。

Back to Top ↑

TLA+

Snapshot Isolation in TLA+

坦率来说,这次入坑TLA+的主要目的就是为了能够试着验证快照隔离。啃了大半本Practical TLA+,看了不少其他人的例子,自己也尝试写了些spec,仍然只能说勉强入门了。在网上能找到的大多数事务相关的spec都是TLA+直接实现的,目前对于我来说未免还是太困难了点。因此这篇文章,会通过TLA+的伪代码语言P...

Conflict Serializability and View Serializability

最近在看SnapshotIsolation的形式化验证,学习到了两个新概念Conflict Serializability和View Serializability。回顾下可串行化:多个事务执行的结果和这些事务按某种串行执行的结果相同。然后我们分别看下这两种串行化的概念。

2PC in TLA+, step 2

在上一篇里我们实现了一个最简单的2PC,其中无论RM还是TM都不会crash。在这一篇中我们会引入RM随时可能crash的情形,看看需要对2PC的实现进行多少修整。

2PC in TLA+, step 1

2PC广泛运用于各种分布式系统,然而就是这样一个看似平平无奇的算法,想要正确实现,绝不是一件容易的事情。这个系列应该会陆续写三篇,第一篇主要会在TLA+中描述一个简单的2PC算法。

Back to Top ↑

PlusCal

Snapshot Isolation in TLA+

坦率来说,这次入坑TLA+的主要目的就是为了能够试着验证快照隔离。啃了大半本Practical TLA+,看了不少其他人的例子,自己也尝试写了些spec,仍然只能说勉强入门了。在网上能找到的大多数事务相关的spec都是TLA+直接实现的,目前对于我来说未免还是太困难了点。因此这篇文章,会通过TLA+的伪代码语言P...

Conflict Serializability and View Serializability

最近在看SnapshotIsolation的形式化验证,学习到了两个新概念Conflict Serializability和View Serializability。回顾下可串行化:多个事务执行的结果和这些事务按某种串行执行的结果相同。然后我们分别看下这两种串行化的概念。

2PC in TLA+, step 2

在上一篇里我们实现了一个最简单的2PC,其中无论RM还是TM都不会crash。在这一篇中我们会引入RM随时可能crash的情形,看看需要对2PC的实现进行多少修整。

2PC in TLA+, step 1

2PC广泛运用于各种分布式系统,然而就是这样一个看似平平无奇的算法,想要正确实现,绝不是一件容易的事情。这个系列应该会陆续写三篇,第一篇主要会在TLA+中描述一个简单的2PC算法。

Back to Top ↑

Concurrency

Distributed lock - part 3

前两篇我们大概讲述了分布式锁的原理和实现,以及围绕Redlock展开的争论。那么这一篇,我们会用TLA+描述一个简单的分布式锁,以及Martin Kleppmann提出的Fencing Token能否解决NPC(Network delay, Process pause, Clock drift)导致分布式锁共识失...

Distributed lock - part 1

最近看了一些关于分布式锁的文章,很有意思,进行一下总结梳理。今天这一篇,我们会聚焦于为什么需要分布式锁,分布式锁能够保证什么,以及常见的分布式锁实现方式。

Back to Top ↑

Transaction

Snapshot Isolation in TLA+

坦率来说,这次入坑TLA+的主要目的就是为了能够试着验证快照隔离。啃了大半本Practical TLA+,看了不少其他人的例子,自己也尝试写了些spec,仍然只能说勉强入门了。在网上能找到的大多数事务相关的spec都是TLA+直接实现的,目前对于我来说未免还是太困难了点。因此这篇文章,会通过TLA+的伪代码语言P...

Conflict Serializability and View Serializability

最近在看SnapshotIsolation的形式化验证,学习到了两个新概念Conflict Serializability和View Serializability。回顾下可串行化:多个事务执行的结果和这些事务按某种串行执行的结果相同。然后我们分别看下这两种串行化的概念。

2PC in TLA+, step 2

在上一篇里我们实现了一个最简单的2PC,其中无论RM还是TM都不会crash。在这一篇中我们会引入RM随时可能crash的情形,看看需要对2PC的实现进行多少修整。

2PC in TLA+, step 1

2PC广泛运用于各种分布式系统,然而就是这样一个看似平平无奇的算法,想要正确实现,绝不是一件容易的事情。这个系列应该会陆续写三篇,第一篇主要会在TLA+中描述一个简单的2PC算法。

Back to Top ↑

folly

Back to Top ↑

LDBC

folly::Executor::KeepAlive

之前一直没有总结过Executor中的KeepAlive,最近因为工作中使用Executor又碰到了一些问题,趁热打铁一下。

Buggy folly::RCU

最近忙的焦头烂额,只能匆匆更新一篇最近发现的folly中RCU的bug。不会对RCU做过多详细介绍,只会大致分析folly中RCU的实现,以及这个bug是如何造成的。

LDBC Social Network Benchmark, part 2

继续介绍LDBC Social Network Benchmark,这一篇我们主要介绍SNB Workload里的各个Query是如何生成的,以及在性能测试中Driver是如何执行Workload。

Back to Top ↑

Consensus

Distributed lock - part 3

前两篇我们大概讲述了分布式锁的原理和实现,以及围绕Redlock展开的争论。那么这一篇,我们会用TLA+描述一个简单的分布式锁,以及Martin Kleppmann提出的Fencing Token能否解决NPC(Network delay, Process pause, Clock drift)导致分布式锁共识失...

Distributed lock - part 1

最近看了一些关于分布式锁的文章,很有意思,进行一下总结梳理。今天这一篇,我们会聚焦于为什么需要分布式锁,分布式锁能够保证什么,以及常见的分布式锁实现方式。

Back to Top ↑

async

Back to Top ↑

fbthrift

thrift compact protocol

我们代码里之前升级了fbthrift,客户端使用的channel类型从HeaderClientChannel换成了RocketClientChannel,默认是使用CompactProtocol,然后通过tcpdump抓包看了眼RPC层发送的数据,发现已经完全看不懂了,正好借此机会梳理一下。

fbthrift start-up and tear-down

最近看了下在退出服务时在一些极端case下出现core的问题,顺便也重新梳理下fbthrift的启动和停止流程。在我们的一个服务进程中,会启动多个ThriftServer,他们的IO线程池和工作线程池是共享的,除了RPC Server对外暴露接口之外,当接收到一个RPC请求时,可能会调用服务进程中的其他组件(比如...

Back to Top ↑

杂七杂八

小鸭子惨死记

上周末带可可去了一趟玉渊潭,看到了让我难忘的一幕。

Back to Top ↑

Database

Back to Top ↑

Velox

Velox lifecycle

目前项目里采用了类似Velox的运行框架,其中出现了特别多问题。这里会总结Velox中最重要的三个类Task,Driver,Operator的生命周期。

Back to Top ↑

Concurency

Velox lifecycle

目前项目里采用了类似Velox的运行框架,其中出现了特别多问题。这里会总结Velox中最重要的三个类Task,Driver,Operator的生命周期。

Back to Top ↑

DuckDB

DuckDB Runtime

大致总结了下DuckDB的执行流程。注意全文中算子和Operator是同义词。

Back to Top ↑

thrift

thrift compact protocol

我们代码里之前升级了fbthrift,客户端使用的channel类型从HeaderClientChannel换成了RocketClientChannel,默认是使用CompactProtocol,然后通过tcpdump抓包看了眼RPC层发送的数据,发现已经完全看不懂了,正好借此机会梳理一下。

Back to Top ↑

SIMD

Back to Top ↑

linux

Back to Top ↑

Redis

Distributed lock - part 1

最近看了一些关于分布式锁的文章,很有意思,进行一下总结梳理。今天这一篇,我们会聚焦于为什么需要分布式锁,分布式锁能够保证什么,以及常见的分布式锁实现方式。

Back to Top ↑

Factorization

Back to Top ↑

Join

Back to Top ↑

Debug

Back to Top ↑