分布式系统入门介绍
本文特别写给想要学习分布式系统但是还不知道该如何下手的读者,宽泛并点到为止的介绍了我个人对于分布式系统各个方面的一些不成熟的理解,帮助读者认识到分布式系统领域的一个全景图,以便接下来寻找感兴趣的领域进行深入的学习。
学习分布式系统,需要回答以下几个问题:
-
(需求分析)分布式系统主要解决哪些问题?主要应用场景有哪些?
-
(实现方案)构建分布式系统的常见问题有哪些?解决这些问题的主流方案有哪些?
-
(技术难点)实现分布式系统的本质困难是什么?这些困难影响了那些问题?
-
(工业应用)工业上正在构建那些分布式系统?他们的发展情况如何?
大规模集群管理和运维自动化
说到大规模集群管理,就离不开运维自动化。一个人手工也许可以运维几百台机器,但是随着集群规模的增长,我们需要的是一个人运维数万台机器。 这在大规模集群管理中是一个常见的问题。因此,运维自动化是一个很重要的事情,这也是为什么很多公司原因上云,因为上云之后运维的问题就托管给 云平台了。这也是云平台这么贵还能卖的这么好的原因。
运维自动化的问题到底是一个什么问题?我认为,可以拆解为以下子问题:
-
自动发现错误
-
自动修复错误
-
安全(Safety而非Security)
这里的每一个问题都是复杂的,困难的问题,远非表面上看起来那么简单。以下仅作简单的展开,提供一些思路。
论文笔记:[Operating Systems Review 2007] Autopilot: Automatic Data Center Management
Autopilot是微软Bing组研发的集群管理系统,至今已有近20年的历史。Autopilot是一个内部模块高度解耦,完善发达的系统,其设计目标是自动化的管理静态集群。自动化的好处有以下几点:
-
节省人力
-
响应速度和处理时间优于人工处理
-
所有的处理过程都有Audit
-
不易出错
CAP,ACID,我们能做什么
本文从CAP理论和ACID性质为切入点,讨论分布式(存储)系统的设计。
分布式系统,尤其是分布式存储系统,在进行设计考虑时,首先需要想到的就是CAP问题,即在C(Consistency)和A(Availability)之间如何进行取舍的问题。我在思考的过程中发现,尽管对于Consistency有着诸多分类,如Linearizability、Sequential Consistency、Causal Consistency,但是对于Availability却没有一个对应的分类。这有悖于对CAP理论的理解:我们降低了Consistency之后,能得到什么程度的Availability?更进一步的,我们降低了Consistency后,是否真的能够提高Availability?
哈希表总结及其高级话题讨论
哈希表(hash table)是一种快速查找场景下常用的数据结构,本文对其主要问题及其高级应对方法进行有限的总结和讨论:
-
负载不够均衡,此时会有哈希冲突(collision)出现,导致哈希表性能下降
-
负载高时,若不进行空间扩展则性能下降,若进行空间扩展,扩展行为的(瞬间)代价通常较高
工作中常用到的 C++ 功能子集
用 C++ 语言也有一些年头了,在此总结一些工作中比较实用的 C++ 的功能子集。这里的主要使用场景是系统编程,不包括各种通用类库。
论文笔记:[ICDE'18] Anna: A KVS for any scale
Anna 是 Berkeley 大学研究的一种 Key-Value 存储 [1]。其开创性的使用 lattice 的方式允许用户自定义冲突解决方式,进而可以自定义一致性级别,在特定场景下极大的提升系统性能。Anna 使用了 Actor 模型而非传统的共享内存模型构建系统,使得系统可以以几乎一致的方式处理单机/分布式场景下的通信和协调,并且充分发挥硬件提供的并发能力。论文中没有详细叙述实现这两者的具体细节,由于这两者的实现方式都有一定难度,期待接下来的研究能够披露出进一步的细节。
每个程序员都应该会点形式化证明
我认为每个程序员都应该会点形式化证明,这有助于思考,更有助于写出正确的实现。
单机存储引擎的基础方法
这是一篇关于单机存储引擎基本思路的总结和分析。
论文笔记:[OSDI'14] F4: Facebook's Warm BLOB Storage System
F4 是 Facebook 为了降低存储成本而开发的,应用于只读可删除不可写场景的,对象存储系统。