<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Storage on Q先生的世界</title>
		<link>https://qianzhou.tech/tags/storage/</link>
		<description>Recent content in Storage on Q先生的世界</description>
		<generator>Hugo</generator>
		<language>en-us</language>
		
		
		
		
			<lastBuildDate>Sun, 12 May 2024 00:00:00 +0000</lastBuildDate>
		
			<atom:link href="https://qianzhou.tech/tags/storage/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>经典存储对比｜LMDB 与 BoltDB：它们如何利用 mmap，以及为什么一个更偏 COW、一个更强调页式事务</title>
				<link>https://qianzhou.tech/2024/05/12/lmdb-vs-boltdb/</link>
				<pubDate>Sun, 12 May 2024 00:00:00 +0000</pubDate>
				<guid>https://qianzhou.tech/2024/05/12/lmdb-vs-boltdb/</guid>
				<description>&lt;h1 id=&#34;经典存储对比lmdb-与-boltdb它们如何利用-mmap以及为什么一个更偏-cow一个更强调页式事务&#34;&gt;经典存储对比｜LMDB 与 BoltDB：它们如何利用 mmap，以及为什么一个更偏 COW、一个更强调页式事务&lt;/h1&gt;&#xA;&lt;p&gt;前面两篇文章，我们已经分别把两个关键背景讲开了：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;mmap&lt;/code&gt; 到底是什么，它为什么既诱人又危险&lt;/li&gt;&#xA;&lt;li&gt;BoltDB 是怎么围绕 &lt;code&gt;mmap&lt;/code&gt;、页结构和事务组织整个数据库运行时的&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;如果再往前走一步，一个很自然的问题就是：&lt;/p&gt;</description>
			</item>
			<item>
				<title>经典系统排障｜FUSE 调试与排障：getattr 风暴、缓存、并发、权限与 macOS/Linux 差异</title>
				<link>https://qianzhou.tech/2024/04/14/fuse-debugging-and-troubleshooting/</link>
				<pubDate>Sun, 14 Apr 2024 00:00:00 +0000</pubDate>
				<guid>https://qianzhou.tech/2024/04/14/fuse-debugging-and-troubleshooting/</guid>
				<description>&lt;h1 id=&#34;经典系统排障fuse-调试与排障getattr-风暴缓存并发权限与-macoslinux-差异&#34;&gt;经典系统排障｜FUSE 调试与排障：getattr 风暴、缓存、并发、权限与 macOS/Linux 差异&lt;/h1&gt;&#xA;&lt;p&gt;上一篇文章，我们已经把最小 Go 文件系统接到了 FUSE 上，并真正走通了 &lt;code&gt;ls&lt;/code&gt;、&lt;code&gt;cat&lt;/code&gt;、&lt;code&gt;touch&lt;/code&gt; 这些最基本的链路。&lt;/p&gt;</description>
			</item>
			<item>
				<title>经典系统实践｜把 Go 文件系统接到 FUSE：真正挂载起来，并走通 ls/cat/touch 全链路</title>
				<link>https://qianzhou.tech/2024/04/07/mount-go-filesystem-with-fuse/</link>
				<pubDate>Sun, 07 Apr 2024 00:00:00 +0000</pubDate>
				<guid>https://qianzhou.tech/2024/04/07/mount-go-filesystem-with-fuse/</guid>
				<description>&lt;h1 id=&#34;经典系统实践把-go-文件系统接到-fuse真正挂载起来并走通-lscattouch-全链路&#34;&gt;经典系统实践｜把 Go 文件系统接到 FUSE：真正挂载起来，并走通 ls/cat/touch 全链路&lt;/h1&gt;&#xA;&lt;p&gt;前面两篇，我们已经把这个最小 Go 文件系统做到了两个层次：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;先实现了最小 on-disk filesystem，包含 superblock、inode、bitmap、directory entry 和 path walk&lt;/li&gt;&#xA;&lt;li&gt;再补了一层最小 WAL / journal，让它在崩溃恢复语义上不再完全裸奔&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;到这里，其实你已经有了一个“能工作的本地文件系统引擎”。&lt;/p&gt;</description>
			</item>
			<item>
				<title>经典系统实践｜给 Go 文件系统加上最小 WAL / Journal：事务边界、Redo Log 与崩溃恢复</title>
				<link>https://qianzhou.tech/2024/03/31/add-wal-to-go-filesystem/</link>
				<pubDate>Sun, 31 Mar 2024 00:00:00 +0000</pubDate>
				<guid>https://qianzhou.tech/2024/03/31/add-wal-to-go-filesystem/</guid>
				<description>&lt;h1 id=&#34;经典系统实践给-go-文件系统加上最小-wal--journal事务边界redo-log-与崩溃恢复&#34;&gt;经典系统实践｜给 Go 文件系统加上最小 WAL / Journal：事务边界、Redo Log 与崩溃恢复&lt;/h1&gt;&#xA;&lt;p&gt;上一篇文章，我们已经用 Go 搭了一个最小可理解文件系统骨架。&lt;/p&gt;&#xA;&lt;p&gt;它已经有了：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;superblock&lt;/li&gt;&#xA;&lt;li&gt;inode table&lt;/li&gt;&#xA;&lt;li&gt;block bitmap&lt;/li&gt;&#xA;&lt;li&gt;data blocks&lt;/li&gt;&#xA;&lt;li&gt;目录项&lt;/li&gt;&#xA;&lt;li&gt;路径查找&lt;/li&gt;&#xA;&lt;li&gt;最朴素的 &lt;code&gt;create/read/write/delete&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;如果只在正常路径上跑，这个 toy filesystem 已经能说明很多问题。&lt;/p&gt;</description>
			</item>
			<item>
				<title>经典系统实践｜用 Go 实现一个最小可理解文件系统：Superblock、inode、Bitmap 与目录树</title>
				<link>https://qianzhou.tech/2024/03/24/build-a-filesystem-in-go/</link>
				<pubDate>Sun, 24 Mar 2024 00:00:00 +0000</pubDate>
				<guid>https://qianzhou.tech/2024/03/24/build-a-filesystem-in-go/</guid>
				<description>&lt;h1 id=&#34;经典系统实践用-go-实现一个最小可理解文件系统superblockinodebitmap-与目录树&#34;&gt;经典系统实践｜用 Go 实现一个最小可理解文件系统：Superblock、inode、Bitmap 与目录树&lt;/h1&gt;&#xA;&lt;p&gt;上一篇文章，我们从对象存储研发工程师的角度，把文件系统里最容易在生产中踩坑的几个语义拆了一遍：&lt;/p&gt;</description>
			</item>
			<item>
				<title>经典系统深度解析｜从对象存储研发工程师视角看文件系统：VFS、Page Cache、Journal 与崩溃一致性</title>
				<link>https://qianzhou.tech/2024/03/17/filesystem-from-object-storage-perspective/</link>
				<pubDate>Sun, 17 Mar 2024 00:00:00 +0000</pubDate>
				<guid>https://qianzhou.tech/2024/03/17/filesystem-from-object-storage-perspective/</guid>
				<description>&lt;h1 id=&#34;经典系统深度解析从对象存储研发工程师视角看文件系统vfspage-cachejournal-与崩溃一致性&#34;&gt;经典系统深度解析｜从对象存储研发工程师视角看文件系统：VFS、Page Cache、Journal 与崩溃一致性&lt;/h1&gt;&#xA;&lt;p&gt;很多工程师做对象存储久了，会逐渐形成一种错觉：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;我们做的是 object，不是 file&lt;/li&gt;&#xA;&lt;li&gt;底层文件系统只是一个“本地持久化容器”&lt;/li&gt;&#xA;&lt;li&gt;真正复杂的是副本、纠删码、数据分片、元数据服务和一致性协议&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;这几个判断都不能说错，但它们很容易让人忽略一个事实：&lt;/p&gt;</description>
			</item>
			<item>
				<title>经典算法深度解析｜纠删码（架构选型篇）：什么时候该用三副本、RS、LRC，什么时候根本不该上 EC</title>
				<link>https://qianzhou.tech/2024/03/10/erasure-coding-architecture-selection/</link>
				<pubDate>Sun, 10 Mar 2024 00:00:00 +0000</pubDate>
				<guid>https://qianzhou.tech/2024/03/10/erasure-coding-architecture-selection/</guid>
				<description>&lt;h1 id=&#34;经典算法深度解析纠删码架构选型篇什么时候该用三副本rslrc什么时候根本不该上-ec&#34;&gt;经典算法深度解析｜纠删码（架构选型篇）：什么时候该用三副本、RS、LRC，什么时候根本不该上 EC&lt;/h1&gt;&#xA;&lt;p&gt;到了这一组文章的这个阶段，真正重要的问题已经不再是：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;RS 是怎么编码的&lt;/li&gt;&#xA;&lt;li&gt;repair 为什么会打满网络&lt;/li&gt;&#xA;&lt;li&gt;partial write 为什么会放大&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;而是一个更根本、也更接近架构评审会的问题：&lt;/p&gt;</description>
			</item>
			<item>
				<title>经典算法深度解析｜纠删码（案例排障篇）：repair 打满网络、degraded read 尾延迟飙升与 partial write 放大</title>
				<link>https://qianzhou.tech/2024/03/03/erasure-coding-troubleshooting-cases/</link>
				<pubDate>Sun, 03 Mar 2024 00:00:00 +0000</pubDate>
				<guid>https://qianzhou.tech/2024/03/03/erasure-coding-troubleshooting-cases/</guid>
				<description>&lt;h1 id=&#34;经典算法深度解析纠删码案例排障篇repair-打满网络degraded-read-尾延迟飙升与-partial-write-放大&#34;&gt;经典算法深度解析｜纠删码（案例排障篇）：repair 打满网络、degraded read 尾延迟飙升与 partial write 放大&lt;/h1&gt;&#xA;&lt;p&gt;前面的几篇文章，我们已经把 EC 从原理、实现、性能一路讲得比较完整。&lt;/p&gt;&#xA;&lt;p&gt;但只要它真的进了生产，最终最能教育人的往往不是公式，而是事故。&lt;/p&gt;</description>
			</item>
			<item>
				<title>经典算法深度解析｜纠删码（性能篇）：benchmark、NUMA、线程模型与 repair 限流</title>
				<link>https://qianzhou.tech/2024/02/25/erasure-coding-performance-tuning/</link>
				<pubDate>Sun, 25 Feb 2024 00:00:00 +0000</pubDate>
				<guid>https://qianzhou.tech/2024/02/25/erasure-coding-performance-tuning/</guid>
				<description>&lt;h1 id=&#34;经典算法深度解析纠删码性能篇benchmarknuma线程模型与-repair-限流&#34;&gt;经典算法深度解析｜纠删码（性能篇）：benchmark、NUMA、线程模型与 repair 限流&lt;/h1&gt;&#xA;&lt;p&gt;前面的几篇文章，已经把 EC 从原理一路讲到源码骨架。&lt;/p&gt;&#xA;&lt;p&gt;但真正把它跑在生产里以后，很多团队最后遇到的并不是“不会编码”，而是：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;为什么 benchmark 明明很好看，上线后吞吐还是上不去&lt;/li&gt;&#xA;&lt;li&gt;为什么 CPU 还有余量，延迟却已经开始恶化&lt;/li&gt;&#xA;&lt;li&gt;为什么 repair 一开，前台业务就被拖慢&lt;/li&gt;&#xA;&lt;li&gt;为什么同一段 EC 代码，在两台机器上表现差很多&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;这类问题说明你已经跨过“算法能不能工作”，开始进入另一层更现实的工作：&lt;/p&gt;</description>
			</item>
			<item>
				<title>经典算法深度解析｜纠删码（源码篇）：最小 RS encoder/decoder 与 read-modify-write 伪代码</title>
				<link>https://qianzhou.tech/2024/02/18/erasure-coding-source-walkthrough/</link>
				<pubDate>Sun, 18 Feb 2024 00:00:00 +0000</pubDate>
				<guid>https://qianzhou.tech/2024/02/18/erasure-coding-source-walkthrough/</guid>
				<description>&lt;h1 id=&#34;经典算法深度解析纠删码源码篇最小-rs-encoderdecoder-与-read-modify-write-伪代码&#34;&gt;经典算法深度解析｜纠删码（源码篇）：最小 RS encoder/decoder 与 read-modify-write 伪代码&lt;/h1&gt;&#xA;&lt;p&gt;前面的几篇文章，已经把纠删码讲到了实现层：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;为什么它在数学上成立&lt;/li&gt;&#xA;&lt;li&gt;为什么它在系统上会贵&lt;/li&gt;&#xA;&lt;li&gt;为什么不同系统会做出不同取舍&lt;/li&gt;&#xA;&lt;li&gt;为什么实现里会被 GF 运算、SIMD、full-stripe write 和 partial write 卡住&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;但很多工程师真正卡住的位置，其实还要再往下一层。&lt;/p&gt;</description>
			</item>
			<item>
				<title>经典算法深度解析｜纠删码（实现篇）：GF 运算、SIMD、full-stripe write 与小写更新路径</title>
				<link>https://qianzhou.tech/2024/02/11/erasure-coding-implementation-details/</link>
				<pubDate>Sun, 11 Feb 2024 00:00:00 +0000</pubDate>
				<guid>https://qianzhou.tech/2024/02/11/erasure-coding-implementation-details/</guid>
				<description>&lt;h1 id=&#34;经典算法深度解析纠删码实现篇gf-运算simdfull-stripe-write-与小写更新路径&#34;&gt;经典算法深度解析｜纠删码（实现篇）：GF 运算、SIMD、full-stripe write 与小写更新路径&lt;/h1&gt;&#xA;&lt;p&gt;前面的几篇文章，已经把纠删码的三个主要层次搭起来了：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;数学上为什么可行&lt;/li&gt;&#xA;&lt;li&gt;系统上为什么会贵&lt;/li&gt;&#xA;&lt;li&gt;不同存储系统为什么会做出不同取舍&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;但如果你真的开始写代码、接库、做 benchmark，很快会发现另一层现实：&lt;/p&gt;</description>
			</item>
			<item>
				<title>经典算法深度解析｜纠删码（实战篇）：Ceph、HDFS 与 Azure LRC 的实现取舍</title>
				<link>https://qianzhou.tech/2024/02/04/erasure-coding-in-practice/</link>
				<pubDate>Sun, 04 Feb 2024 00:00:00 +0000</pubDate>
				<guid>https://qianzhou.tech/2024/02/04/erasure-coding-in-practice/</guid>
				<description>&lt;h1 id=&#34;经典算法深度解析纠删码实战篇cephhdfs-与-azure-lrc-的实现取舍&#34;&gt;经典算法深度解析｜纠删码（实战篇）：Ceph、HDFS 与 Azure LRC 的实现取舍&lt;/h1&gt;&#xA;&lt;p&gt;前面三篇我们一直在讲两层内容：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;EC 在数学上为什么成立&lt;/li&gt;&#xA;&lt;li&gt;EC 在工程上为什么会贵&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;但真正把 EC 用到系统里以后，你会发现还有第三层现实：&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;同样都是纠删码，不同存储系统会做出完全不同的设计。&lt;/strong&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>经典算法深度解析｜纠删码（三）：条带布局、故障域、降级读与分布式存储里的工程落地</title>
				<link>https://qianzhou.tech/2024/01/28/erasure-coding-part-3/</link>
				<pubDate>Sun, 28 Jan 2024 00:00:00 +0000</pubDate>
				<guid>https://qianzhou.tech/2024/01/28/erasure-coding-part-3/</guid>
				<description>&lt;h1 id=&#34;经典算法深度解析纠删码三条带布局故障域降级读与分布式存储里的工程落地&#34;&gt;经典算法深度解析｜纠删码（三）：条带布局、故障域、降级读与分布式存储里的工程落地&lt;/h1&gt;&#xA;&lt;p&gt;前两篇我们分别解决了两类问题：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;EC 为什么成立，它的编码基础和 MDS 本质是什么&lt;/li&gt;&#xA;&lt;li&gt;EC 为什么昂贵，恢复带宽、更新放大和局部修复优化到底在讲什么&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;系列文章：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://qianzhou.tech/2024/01/14/erasure-coding-part-1/&#34;&gt;纠删码（一）：从多副本到 Reed-Solomon、有限域与 MDS 本质&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://qianzhou.tech/2024/01/21/erasure-coding-part-2/&#34;&gt;纠删码（二）：故障恢复、更新放大、修复带宽与 LRC 演进&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://qianzhou.tech/2024/01/28/erasure-coding-part-3/&#34;&gt;纠删码（三）：条带布局、故障域、降级读与分布式存储里的工程落地&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://qianzhou.tech/2024/02/04/erasure-coding-in-practice/&#34;&gt;纠删码（实战篇）：Ceph、HDFS 与 Azure LRC 的实现取舍&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://qianzhou.tech/2024/02/11/erasure-coding-implementation-details/&#34;&gt;纠删码（实现篇）：GF 运算、SIMD、full-stripe write 与小写更新路径&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://qianzhou.tech/2024/02/18/erasure-coding-source-walkthrough/&#34;&gt;纠删码（源码篇）：最小 RS encoder/decoder 与 read-modify-write 伪代码&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://qianzhou.tech/2024/02/25/erasure-coding-performance-tuning/&#34;&gt;纠删码（性能篇）：benchmark、NUMA、线程模型与 repair 限流&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://qianzhou.tech/2024/03/03/erasure-coding-troubleshooting-cases/&#34;&gt;纠删码（案例排障篇）：repair 打满网络、degraded read 尾延迟飙升与 partial write 放大&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://qianzhou.tech/2024/03/10/erasure-coding-architecture-selection/&#34;&gt;纠删码（架构选型篇）：什么时候该用三副本、RS、LRC，什么时候根本不该上 EC&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;讲到这里，如果你站在“算法理解”的角度，其实已经能把 Reed-Solomon 说清楚了。&lt;/p&gt;</description>
			</item>
			<item>
				<title>经典算法深度解析｜纠删码（二）：故障恢复、更新放大、修复带宽与 LRC 演进</title>
				<link>https://qianzhou.tech/2024/01/21/erasure-coding-part-2/</link>
				<pubDate>Sun, 21 Jan 2024 00:00:00 +0000</pubDate>
				<guid>https://qianzhou.tech/2024/01/21/erasure-coding-part-2/</guid>
				<description>&lt;h1 id=&#34;经典算法深度解析纠删码二故障恢复更新放大修复带宽与-lrc-演进&#34;&gt;经典算法深度解析｜纠删码（二）：故障恢复、更新放大、修复带宽与 LRC 演进&lt;/h1&gt;&#xA;&lt;p&gt;上一篇我们把 EC 的理论骨架搭了起来：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;为什么要从多副本走向 &lt;code&gt;k+m&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;条带是什么&lt;/li&gt;&#xA;&lt;li&gt;Reed-Solomon 本质上是有限域上的线性编码&lt;/li&gt;&#xA;&lt;li&gt;MDS 的关键含义是任意 &lt;code&gt;k&lt;/code&gt; 个块都能恢复原始数据&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;系列文章：&lt;/p&gt;</description>
			</item>
			<item>
				<title>经典算法深度解析｜纠删码（一）：从多副本到 Reed-Solomon、有限域与 MDS 本质</title>
				<link>https://qianzhou.tech/2024/01/14/erasure-coding-part-1/</link>
				<pubDate>Sun, 14 Jan 2024 00:00:00 +0000</pubDate>
				<guid>https://qianzhou.tech/2024/01/14/erasure-coding-part-1/</guid>
				<description>&lt;h1 id=&#34;经典算法深度解析纠删码一从多副本到-reed-solomon有限域与-mds-本质&#34;&gt;经典算法深度解析｜纠删码（一）：从多副本到 Reed-Solomon、有限域与 MDS 本质&lt;/h1&gt;&#xA;&lt;p&gt;只要系统开始认真做存储，工程师迟早会面对一个非常现实的问题：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;数据必须可靠&lt;/li&gt;&#xA;&lt;li&gt;成本不能失控&lt;/li&gt;&#xA;&lt;li&gt;故障恢复不能太慢&lt;/li&gt;&#xA;&lt;li&gt;容量利用率还得说得过去&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;最直接的办法当然是多副本。&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
