从0到1编写分布式文件系统——框架搭建
辛丑年十月廿七,小森刚急急忙忙地处理完线上服务器文件存储问题,累瘫在椅子上,回想着这已经是这个月第4起线上文件服务器故障了,在这么下去非要提桶跑路不可。突然,组长面色凝重的把小森叫到了办公室,说道:“小森啊,你也知道,目前线上这个单节点的文件服务器压力已经很大了,运维成本很高。并且公司业务正在不断发展,以后访问量和存储量会越来越高,所以,决定给你一个月的时间,搭建一个分布式文件系统出来,用现成开源的框架也行,用商业的方案也行,功能不用太复杂,不过有一点要记住,成本不能太高。”
小森回到座位之后,便火急火燎的开始面向搜索引擎设计分布式文件系统方案,网上确实有不少开源的分布式文件系统,如Hadoop HDFS。但心里一想,自己写了这么久的crud代码,都快对代码没有了激情了,不如尝试自己写个分布式文件系统出来。一来公司以后的业务依赖自己写的系统,那自己的公司的地位不可或缺;二来自己写出了文件系统,也好在简历上吹牛逼,说不定跳槽后能把自己卖个好价钱。如果只是个简单功能的分布式文件系统,应该也不是太难,说干就干,开始设计整体架构。
本人毕业后从事过一段时间跟大数据相关的工作,也利用空闲的时间编译、调试以及阅读过一些大数据框架的源码,如HDFS、Hbase、Opentsdb以及Zookeeper等。但是深知阅读源码跟自己动手写一个仿制的简易框架是不同的,于是尝试自己动手仿照HDFS写一个Simple Distributed File System出来。
整体架构
整个Simple Distributed File System如上图所示,主要有master节点和work节点,就相当于HDFS的namenode和datanode。
Master
Master是SDFS的主节点,存储整个文件系统的结构目录,以及各个存储文件的分块元数据信息,主要功能如下:
1、维持整个文件系统的元数据信息,包含整棵目录的结构以及所有分割文件块的信息,并且处理对目录树的创建、更新以及删除操作;
2、跟各个Work节点保持“心跳”连接,监控各个work的情况
Work
Work是SDFS的工作节点,主要用来做实际的文件存储工作
Client客户端
通过与Mater和Work进行连接,发起创建、更新文件夹以及文件的操作
SimpleDFS
├── README.md
├── bin
│ └── start.sh 启动脚本
├── build.sh 编译构建脚本
├── conf
│ ├── master-config.xml master节点的配置文件
│ └── work-config.xml work节点的配置文件
├── logs
├── pom.xml
├── simple-dfs-client 客户端连接相关代码
├── simple-dfs-core 存储整个项目核心的代码,包括网络连接、元数据以及消息处理机制等
├── simple-dfs-master master代码相关,主要引用core模块的代码以及网络处理机制
├── simple-dfs-work work代码相关,主要引用core模块的代码
后续篇章:从0到1编写分布式文件系统——Master模块(一)
详细代码:Simple Distributed File System