Eric.Yao

Thinking will not overcome fear but action will.

DDD 战术设计总结

A Summary of DDD Tactical Design

目标 文本偏战术设计,目标有以下两点:(对战略设计感兴趣的话,可以参考文末的拓展阅读) 了解 DDD:你可以了解 DDD 概念,并看懂大部分 DDD 的项目代码; 落地 DDD:你可以了解如何用 DDD 思想来建模、落地项目,并了解所需注意的事项与规范; 前言 Eric Evans 于 2003 年出版了《领域驱动设计:软件核心复杂性应对之道》,在书...

时序数据库——An Overview

A Overview of Time Series Database

TL;DR; 本文介绍常见时序数据库的基本架构,并以 InfluxDB 为例子介绍其存储模型及存储引擎的原理。最后介绍公司的 metrics 常见写入及读取操作。通过本文,你可以对时序数据库的原理有个初步了解,并可以对查询操作得心应手。 简介 基本概念 时序数据库是处理时序数据最优的数据库类型,而时序数据是随时间变化而被监控,跟踪,降采样,聚合的指标数据和事件。 为什么需要时...

信息流系统设计

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 是一个在无界和有界数据流上进行状态计算的框架和分布式处理引擎。 ...