<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Distributed-System on Q先生的世界</title>
		<link>https://qianzhou.tech/tags/distributed-system/</link>
		<description>Recent content in Distributed-System on Q先生的世界</description>
		<generator>Hugo</generator>
		<language>en-us</language>
		
		
		
		
			<lastBuildDate>Sun, 10 Mar 2024 00:00:00 +0000</lastBuildDate>
		
			<atom:link href="https://qianzhou.tech/tags/distributed-system/index.xml" rel="self" type="application/rss+xml" />
			<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>
			<item>
				<title>经典算法深度解析｜Raft：从复制状态机到领导者选举、日志复制与线性一致性</title>
				<link>https://qianzhou.tech/2024/01/07/raft/</link>
				<pubDate>Sun, 07 Jan 2024 00:00:00 +0000</pubDate>
				<guid>https://qianzhou.tech/2024/01/07/raft/</guid>
				<description>&lt;h1 id=&#34;经典算法深度解析raft从复制状态机到领导者选举日志复制与线性一致性&#34;&gt;经典算法深度解析｜Raft：从复制状态机到领导者选举、日志复制与线性一致性&lt;/h1&gt;&#xA;&lt;p&gt;如果你学过分布式系统，大概率已经反复看到过这样一句话：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;共识很难，而 Raft 的目标是把它讲清楚。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;这句话并不只是宣传语。&lt;/p&gt;&#xA;&lt;p&gt;在很长一段时间里，很多工程师第一次接触共识算法时，面对的往往是 Paxos。一方面，Paxos 在理论上极其重要；另一方面，它对很多初学者来说，确实不太“顺手”。不是因为它不严谨，而是因为它的叙述方式更偏证明导向，系统工程视角不够直接。于是很多人学完以后，依然很难回答下面这些问题：&lt;/p&gt;</description>
			</item>
			<item>
				<title>BoltDB 源码分析（三）：提交、freelist 与崩溃恢复</title>
				<link>https://qianzhou.tech/2023/12/31/boltdb-source-part-3/</link>
				<pubDate>Sun, 31 Dec 2023 00:00:00 +0000</pubDate>
				<guid>https://qianzhou.tech/2023/12/31/boltdb-source-part-3/</guid>
				<description>&lt;h1 id=&#34;boltdb-源码分析三提交freelist-与崩溃恢复&#34;&gt;BoltDB 源码分析（三）：提交、freelist 与崩溃恢复&lt;/h1&gt;&#xA;&lt;p&gt;前两篇我们已经把静态结构拆开了：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;DB&lt;/code&gt;、&lt;code&gt;Tx&lt;/code&gt;、&lt;code&gt;meta&lt;/code&gt;、&lt;code&gt;mmap&lt;/code&gt; 如何搭起运行时框架&lt;/li&gt;&#xA;&lt;li&gt;page、node、Bucket、Cursor 如何表达一棵可读可写的 B+Tree&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;最后这一篇进入 BoltDB 最有“数据库味”的部分：&lt;/p&gt;</description>
			</item>
			<item>
				<title>BoltDB 源码分析（二）：B&#43;Tree、Bucket 与 Cursor</title>
				<link>https://qianzhou.tech/2023/12/24/boltdb-source-part-2/</link>
				<pubDate>Sun, 24 Dec 2023 00:00:00 +0000</pubDate>
				<guid>https://qianzhou.tech/2023/12/24/boltdb-source-part-2/</guid>
				<description>&lt;h1 id=&#34;boltdb-源码分析二btreebucket-与-cursor&#34;&gt;BoltDB 源码分析（二）：B+Tree、Bucket 与 Cursor&lt;/h1&gt;&#xA;&lt;p&gt;上一篇我们把外层地基搭起来了：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;DB&lt;/code&gt; 如何管理文件、mmap 和事务&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;meta&lt;/code&gt; 如何定义整个数据库的当前版本&lt;/li&gt;&#xA;&lt;li&gt;只读事务为什么只是拿一个 root 视图&lt;/li&gt;&#xA;&lt;li&gt;写事务为什么必须单线程串行&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;这一篇我们进入真正存数据的地方：B+Tree 本体。&lt;/p&gt;</description>
			</item>
			<item>
				<title>BoltDB 源码分析（一）：事务、mmap 与文件格式</title>
				<link>https://qianzhou.tech/2023/11/26/boltdb-source-part-1/</link>
				<pubDate>Sun, 26 Nov 2023 00:00:00 +0000</pubDate>
				<guid>https://qianzhou.tech/2023/11/26/boltdb-source-part-1/</guid>
				<description>&lt;h1 id=&#34;boltdb-源码分析一事务mmap-与文件格式&#34;&gt;BoltDB 源码分析（一）：事务、mmap 与文件格式&lt;/h1&gt;&#xA;&lt;p&gt;很多人第一次接触 BoltDB，通常是因为 etcd 或者某个 Go 项目里出现了它的名字。再进一步，大家很快会记住几个标签：&lt;/p&gt;</description>
			</item>
			<item>
				<title>经典论文深度解析｜Time, Clocks, and the Ordering of Events in a Distributed System</title>
				<link>https://qianzhou.tech/2023/10/22/time-clocks-and-the-ordering-of-events/</link>
				<pubDate>Sun, 22 Oct 2023 00:00:00 +0000</pubDate>
				<guid>https://qianzhou.tech/2023/10/22/time-clocks-and-the-ordering-of-events/</guid>
				<description>&lt;h2 id=&#34;为什么这篇论文值得反复读&#34;&gt;为什么这篇论文值得反复读&lt;/h2&gt;&#xA;&lt;p&gt;如果只能选一篇真正奠定分布式系统思维方式的论文，Leslie Lamport 在 1978 年发表的 &lt;em&gt;Time, Clocks, and the Ordering of Events in a Distributed System&lt;/em&gt; 一定在候选名单里，而且大概率排在最前面。&lt;/p&gt;&#xA;&lt;p&gt;这篇论文的伟大，不在于它发明了一个复杂算法，而在于它把一个很多人直觉上模糊理解的问题，第一次讲清楚了：&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
