<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Architecture - 标签 - 星河拾贝录</title><link>https://blog.liubang.cc/tags/architecture/</link><description>Architecture - 标签 - 星河拾贝录</description><generator>Hugo -- gohugo.io</generator><language>zh-CN</language><managingEditor>it.liubang@gmail.com (liubang)</managingEditor><webMaster>it.liubang@gmail.com (liubang)</webMaster><copyright>Copyright © 2019-2026 LiuBang. All Rights Reserved.</copyright><lastBuildDate>Sun, 24 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.liubang.cc/tags/architecture/" rel="self" type="application/rss+xml"/><item><title>MiniDFS 01: 架构与协议设计</title><link>https://blog.liubang.cc/minidfs/2026-05-24-minidfs-01-architecture/</link><pubDate>Sun, 24 May 2026 00:00:00 +0000</pubDate><author><name>liubang</name></author><guid>https://blog.liubang.cc/minidfs/2026-05-24-minidfs-01-architecture/</guid><description><![CDATA[<p>MiniDFS 是一个用 C++20 从零实现的简化版分布式文件系统。它不追求功能完整覆盖，而是聚焦分布式文件系统最核心的几个问题——元数据管理、数据分块与 Pipeline 复制、副本放置与容错——给出一个可以实际运行的实现，并在过程中深入理解每个设计决策背后的 tradeoff。</p>
<p>这篇文章是系列的入口。我会先讲为什么要造这个项目、它和 HDFS 的关系，然后给出整体架构，最后完整走一遍&quot;写入一个文件&quot;的端到端链路，让读者对后续每篇文章的位置有一个全局认知。</p>
<h2 id="为什么要自己实现一个分布式文件系统" class="headerLink">
    <a href="#%e4%b8%ba%e4%bb%80%e4%b9%88%e8%a6%81%e8%87%aa%e5%b7%b1%e5%ae%9e%e7%8e%b0%e4%b8%80%e4%b8%aa%e5%88%86%e5%b8%83%e5%bc%8f%e6%96%87%e4%bb%b6%e7%b3%bb%e7%bb%9f" class="header-mark"></a>为什么要自己实现一个分布式文件系统</h2><p>学习分布式系统最有效的方式是亲手实现一遍。阅读论文能理解设计意图，但只有真正写出能跑的代码，才会遇到论文中一笔带过的工程问题——事务边界怎么划、并发控制在哪一层做、心跳超时设多长才合理。</p>
<p>HDFS 的源码是 Java 实现，经过十余年演进，代码量庞大（核心模块超过 30 万行），HA、Federation、Erasure Coding 等高级特性与核心逻辑交织在一起，阅读门槛极高。MiniDFS 的目标是一个<strong>最小可运行闭环</strong>：保留 HDFS 的核心架构决策，砍掉所有非本质复杂度，把精力集中在真正重要的设计问题上。</p>
<h2 id="minidfs-vs-hdfs保留了什么砍掉了什么" class="headerLink">
    <a href="#minidfs-vs-hdfs%e4%bf%9d%e7%95%99%e4%ba%86%e4%bb%80%e4%b9%88%e7%a0%8d%e6%8e%89%e4%ba%86%e4%bb%80%e4%b9%88" class="header-mark"></a>MiniDFS vs HDFS：保留了什么，砍掉了什么</h2><p>MiniDFS 的设计哲学是「保留骨架，简化实现」。下面从两个维度做对比。</p>
<p><strong>保留的核心设计：</strong></p>
<p>单 NameNode + 多 DataNode 的 Master/Worker 架构；Block 分块存储 + Pipeline 链式复制；Rack-aware 副本放置策略；Lease 机制实现写互斥；Heartbeat + BlockReport 的注册与上报机制；Block 与 Replica 的双层状态机管理（<code>kAllocating → kCommitted → kDeleted</code> 和 <code>kWriting → kFinalized → kCorrupt → kDeleted</code>）。</p>
<p><strong>砍掉的特性：</strong></p>
<p>HA（Secondary NameNode / JournalNode / ZKFC）、Federation（多 Namespace）、Snapshot / Quota / ACL、Append / Truncate、Erasure Coding、Short-circuit Local Read、HDFS Balancer / Mover。这些特性各自重要，但它们本质上是在核心架构之上的增量演进，不影响对基本原理的理解。</p>]]></description></item></channel></rss>