基于微服务架构的分布式文件系统项目
郑聪尉 151220169@smail.nju.edu.cn
- 基于Spring Boot,在Spring Cloud微服务平台上运行一个NameNode实例和多个DataNode实例
- NameNode提供REST风格接口与用户交互,实现用户文件的上传、下载、删除;DataNode不与用户直接交互
- NameNode将用户上传文件文件拆为固定大小的存储块,分散存储在各个DataNode上,每个块保存若干副本,块大小和副本数可通过系统参数配置
- DataNode服务可弹性扩展,每次启动一个DataNode服务NameNode可发现并将其纳入整个系统
- NameNode负责检查各DataNode健康状态,需模拟某个DataNode下线时NameNode自动在其他DataNode上复制(迁移)该下线服务原本保存的数据块
- NameNode在管理数据块存储和迁移过程中应实现一定策略尽量保持各DataNode的负载均衡
- 提供一个namenode上的前端页面
- IntelliJ IDEA 2018.1.5
- Java8
- Maven 4.0.0
- 根据课上所学知识,创建Cloud Discovery项目时,将NameNode配置为Eureka Server,将DataNode配置为Eureka Client,多个DataNode的端口通过启动时的参数设置
- NameNode提供Post,Get,Delete接口与用户进行交互,分别对应用户文件的上传、查看和删除
- NameNode中的Controller负责处理用户请求、文件切块、文件信息管理等,相当于一个微型文件管理系统
- DataNode只与NameNode交互,负责文件块的读写删等操作,其中实现方法利用到了storage
- zdfs-namenode只需开启一个进程即可
- zdfs-datanode则需要多个,因此zdfs-datanode中的server.port不要事先配置,通过终端传入即可
-
zdfs-namenode在IDEA中运行即可
可设置器端口号为8761
-
zdfs-datanode通过终端启动多个进程
$ mvn spring-boot:run -D server.port=8762 $ mvn spring-boot:run -D server.port=8763 $ mvn spring-boot:run -D server.port=8764
当数据上传完成后,可以直接通过浏览器获取文件,在浏览器输入即可获得对应文件名的文件
localhost:8761/filename
也可以在Postman查看当前已上传的文件,以及对应的文件分块数量
框架提供好了接口,但失效问题以及数据迁移没有实现
本项目名称为mini-DFS,即mini Distribute File System,功能性不足开篇也已经提到,当然也有自身设计性不足,如NameNode模块中的ZdfsNamenodeController实在太过杂乱,耦合度太大,有改进空间。