美文网首页
高级框架第三天FastDFS

高级框架第三天FastDFS

作者: w漫漫 | 来源:发表于2020-08-17 20:27 被阅读0次

    FastDFS:分布式文件系统

    一.项目架构的改变

    1.

    以前

    以前我们采用的上面的方式进行图片存储.图片在哪个项目中上传的图片就存储到哪个项目所在的服务器.其他项目模块通过HTTP请求进行获取图片.

    缺点:

    图片存储过于分散

    图片多的服务器压力比较大,可能会影响其他功能

    存储到项目路径中,重启会丢失.存储到外部文件中,I/O操作性能低

    针对上面的问题可以搭建单独的图片服务器,专门做图片存储及图片访问的.而想要搭建文件服务器就需要应用文件存储技术/工具,比如分布式文件系统架构图

    2.分布式文件系统架构图

    分布式文件系统架构图

    二.分布式文件系统概述

    1.分类

    1.1通用分布式文件系统

    和传统的本地文件系统(如ext3,NTFS等)相对应.典型代表:lustre,MooseFS

    1.1.1优点

    标准文件系统操作方式,对开发者门槛较低

    1.1.2.缺点

    系统复杂性较高.需要支持若干标准的文件操作.如:目录结构,文件读写权限,文件锁等.复杂性更高

    系统整体性能有所降低,因为要支持POSIX标准(表示可移植操作系统接口(Portable Operating System Interface of UNIX),POSIX标准定义了操作系统应该为应用程序提供的接口标准)

    1.2专用分布式文件系统

    基于google File System的思想,文件上传后不能修改.需要使用专有API对文件进行访问,也可称作分布式文件存储服务.典型代表:MogileFS,FastDFS,TFS

    1.2.1优点

    系统复杂性较低,不需要支持若干标准的文件操作,如:目录结构,文件读写权限,文件锁等,系统比较简洁

    系统整体性能较高,因为无需支持POSIX标准,可以省去支持POSIX引入的环节,系统更加高效

    1.2.2缺点

    采用专有API,对开发者门槛较高(可直接封装成工具类)

    2.Google FS体系结构

    2.1两个角色

    名字服务器(索引服务器)

    存储服务器

    2.2.架构特点

    不支持文件修改功能

    文件分块存储,需要索引服务器

    一个文件可以存储多份,一个文件存储到哪些存储服务器,通常采用动态分配的方式

    三.FastDFS简介

    1.简介

    FastDFS是一个轻量级的开源分布式文件系统.2008年4月份开始启动.类似google FS的一个轻量级分布式文件系统,纯C实现,支持Linux,FreeBSD,AIX等UNIX系统.

    主要解决了大容量的文件存储和高并发访问的问题,文件存取时实现了负载均衡.实现了软件方式的磁盘阵列(Redundant Arrays of Independent Drives,RAID),可以使用廉价的IDE(Integrated Driver Electronics)硬盘进行存储.并且支持存储服务器在线扩容.支持相同内容的文件只保存一份,节约磁盘空间

    FastDFS只能通过Client API访问,不支持POSIX访问方式

    FastDFS特别适合大中型互联网应用使用,用来存储文件资源(如:图片,文档,音频,视频等)

    2.网址

    FastDFS没有官网.但是作者余庆(happy_fish100)担任chinaunix中FastDFS板块版主.并且会不定期更新板块中内容

    http://bbs.chinaunix.net/

    FastDFS软件可以在sourceforge进行下载,最新版本为5.08

    http://sourceforge.net/projects/fastdfs/files/

    四.FastDFS架构

    1.架构图

    架构图

    2.角色

    Client:客户端.使用java语言编写的项目属于客户端

    Tracker Server:跟踪服务器,主要做调度工作,在访问上起负载均衡的作用.在内存中记录集群中group和storage server的状态信息,是连接Client和Storage server的枢纽

    Storage Server:存储服务器,文件和文件属性(meta data)都保存到存储服务器上

    3.架构解读

    只有两个角色,tracker server 和storage server,不需要存储文件索引信息

    所有服务器都是对等的,不存在Master-Slave关系

    存储服务器采用分组方式,同组内存储服务器上的文件完全相同(RAID1)

    不同组的storage server之间不会相互通信

    由storage server 主动向tracker server报告状态信息,tracker server之间不会相互通信

    五.FastDFS安装

    FastDFS安装

    六.文件上传流程

    1.时序图

    时序图

    2.流程说明

    1.客户端访问Tracker

    2.Tracker返回Storage的ip和端口

    3.客户端直接访问Storage,把文件内容和元数据发送过去

    4.Storage返回文件存储id.包含了组名和文件名

    七.文件下载

    1.时序图

    2.下载说明

    1.client询问tracker下载问阿金的storage,参数为文件标识(组名和文件名)

    2.tracker返回一台可用的storage;

    3.client直接和storage通讯完成文件下载

    八.Nginx简介

    1.简介

    FastDFS是没有文件访问功能的,需要借助其他工具实现图片HTTP访问的.Nginx就具备代理虚拟机主机功能

    Nginx(engine x)是一个高性能的HTTP和反向代理服务.Nginx是由伊戈尔.赛索耶夫为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日

    Nginx是一个很强大的高性能Web和反向代理服务,它具有很多非常优越的特性:在连接高并发的情况下,Nginx是Apache服务不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一

    2.代理方式

    2.1正向代理

    正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获取的内容返回给客户端.客户端才能使用正向代理

    正向代理

     2.2反向代理

    反向代理(Reverse proxy)方式是指代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器

    方向代理

    2.3二者之间的区别

    位置不同

    正向代理,架设在客户机和目标主机之间;

    反向代理,架设在服务器端;

    代理对象不同

    正向代理,代理客户端,服务端不知道实际发起请求的客户端;

    反向代理,代理服务端,客户端不知道实际提供服务的服务端

    3.Nginx作用

    3.1HTTP协议代理

    只要支持HTTP协议访问内容,都可以由Nginx进行代理.Nginx只支持HTTP协议的代理,其他协议不支持

    3.2搭建虚拟主机

    Nginx可以监听安装的主机的某个端口,对外支持这个端口的HTTP访问.当接收到外部HTTP请求后把本机中资源返回给客户端.今天的课程内容就是使用Nginx的搭建虚拟主机功能,外部请求图片时,把图片信息响应给请求发

    3.3负载均衡

    Nginx可以代理多个主机,内置负载均衡策略

    十.Nginx安装

    nginx安装(包含fastdfs模块)

    十一.KindEditor使用

    1.KindEditor简介

    KingEditor是基于JavaScript的插件.里面包含了丰富的组件,如:多文件上传组件,富文本编辑框

    使用KindEditor可以大大的降低页面开发难度

    2.文件上传参数及返回值说明

    3.代码示例

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

    <html>

    <head>

    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">

    <title>Insert title here</title>

    <link rel="stylesheet" href="js/kindeditor/themes/default/default.css"/>

    <script src="js/kindeditor/kindeditor-all.js"></script>

    <script src="js/kindeditor/lang/zh_CN.js"></script>

    <script type="text/javascript">

        KindEditor.ready(function(K){

            var editor = K.editor({

                allowFileManager:true,

                uploadJson:'upload'

            });

            editor = K.create('textarea[name="feel"]',{

                uploadJson:'upload'

            });

            K('#J_selectImage').click(function(){

                editor.loadPlugin('multiimage',function(){

                    editor.plugin.multiImageDislog({

                        clickFn:function(urlList){

                            var div = K('#J_imageView');

                            div.html('');

                            K.each(urlList,function(i,data){

                                div.append('<img src="'+data.url+'" width="50" height="50" />');

                                div.append('<imput type="hidden" name="imgs" value="'+data.url+'" />');

                            });

                            editor.hideDialog();

                        }

                    })

                })

            })

        })

    </script>

    </head>

    <body>

    <form action="insert" method="post">

        标题:<input type="text" name="title"/><br/>

        图片:<input type="button" id="J_selectImage" value="批量上传"/>

        <div id="J_imageView"></div>

        感受:<textarea name="feel" style="width:700px;height:200px;visibility:hidden;"></textarea><br/>

        <input type="submit" value="发布"/>

    </form>

    </body>

    </html>

    相关文章

      网友评论

          本文标题:高级框架第三天FastDFS

          本文链接:https://www.haomeiwen.com/subject/fmzqjktx.html