网站文件系统发展分布式文件系统fastDFS

news/2024/5/19 13:13:44/文章来源:https://blog.csdn.net/weixin_34302798/article/details/90099531

 

网站文件系统发展

 

1、单机时代的图片服务器架构

   初创时期由于时间紧迫,开发人员水平也很有限等原因。所以通常就直接在website文件所在的目录下,建立1upload子目录,用于保存用户上传的图片文件。如果按业务再细分,可以在upload目录下再建立不同的子目录来区分。例如:upload\QA,upload\Face

优点:实现起来最简单,无需任何复杂技术,就能成功将用户上传的文件写入指定目录。保存数据库记录和访问起来倒是也很方便。

缺点:上传方式混乱,严重不利于网站的扩展。

 

2、单独立文件服务器

   随着公司的业务不断的发展,将服务和文件放在同一服务器下面的弊端越来越明显;这个时候就该上线独立的图片服务器系统;通过ftp或者ssh工具将文件上传到图片服务器的某个目录下面,在通过ngnix或者apache服务器来做图片的访问,给图片服务器配置独立的子域名,例如 img.xx.com。在业务处理文件时通过ftp或者ssh将文件上传到文件服务器,返回给程序一个独立域名的图片url地址,网站正常访问的时候就通过这个URL地址来访问文件。

优点:图片访问是很消耗服务器资源的(因为会涉及到操作系统的上下文切换和磁盘I/O操作)。分离出来后,Web/App服务器可以更专注发挥动态处理的能力;独立存储,更方便做扩容、容灾和数据迁移;方便做图片访问请求的负载均衡,方便应用各种缓存策略(HTTP HeaderProxy Cache等),也更加方便迁移到CDN

缺点单机存在性能瓶颈,容灾、垂直扩展性稍差

 

3、分布式文件系统

   业务继续发展,单独单台的服务器存储和响应也很快到达了瓶颈,新的业务要求,文件访问高响应性,高可用性来响应业务对系统的要求。分布式文件系统,一般分为三块内容来配合,服务的存储、访问的仲裁系统,文件存储系统,文件的容灾系统来构成,总裁系统相当于文件服务器的大脑,根据一定的算法来决定文件存储的位置,文件存储系统负责报错文件,容灾系统负责文件系统和自己的相互备份。

优点:扩展能力毫无疑问,扩展能力是一个分布式文件系统最重要的特点;高可用性在分布式文件系统中,高可用性包含两层,一是整个文件系统的可用性,二是数据的完整和一致性;弹性存储可以根据业务需要灵活地增加或缩减数据存储以及增删存储池中的资源,而不需要中断系统运行

缺点系统复杂度稍高,需要更多服务器

 

 

分布式文件系统fastDFS

1、什么是FastDFS

FastDFS是一个开源的轻量级分布式文件系统。它解决了大数据量存储和负载均衡等问题。特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务,如相册网站、视频网站等等。在UC基于FastDFS开发向用户提供了:网盘,社区,广告和应用下载等业务的存储服务。

 

2、FastDFS架构和原理

FastDFS服务端有三个角色:跟踪服务器(tracker server)、存储服务器(storage server)和客户端(client)。

tracker server:跟踪服务器,主要做调度工作,起负载均衡的作用。在内存中记录集群中所有存储组和存储服务器的状态信息,是客户端和数据服务器交互的枢纽。相比GFS中的master更为精简,不记录文件索引信息,占用的内存量很少。

storage server:存储服务器(又称:存储节点或数据服务器),文件和文件属性(meta data)都保存到存储服务器上。Storage server直接利用OS的文件系统调用管理文件。

client:客户端,作为业务请求的发起方,通过专有接口,使用TCP/IP协议与跟踪器服务器或存储节点进行数据交互。

FastDFS架构图1_thumb[9]

 

Tracker相当于FastDFS的大脑,不论是上传还是下载都是通过tracker来分配资源;客户端一般可以使用ngnix等静态服务器来调用或者做一部分的缓存;存储服务器内部分为卷(或者叫做组),卷于卷之间是平行的关系,可以根据资源的时候情况随时增加,卷内服务器文件相互同步备份,以达到容灾的目的

 

上传机制

首先客户端请求Tracker服务获取到存储服务器的ip地址和端口,然后客户端根据返回的IP地址和端口号请求上传文件,存储服务器接收到请求后,生产文件file_id并且将文件内容写入磁盘返回给客户端file_id和路径信息、文件名,客户端保存相关信息上传完毕

下载机制

客户端带上文件名信息请求Tracker服务获取到存储服务器的ip地址和端口,然后客户端根据返回的IP地址和端口号请求下载文件,存储服务器接收到请求后返回文件给客户端。

 

 

3、如何搭建fastDFS

请参考以下文章

FastDFS + Nginx 反向代理缓存 安装与配置

地址:http://www.linux178.com/storage/fastdfs-nginx-cache.html

 

4、使用java调用fastDFS

以下代码是一个spring mvc中一个完整的上传请求

复制代码
    @RequestMapping(value = "/upload", method = RequestMethod.POST)@ResponseBodypublic Object upload(@RequestParam MultipartFile file) {UploadResponse res = new UploadResponse();try {if(file.isEmpty()){res.setRet_code(UserCodeEnum.ERR_FILE_NULL.getCode());res.setRet_msg(UserCodeEnum.ERR_FILE_NULL.getDesc());}else{logger.info("UserController-upload-request-file=" + file.getOriginalFilename());String tempFileName = file.getOriginalFilename();//fastDFS方式ClassPathResource cpr = new ClassPathResource("fdfs_client.conf");ClientGlobal.init(cpr.getClassLoader().getResource("fdfs_client.conf").getPath());byte[] fileBuff = file.getBytes();String fileId = "";String fileExtName = tempFileName.substring(tempFileName.lastIndexOf("."));//建立连接TrackerClient tracker = new TrackerClient();TrackerServer trackerServer = tracker.getConnection();StorageServer storageServer = null;StorageClient1 client = new StorageClient1(trackerServer, storageServer);//设置元信息NameValuePair[] metaList = new NameValuePair[3];metaList[0] = new NameValuePair("fileName", tempFileName);metaList[1] = new NameValuePair("fileExtName", fileExtName);metaList[2] = new NameValuePair("fileLength", String.valueOf(file.getSize()));//上传文件fileId = client.upload_file1(fileBuff, fileExtName, metaList);res.setHead_img(UserConstants.FILE_IMG_URL+fileId);res.setRet_code(UserCodeEnum.SUCCESS.getCode());res.setRet_msg(UserCodeEnum.SUCCESS.getDesc());}logger.info("UserController-upload-response-" + JsonUtils.o2j(res));} catch (Exception e) {res.setRet_code(UserCodeEnum.ERR_UNKNOWN.getCode());res.setRet_msg(UserCodeEnum.ERR_UNKNOWN.getDesc());logger.error("UserController-upload-error", e);}return res;}
复制代码

fastDFS java客户端配置文件fdfs_client.conf配置如下:

复制代码
connect_timeout = 30
network_timeout = 60
charset = ISO8859-1
http.tracker_http_port = 8090
http.anti_steal_token = no
http.secret_key = 123456tracker_server = 192.168.11.***:22122
复制代码

 

参考:

http://blog.chinaunix.net/uid-20196318-id-4058561.html

http://tech.uc.cn/?p=221

 


作者:纯洁的微笑 
出处:www.ityouknow.com 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 

本文如对您有帮助,还请多帮 【推荐】 下此文。 
如果喜欢我的文章,请关注我的公众号

分类: 系统架构

本文转自纯洁的微笑博客博客园博客,原文链接:http://www.cnblogs.com/ityouknow/p/5344857.html,如需转载请自行联系原作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_761982.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站前端_EasyUI.基础入门.0005.使用EasyUI Accordion组件的最佳姿势?

1. 基础的手风琴<div id"a" class"easyui-accordion" data-options"width:500,height:300"><div data-options"iconCls:icon-ok,title:about,bodyCls:accordion_padding"><h3 style"color:#0099FF;">Acco…

Jekyll – 基于纯文本的开源静态网站 博客系统

Jekyll 是一个开源的静态网站 & 博客生成工具&#xff0c;类似 WordPress。但是和 WordPress 又有很大的不同&#xff0c;原因是 Jekyll 只是一个生成静态网页的工具&#xff0c;不需要数据库支持。但是可以配合第三方服务&#xff0c;例如disqus。最关键的是 Jekyll 可以免…

给你一个网站,你该如何测试?你需要记住这4条法则!

我想大多数开始进行web端页面测试的人&#xff0c;一开始会的都是在页面上点点点&#xff0c;然后一看到页面上有什么图片失效啊&#xff0c;页面遮挡就觉得是找到了大bug&#xff1b;一开始我也是这样&#xff0c;尽管我很谨慎&#xff0c;很仔细&#xff0c;把页面上的每一个…

软件测试人员和QA必须关注的15个网站,值得收藏!

相信大家在学习的时候&#xff0c;不管学什么&#xff0c;都会习惯性地寻找各种学习资源。在大家自学软件测试的时候&#xff0c;也不会例外。那么&#xff0c;软件测试网站有哪些&#xff1f;我们到底应该如何精通软件测试呢&#xff1f;我们不妨一探究竟。 日常学习除了在一…

错误配置 MongoDB 数据库:微软招聘网站曝数据泄露安全漏洞

微软刚刚为自家移动版招聘网站封堵了一个注册用户信息泄露漏洞&#xff0c;以帮大公司追索错误配置部署的MongoDB在线数据库而知名的安全研究人员Chris Vickery发现了这一问题&#xff08;且与他此前的多个发现类似&#xff09;。此前&#xff0c;Vickery曾帮MacKeeper找到了泄…

JAVA笔记26-网络编程(不等于网站编程)

一、网络基础&#xff08;TCP/IP详解&#xff09; 1、IP协议&#xff08;Internet Protocol&#xff09;&#xff1a;网络层&#xff0c;支持网间数据报通信。无连接数据报传送&#xff0c;数据报路由选择和差错控制。 IPv4 32位&#xff08;4字节&#xff09;&#xff0c;IPv6…

如何使用nuget管理C#网站项目

2019独角兽企业重金招聘Python工程师标准>>> 接手C#的项目团队后&#xff0c;发现历史遗留的项目dll管理有些混乱&#xff0c;各个开发人员名下的项目有很多自定义dll或者是很老版本的dll文件&#xff0c;往往一个项目从vss拉下来后无法生成成功&#xff0c;提示缺少…

2017淮北计算机会考,2017年安徽淮北高中会考报名网站:淮北教育局

淮北高中会考报名网站&#xff1a;淮北教育局【导语】每个人都会面临大大小小的考试&#xff0c;有可能这一辈子都会逃脱不了考试的命运。无忧考网整理了淮北高中会考报名网站信息。希望对各位有些帮助。参加2017年安徽淮北高中会考的考生可点击进入《淮北教育局》进行淮北高中…

网站品牌列表效果 jQuery效果

用户进入页面时&#xff0c;品牌列表是默认的精简显示的如下图&#xff1a; 单击商品列表下方的查看全部按钮来显示全部的品牌&#xff0c;同时推荐品牌的文字会高亮显示&#xff0c;按钮里面的文字也变成“收起查看” jQuery 代码如何&#xff1a; <script type"text/…

BCrypt加密怎么存入数据库_「安全」3种常用的信息加密技术,让网站固若金汤...

2011年12月被曝的CSDN密码泄露事故中,网站安全措施不力,导致用户数据库被黑客“拖库”并不稀奇&#xff0c;令人错愕的是数据库中的用户密码居然是明文保存&#xff0c;导致密码泄露&#xff0c;成为地下黑市交易的商品。通常&#xff0c;为了保护网站的敏感数据&#xff0c;应…

一键seo提交收录_想让百度100%收录你的页面?那就进来看看

没有收录就没有SEO收录是SEO的第一步&#xff0c;收录越多才有可能获得更高的SEO流量。最近&#xff0c;由于百度收录机制变的更加严格&#xff0c;很多站长发现网站收录变少了、变慢了、甚至不收录了。站长平台提交不能提升收录你可能做了sitemap&#xff0c;也在百度站长平台…

功能性新网站开发一点点经验心得

因为本次是全程参与了松松软文新平台的开发&#xff0c;所以卢松松今天把网站开发的一些经验心得写出来&#xff0c;供大家参考。以后大家在迁移新网站的时候&#xff0c;有一个参考依据&#xff0c;我都做了什么&#xff0c;什么时候做&#xff0c;都会列出来&#xff0c;希望…

ichunqiu在线挑战--网站综合渗透实验 writeup

挑战链接&#xff1a;http://www.ichunqiu.com/tiaozhan/111知识点&#xff1a;后台弱口令&#xff0c;md5破解&#xff0c;SQL Injection&#xff0c;写一句话木马&#xff0c;敏感信息泄露&#xff0c; 提权&#xff0c;登陆密码破解这个挑战与“我很简单&#xff0c;请不要欺…

论坛隐藏链接获取_【外链建设】测试了1500个hao123推荐的网站,只为挖掘发能外链的DZ论坛...

虽然已经过了外链为皇的时代&#xff0c;但外链在新站建设、重点关键词排名等工作场景中依然占据这很重要的位置。因为我工作后&#xff0c;大部分的时间在做品牌SEO&#xff0c;没有积攒什么外链资源&#xff1b;这次要梳理SEO技术&#xff0c;我的新博客也需要扩大外链的广泛…

网站添加第三方登陆(PHP版)

这两周正在写毕业设计&#xff0c;我做的是一个问答网站。先介绍一下这个网站&#xff1a;这是一个关于大学生在线问答的网站&#xff0c;类似知乎和百度知道&#xff0c;不过功能没有人家多&#xff0c;毕竟这个网站我一个人在做。网站部署在阿里云&#xff0c;网站包括API&am…

php动态网址可以做seo么,动态URL是什么意思?动态URL怎么做

我们经常会听到动态url&#xff0c;很多小白会不太明白&#xff1a;什么是动态URL呢&#xff1f;其实动态URL意味着网页很难被搜索引擎检索到&#xff0c;对于SEO是非常不利的。因此我们需要了解动态URL怎样做能利于SEO。德州SEO七宝总结了以下几点供大家参考&#xff1a;一、动…

asp网站显示 remote host time out

当用户访问网站的时候&#xff0c;显示如下所示信息&#xff1a; 出现这个问题&#xff0c;一般都是用户的浏览器设置了代理&#xff0c;把代理取消就好了&#xff01;

最新30个优秀的旅行网站设计作品欣赏

您可能还喜欢 12个优秀的 HTML5 网站设计案例欣赏30个漂亮的个人作品集网页设计欣赏分享35个非常漂亮的单页网站设计欣赏45个优秀的国外电子商务网站设计欣赏33个非常优秀的网站底部设计案例欣赏旅游网站的页面通常设计得很宽&#xff0c;而且搭配非常有吸引力的图片&#xff0…

作为网站的唯一入口,控制权限,保证网站安全:SpringCloud_Zuul

为什么要学习网关&#xff1f; 答&#xff1a;作为网站的唯一入口&#xff0c;控制权限&#xff0c;保证网站安全 功能&#xff1a;控制权限&#xff08;鉴权&#xff09;、分发请求&#xff08;动态路由&#xff09; 前言&#xff1a;来模拟一个需要用网关的场景 使用Spri…

进行网站设计之母版页

建立站点地图&#xff1a;web.sitemap 创建模板页面:Template.master 下面的代码为Template.master文件定义了标准的HTML元标记和页头。 页头&#xff1a;放一些DIV容器&#xff0c;一个用于菜单链接&#xff0c;一个用于登录框&#xff0c;另一个用于选择主题(一个包含了可选主…