跳至主要內容
《分布式系统设计模式》总结

《Patterns of Distributed Systems》这本书由 Unmesh Joshi 撰写,全面介绍了分布式系统中的各种模式。以下是对这本书的总结:

第一部分:概述

  • 为什么要分布式
    • 资源限制:CPU、内存、网络和磁盘是计算的基本资源,单服务器处理能力受这些资源上限限制,如网络带宽决定数据传输上限,磁盘有读写速度限制,内存限制可加载的数据量,CPU 处理能力有限。当请求数超过资源上限,请求需排队等待,影响系统吞吐量,因此需通过分布式利用多服务器资源。
    • 分区和复制:介绍了两种常见的分布式架构方式。一是分离业务逻辑和数据层,无状态部分暴露功能,有状态部分由数据库管理,通过水平扩展无状态服务处理更多请求,但存在数据库响应和连接处理问题,可通过添加缓存层缓解,但缓存不适用于所有情况。二是按领域边界分区,如微服务架构,不同领域有各自的软件系统,但共享基础设施组件仍可能面临类似问题。还强调了数据量和请求数增长导致的问题,以及处理数据时故障处理和复制的重要性。
    • 定义分布式系统:存储数据并在多服务器上作为多个进程运行,协调数据状态的软件系统。具有运行在多个进程、管理数据、通过消息传递通信、容忍部分故障等特点。
  • 模式概述
    • 介绍了分布式系统中的两种基本操作:分区和复制。以一个简单的数据记录在三个节点上的复制为例,阐述了在不同场景下如何保证数据的一致性和可用性。

pedrogao大约 23 分钟distributepatternpattern
工程师思考、做事闭环

关注核心竞争力,用思考找到技术价值再动手做事,而非关注代码/项目本身

  1. 项目背景
  • 为什么做这个项目?
  • 目标和路径是什么?
  • 其中技术亮点在哪里?
  • 取得了那些收益?
  1. 目标与评估
  • 可量化的目标是什么?
  • 实现这个系统的技术约束是什么?
  1. 技术方案

pedrogao大约 1 分钟engineeringguidingthking
跟着 ChatGPT 学 LSM Tree

用一种新的方式来学习 LSM Tree。

什么是 LSM Tree

一个老生常谈的话题

文心一言的解释是:

ChatGPT 的解释是:

综合来看,ChatGPT 的解释更加的直观,也更加符合工程师视角,而文心一言的解释更加适合做 PPT。

下面就跟随 ChatGPT 来学习 LSM Tree。

学习 LSM Tree

首先客套一下,提问:


pedrogao大约 15 分钟AIAIChatGPTLSM Tree
深入理解CRDT-基础篇

前言

CRDT 全称 convergent or commutative replicated data type (CRDT),是近年来分布式领域的新宠。

与其它分布式系统不同,CRDT 在设计上放弃了共识;这意味着一个 CRDT 副本执行操作时,完全无需与其它副本进行协商,大大提升了副本执行效率。

没有协商并不代表副本数据之间会有差异,CRDT 通过良好的数据结构设计来使所有副本最终达到一致,但前提是任何副本执行的操作都必须通过网络传输并应用到其它副本,即使这些操作到达时是乱序的,但最后的数据仍然保证一致。


pedrogao大约 14 分钟collaboratecrdt
distributed-kv 设计与实现

旨在探索分布式缓存的设计与实现

架构设计

目标

  • 支持大容量缓存、持久化,PB 级别;
  • 支持哈希槽分片,动态收缩;
  • 支持 List,Set,String,Hash,Sorted set 等数据结构;
  • 集成 Deno,支持脚本事务;
  • 使用简单,redis-cli 客户端可直接使用,直连代理节点;
  • 二次封装 redis 客户端,支持代理模式自动切换;

整体架构

distributed-kv 基于 Tikv 实现,并提供兼容 redis 数据结构的 API,支持基本 5 种基本类型数据结构,不支持 Pub/Sub,Pipeline 等高级特性,旨在探索超大容量缓存的架构实践。


pedrogao大约 8 分钟distributekvkv
diskqueue持久化队列设计演进

一步一步推导演进持久化磁盘队列的设计与实现。
在方向不明确,不够熟练的情况下,从 demo 做起,一步步学习先进的设计理念并付诸行动。


第一版,单文件持久化队列

  • 元数据、堆数据存储在一个文件中;
  • 元数据:记录读、写消费指针,队列大小;
  • 堆数据:item 长度、数据;
  • 元数据 + 堆数据单文件存储;

UML 类图:

读:

写:


pedrogao大约 2 分钟distributemqmqdiskqueue
2
3
4