最近对分布式系统有一些初步接触,这里对整体的分类做一个非常简单的总结,为今后的持续学习起一个指导作用。
整体的分类包含:分布式数据库系统,分布式通信,分布式存储系统
-
分布式数据库系统描述更多的是一个完善的服务存储系统,提供的不同服务形态,比如支持OLTP,OLAP 的 SQL 或者 KV接口的服务。要实现一个分布式数据库系统,需要分布式通信来协调RPC或者选主之类的,同时只需要分布存储系统来作为底层存储架构 像 分布式文件系统和块存储等。
-
分布式存储系统则是一个完善的存储系统,业界主要有fs/块/对象 三种分布式存储形态。能够单独对外 直接提供自己的存储服务,同时也能作为一个分布式数据库系统的底层。
-
分布式通信系统 像gRPC, bRPC 这样的肯定是作为一种子系统来和其他两种系统融合在一块对外提供服务,当然其中的协调系统还是能够单独作为独立系统运行(zookeeper, etcd),用来对外提供成员管理/分布式锁/分布式队列 等协调服务。
这里也对几种系统 相互之间如何协调 并完成对外的服务做了几个简图(非常非常简单的描述),其中的每一个组件,每一个系统都会有非常庞大的架构细节。
可能按照内存和磁盘来划分并不严谨,可能一个存储系统会将 从内存到磁盘 整个链路都重载掉(polarfs 和 polarstore);而redis这样的基于内存的存储系统也能够通过存储引擎持久化到磁盘。
上图重要的是可以看到各个子系统代替的是我们之前操作系统的哪一部分链路,从而更清晰得清楚该组件所在操作系统的形态,让我们对分布系统服务的认识更加直观。
比如MongoDB,能够对外提供DOC这样的存储接口,它的内部有MongoRocks / wiretiger 这样的单机存储引擎 来接受数据,存储引擎拥有自己的Get/Put 基本数据流接口 通过操作系统文件系统 接口 写入到PageCache 或者 物理存储设备。
因为操作系统是我们最为熟悉(最为陌生–kernel)的系统,对它和其他分布式系统的对比认知 能够加快我们的学习进度。