大家好,我是砖家小胖。前段时间由于我团队的某位同学电脑硬盘损坏,导致数据全部丢失。于是小胖回想起以前对Hadoop的HDFS(实际上这玩意并不太适合存储大量的小文件)一段时间研究,准备做一个云存储平台,名字就叫《小胖云存储》。开发这个项目,一是为了对以前HDFS的相关技术做个总结,毕竟实战才是检验技术的最佳方法,二是服务于研究院的同事进行数据备份,以免再次发生类似事件。
1.概念 云存储是一种网上
在线存储
(英语:Cloud storage)的模式,是指通过
集群应用
、
网络技术
或
分布式文件
系统等功能,网络中大量各种不同类型的存储设备通过应用软件集合起来协同工作,共同对外提供
数据存储
和
业务访问
功能的一个系统,保证数据的安全性,并节约存储空间。简单来说,云存储就是将储存资源放到云上供人存取的一种新兴方案。使用者可以在任何时间、任何地方,透过任何可连网的装置连接到云上方便地存取数据。(摘自百度百科)
概念这个东西总是搞的那么复杂,其实这玩意通俗的解释就是:本该存在你自己电脑硬盘的数据,现在存储在远程的服务器硬盘上面了,人家做了一系列措施,可以使你的使用数据更安全,更快捷,更方便。你只需要远程发送你要操作的命令就行了,比如删除、下载、上传...等等。
以后有时间,我会给大家一 一分享现在炒的比较火的概念,到底都是些什么玩意。比如:云服务,云计算、云数据库、云快照、云安全...等等类似的东西。其实这些东西拆开通俗解释,并没有什么神秘的,只是最近各位大佬都在炒大数据和人工智能的概念,媒体有些过度神话了。
2.类别
云存储分两种,一种是像《阿里云》一样,服务于企业用户,通过云服务缴费,阿里云在云端服务器中为企业用户划分出所购买的存储空间(GB),用户可以进行上传下载...等操作。 而另一种,就是我们所熟知的《XX网盘》了,这种主要服务于大众客户,用户注册账号,为用户划分存储空间,用户进行上传下载..等操作。对了,还有万恶的VIP开通功能,不交钱限制你速度哦~ 经过上面的简单介绍,我们已经对云存储有了大概的概念,接下来我们来实现一下面对客户的云存储产品《小胖云存储》。 本篇文章只讲实现思路,不讲具体代码。
3.技术架构
V1.所需技术
web前端:
Html5+Css3+Layui+Js+Jquery+Ajax
服务器后端:
Java+Gradle+SpringBoot+Tomcat+MySql+MyBatis+Redis+Hadoop+HDFS
V2.架构图
V3.整体工程目录
3.权限控制
由于项目前后端开发完全分离,Session会失效,故采用Redis存储token验证方案。
V1.用户注册时,在HDFS集群创建目录:根目录/storage+"/"+用户id,及当前路径,每个用户只可操作自己所属文件夹,不可操作他人目录。
V2.用户登陆时,读取MySql检测账号是否存在,检测密码是否正确。
V3.登陆成功后,获取用户id,向Redis中写入,token以UUID方式生成,设置Redis失效时间为2小时,同时接口返回用户id,token,当前路径currentPath。
V4.以后任何接口请求(除分享),需带着id和token请求服务器后端接口,每个接口请求时,先检测用户登陆状态。 id不存在,过了失效时间2小时,则强制跳转重新登陆页面id存在redis中,则说明账号已登陆,同时验证Token值,id不存在则强制跳转登陆页面。
id存在redis中,但token不一致,说明用户第二次登陆或在其他地点登陆同一账号,则踢用户下线,该页面将强制跳转登陆页面。 代码片段: 4.存储部分 V1.目录详情:
用户每次打开目录,传入当前目录路径,返回目录详情,即该当前目录包含多少个子 文件夹和多少个文件,名字分别是什么。 V2.文件详情 用户点击属性查看文件,传入当前文件路径,进HDFS集群,查询该文件的块副本备份节点机器 ,文件大小,文件路径等相关信息。 V3. 新建文件夹传入要创建的文件夹路径
V4.上传文件传入要上传文件的当前文件夹路径 由于研究院内网为千兆光纤网络,故上传速度可以达到极限110MB/秒的速度 V5.重命名传入当前文件或文件夹路径 V6.删除文件和文件夹传入当前文件或文件夹路径 V7.下载文件传入当前文件路径 由于研究院内网为千兆光纤网络,故下载速度可以达到极限120MB/秒的速度 V8. 退出
传入id和token,删除Redis缓存。 5.分享部分 V1. 用户点击分享时,传入分享文件的当前路径。
V2.生成分享Token,写入Redis 过期时间为7天。ShareBean 包括分享人名字,分享Token,分享的文件当前路径。
V3.前端通过get拼参数ShareTaoken并生成Url链接。
V4.将分享链接发送给其他人。
V5.其他人点击分享链接,打开分享详情页面,获取相关参数数据。
V6.点击下载时,传入ShareToken,通过Token获得ShareToken相关信息(分享人,分享失效到期时间,分享文件的HDFS路径)。
V7.验证ShareToken是否过期,如果已过期则不允许下载,正常则进入下载阶段。 6.测试效果 本项目开发时间为6天,由于时间原因仅实现了云存储基础功能,还有很多功能未开发、未完善,所以并不能称之为一个商业产品,仅仅作为一个HDFS开发练手项目。
特别鸣谢:本团队王永久同学对本项目的Web前端技术支持!
再见~~
以后有时间,我会给大家一 一分享现在炒的比较火的概念,到底都是些什么玩意。比如:云服务,云计算、云数据库、云快照、云安全...等等类似的东西。其实这些东西拆开通俗解释,并没有什么神秘的,只是最近各位大佬都在炒大数据和人工智能的概念,媒体有些过度神话了。
2.类别
云存储分两种,一种是像《阿里云》一样,服务于企业用户,通过云服务缴费,阿里云在云端服务器中为企业用户划分出所购买的存储空间(GB),用户可以进行上传下载...等操作。 而另一种,就是我们所熟知的《XX网盘》了,这种主要服务于大众客户,用户注册账号,为用户划分存储空间,用户进行上传下载..等操作。对了,还有万恶的VIP开通功能,不交钱限制你速度哦~ 经过上面的简单介绍,我们已经对云存储有了大概的概念,接下来我们来实现一下面对客户的云存储产品《小胖云存储》。 本篇文章只讲实现思路,不讲具体代码。
3.技术架构
V1.所需技术
web前端:
Html5+Css3+Layui+Js+Jquery+Ajax
服务器后端:
Java+Gradle+SpringBoot+Tomcat+MySql+MyBatis+Redis+Hadoop+HDFS
V2.架构图
V3.整体工程目录
3.权限控制
由于项目前后端开发完全分离,Session会失效,故采用Redis存储token验证方案。
V1.用户注册时,在HDFS集群创建目录:根目录/storage+"/"+用户id,及当前路径,每个用户只可操作自己所属文件夹,不可操作他人目录。
V2.用户登陆时,读取MySql检测账号是否存在,检测密码是否正确。
V3.登陆成功后,获取用户id,向Redis中写入,token以UUID方式生成,设置Redis失效时间为2小时,同时接口返回用户id,token,当前路径currentPath。
V4.以后任何接口请求(除分享),需带着id和token请求服务器后端接口,每个接口请求时,先检测用户登陆状态。 id不存在,过了失效时间2小时,则强制跳转重新登陆页面id存在redis中,则说明账号已登陆,同时验证Token值,id不存在则强制跳转登陆页面。
id存在redis中,但token不一致,说明用户第二次登陆或在其他地点登陆同一账号,则踢用户下线,该页面将强制跳转登陆页面。 代码片段: 4.存储部分 V1.目录详情:
用户每次打开目录,传入当前目录路径,返回目录详情,即该当前目录包含多少个子 文件夹和多少个文件,名字分别是什么。 V2.文件详情 用户点击属性查看文件,传入当前文件路径,进HDFS集群,查询该文件的块副本备份节点机器 ,文件大小,文件路径等相关信息。 V3. 新建文件夹传入要创建的文件夹路径
V4.上传文件传入要上传文件的当前文件夹路径 由于研究院内网为千兆光纤网络,故上传速度可以达到极限110MB/秒的速度 V5.重命名传入当前文件或文件夹路径 V6.删除文件和文件夹传入当前文件或文件夹路径 V7.下载文件传入当前文件路径 由于研究院内网为千兆光纤网络,故下载速度可以达到极限120MB/秒的速度 V8. 退出
传入id和token,删除Redis缓存。 5.分享部分 V1. 用户点击分享时,传入分享文件的当前路径。
V2.生成分享Token,写入Redis 过期时间为7天。ShareBean 包括分享人名字,分享Token,分享的文件当前路径。
V3.前端通过get拼参数ShareTaoken并生成Url链接。
V4.将分享链接发送给其他人。
V5.其他人点击分享链接,打开分享详情页面,获取相关参数数据。
V6.点击下载时,传入ShareToken,通过Token获得ShareToken相关信息(分享人,分享失效到期时间,分享文件的HDFS路径)。
V7.验证ShareToken是否过期,如果已过期则不允许下载,正常则进入下载阶段。 6.测试效果 本项目开发时间为6天,由于时间原因仅实现了云存储基础功能,还有很多功能未开发、未完善,所以并不能称之为一个商业产品,仅仅作为一个HDFS开发练手项目。
特别鸣谢:本团队王永久同学对本项目的Web前端技术支持!
再见~~