Eric.Yao

Thinking will not overcome fear but action will.

信息流系统设计

Feed Architecture Design

信息流系统设计 TL;DR; 本文以关注流为例子,介绍了几种信息流的实现方案,并对比其优缺点,介绍了各自适合的应用场景。并归纳了信息流领域常见的幻读、不可重复读问题,参考数据库隔离级别实现的思路,提出对应的两个解决方案。 信息流(或称 Feed 流)这种功能在我们手机 APP 中几乎随处可见,最典型的就是微信朋友圈、Twitter 等。 但是对于推荐流跟关注流这两种 Feed ...

浅谈 Golang 编译原理及其应用

Golang Compilation Process - An Overview

浅谈 Golang 编译原理及其应用 TL;DR;本文简要介绍 Golang 编译的各个阶段干了什么,即从源文件到最终的机器码中间经历的过程。并从汇编代码、AST 入手介绍了相关的应用场景及实现原理。本文第一节深度参考了 解析器眼中的 Go 语言,也非常推荐有时间的读者阅读原文。 编译原理 编译器的前端一般承担着词法分析、语法分析、类型检查和中间代码生成几部分工作. 编译器后...

二分搜索,你还在用三个模版?一个就够了!

One Template For All Binary Search Problems

二分搜索,你还在用三个模版?一个就够了! One Template for All Binary Search Problems 背景 首先,面对二分搜索,我们往往会碰到以下疑问: left 和 right 初始值? 循环条件是 left < right 还是left <= right ? 如何更新left 和 ri...

GraphQL A Backend Engineer's Perspective

GraphQL A Backend Engineer's Perspective

GraphQL:A Backend Engineer’s Perspective TLDR;本文是一个对 BFF 思想的学习与调研,也对业界经常用来实现 BFF 的 GraphQL 进行一些介绍。本文重点在于对业界方案进行的调研与小结,并在文末总结一种可以实践的 BFF 思路。 概述 有些人觉得 GraphQL 与微服务思想相悖,其观点在于中心化与去中心化。 但本人认为,Gr...

从 Redlock 到共识算法

From Redlock to Consensus - A Deep Dive

从 Redlock 到共识算法 TL;DR; 本文从介绍 Redlock 开始,引出 DDIA 作者 Martin 对 Redlock 的批判、Relock 作者 antirez 的反驳,从中总结出实现一个分布式锁的核心难题。该难题可以归结为分布式一致性问题,并总结了解决分布式一致性问题的模型与算法。 Redlock 2016 年 2 月,为了规范各家对基于Redis的分布式锁...

优化程序性能

Chapter 5, Optimizing Program Performance - CSAPP Note

第五章 优化程序性能 0. 优化之路咋走? 首先需要知道优化之路可以怎么走,下面摘自 CMU 的公开课 slides。主要有两方面因素: 代码风格:良好的数据结构与算法思想,循环、变量等人为因素; 编译器与操作系统:了解编译器优化,从汇编、profile 等角度分析性能瓶颈,了解操作系统层面因素; 1. 量化程序性能 使用 CPE(Cycles Per Element)来量...

Elasticsearch 概览

Elasticsearch - An Overview

Elasticsearch - An Overview TL;DR; 本文从分布式架构、数据读写、应用场景对 Elasticsearch 做一个概括性介绍,让读者了解 ES 是什么,能在哪些场景应用,为什么 ES 这么快。 Introduction 这个世界已然被数据淹没,但是如果数据只是躺在磁盘里面根本就毫无用处。Elasticsearch(ES)是一个分布式、可扩展、文档存...

Flink 概览

Flink - An Overview

Flink - An Overview TL;DR 本文简要介绍了 Flink 的架构及提供的特性,梳理了流处理中几个关键概念,例如时间、窗口、流状态,并对比了流处理在一些应用场景下的优势。让读者了解,Flink 是什么,用 Flink 能做些什么。如有疏漏,欢迎指正。 Overview Apache Flink 是一个在无界和有界数据流上进行状态计算的框架和分布式处理引擎。 ...

BTree 索引原理及其应用

BTree in Storage Engine

BTree 索引原理及其应用 虽然写 BTree,但其实本章主要讨论其中一个优化的子集,即广泛使用的 B+Tree。 1. BTree 1.1. BTree 结构 1.2. BTree 索引特性 例如存在如下的表 ID | first_name | last_name | Class | Position | ssn | -----------------...

索引结构——LSM-Tree与B-tree

Introduction of LSM-Tree and B-tree

索引结构 本文介绍目前两种流行的索引结构,作为 DDIA 第三章前半部分的总结。 1. B-Tree 索引 1.1. 简介 B-tree 是目前最广泛使用的一种索引结构(B+ tree 是 B-tree 的一种优化版)。 可以说,B-tree 是广义上的二分搜索树,只不过每个节点(node)可以有 B 个子节点。 N 个数据通过 B-tree 组织,可以达到 O(logN) ...