当前位置: 首页 > news >正文

网站开发图书管理系统灰色行业关键词优化

网站开发图书管理系统,灰色行业关键词优化,建筑网站的功能模块有哪些,渠道网恋知识概念 分布式文件系统 通过计算机网络将各个物理存储资源连接起来。通过分布式文件系统,将网络上任意资源以逻辑上的树形结构展现,让用户访问网络上的共享文件更见简便。 文件存储的变迁: 直连存储:直接连接与存储&#xf…

知识概念

分布式文件系统

通过计算机网络将各个物理存储资源连接起来。通过分布式文件系统,将网络上任意资源以逻辑上的树形结构展现,让用户访问网络上的共享文件更见简便。

文件存储的变迁:

  • 直连存储:直接连接与存储,扩展性、灵活性差。如Tomcat、nginx。
  • 中心化存储:网络互联。
  • 分布式存储:资源存储在多个服务器,这个存储资源构成一个虚拟的存储设备。

常见的DFS

  • FastDFS :开源的轻量级分布式文件系统;
  • HDFS : Hadoop 子项目, Hadoop 的存储系统。
  • Taobao FileSystem :高扩展、高可用、高性能、面向互联网服务的分布式文件系统,针对海量非结构化数据,构建在普通linux机器集群上,提供高可靠、高并发的存储访问。
    • 为淘宝提供海量小文件存储,通常不超1M。
    • 采用HA架构和平滑扩容。

HA架构:通过设计,减少系统不可用的时间。通过 冗余(集群) + 自动故障转移来实现。

  • GridFS:mongodb内置功能。文件分成两份:索引和文件内容。它们存储在集合中,文件内容等分成若干块存储在文档中。一般以4M作为分块存储单位。
  • Google File System :非开源。
  • MogileFS : 由Six Apart开发,广泛应用在 包括LiveJournal等web2.0站点上 。
文件系统FastDFSHDFSTFSMogileFS
数据存储 方式文件/块文件文件文件
集群通讯 协议私有协议私有协议私有协议Http
扩容支持支持支持支持
冗余备份支持支持支持不 支持
单点故障不存在存在存在存在
跨集群同 步部分支持不支持支持不支持
开发语言CJavaC++Perl
适合类型4KB - 500MB大文件所有文件海量小图片
复杂度简单简单复杂复杂
易用性安装简单,社区 活跃安装简单,文档 专业安装复杂,文档 较少安装复杂,文档 较少
研发团队国内开发者-余庆ApacheAlibabaDanga Interactive
FUSE不支持支持不支持支持
POSIX不支持支持无资料不支持

常见DFS提供商

  • 阿里OSS
  • 七牛云存储
  • 百度云存储

FastDFS简介

FastDFS是用C语言编写的一款开源的分布式文件系统,它是由淘宝资深架构师余庆编写并开源。 FastDFS专为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高 性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

功能概况

文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡 的问题。特别适合以中小文件( 建议范围: 4KB 到 500MB ) 为载体的在线服务,如:相册网站、视 频网站等等

架构

FastDFS架构包括 Tracker Server和Storage Server 。 Tracker Server负责处理客户端的文件上传、下载请求,通过调度,追踪定位 Storage Server 目标,最后由其完成文件下载、上传。
image.png

Tracker Server

作用是负载均衡和调度。在FastDFS集群中,可以有多台Tracker Server 同时提供服务,不存在单点故障。

Storage Server

处理文件存储,使用操作系统的文件系统管理文件。
采用分组存储方式,集群由多个一个或多个分组组成,集群容量是集群内所有组的总和,不同组之间不会互相通信,同组内相互连接同步文件(所以组的容量由组内最小容量的节点决定)。
使用分组的方式,比较灵活易扩展。客户端可以直接指定上传的组,也可以由Tracker进行调度;当访问压力大的时候,也可以通过增加组内存储服务器来提高服务能力;当容量不足时,可以增加分组,提高容量。

Storage 状态收集

Storage会连接所有Tracker,然后汇报自己的状态。,包括磁盘空间、文件同步情况、文件上传下载次数等统计信息。

文件上传流程

image.png
客户端拿到file_id之后,存储起来,后续通过file_id拿到文件。
file_id相当于一个索引,其文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。

例如:group1/M00/00/00/wKjIgGNslmOAf5VSAACQjdb7ANw5904822

  • 组名:文件上传后所在的分组;
  • 虚拟磁盘路径:通过store_path指定的 Storage 虚拟路径。 store_path0(相当于一个组内节点) 是M00 ,了store_path1则是M01,以此类推。
  • 数据两级目录 : 在 虚拟磁盘路径下创建的两级目录,用于存储数据文件。
  • 文件名:由存储服务器根据特定信息(源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息)生成。

文件下载流程

image.png

  • 通过组名, tracker 能快速锁定所在分组,然后 tracker 会选择一个合适的存储节点,并把节点信息返回给客户端。
  • 客户端访问存储服务器的时候,存储服务器可以通过文件虚拟路径数据两级目录来快速定位文件,并根据文件名找到访问的文件。

准备环境

开几个ubuntu18虚拟机:

节点IP域名端口开放
tracker1192.168.204.167tracker122122
tracker2192.168.204.168tracker222122
storage1192.168.204.169storage123000、8888
storage2192.168.204.170storage123000、8888

修改一下自己电脑的host文件:

192.168.204.167 tracker1
192.168.204.168 tracker2
192.168.204.169 storage1
192.168.204.170 storage2

下载镜像:
docker pull morunchang/fastdfs

https://hub.docker.com/r/morunchang/fastdfs

tracker

在tracker1、tracker2服务器运行下面命令(运行前检查tracker_data目录是否创建了)。
默认端口:22122。

docker run -d --name tracker -p 22122:22122 -v ~/tracker_data:/data/fast_data  --net=host morunchang/fastdfs sh tracker.sh

–net:支持 bridge/host/none/container 四种类型

storage

在storage1、storage2服务器运行下面命令(运行前检查storage_data、store_path目录是否创建了)。


docker run -d --name storage \
-v ~/storage_data:/data/fast_data \
-v ~/conf/nginx.conf:/etc/nginx/conf/nginx.conf \
--net=host -e GROUP_NAME=group1 \
-e TRACKER_IP=tracker1:22122,tracker2:22122 \
morunchang/fastdfs sh storage.sh
#user  nobody;
worker_processes  1;#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#pid        logs/nginx.pid;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '#                  '$status $body_bytes_sent "$http_referer" '#                  '"$http_user_agent" "$http_x_forwarded_for"';#access_log  logs/access.log  main;sendfile        on;#tcp_nopush     on;#keepalive_timeout  0;keepalive_timeout  65;#gzip  on;server {listen       8888;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {root   html;index  index.html index.htm;}location ~ /M00 {root /data/fast_data/data;ngx_fastdfs_module;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {#    proxy_pass   http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {#    root           html;#    fastcgi_pass   127.0.0.1:9000;#    fastcgi_index  index.php;#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;#    include        fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {#    deny  all;#}}# another virtual host using mix of IP-, name-, and port-based configuration##server {#    listen       8000;#    listen       somename:8080;#    server_name  somename  alias  another.alias;#    location / {#        root   html;#        index  index.html index.htm;#    }#}# HTTPS server##server {#    listen       443 ssl;#    server_name  localhost;#    ssl_certificate      cert.pem;#    ssl_certificate_key  cert.key;#    ssl_session_cache    shared:SSL:1m;#    ssl_session_timeout  5m;#    ssl_ciphers  HIGH:!aNULL:!MD5;#    ssl_prefer_server_ciphers  on;#    location / {#        root   html;#        index  index.html index.htm;#    }#}}

整合SpringBoot

去github拉取源码,然后mvn clean install到本地仓库(官方没有发布到maven中心仓库),最后再引入依赖:

        <dependency>		<groupId>org.csource</groupId><artifactId>fastdfs-client-java</artifactId><version>1.30-SNAPSHOT</version></dependency>

image.png

# http连接超时时间
connect_timeout = 2
# tracker与storage网络通信超时时间
network_timeout = 30
charset = UTF-8
http.tracker_http_port = 80
http.anti_steal_token = no
http.secret_key = FastDFS1234567890
# tracker服务器地址,可以重复配置多个
tracker_server = tracker1:22122
tracker_server = tracker2:22122# 连接池配置
connection_pool.enabled = true
connection_pool.max_count_per_entry = 500
connection_pool.max_idle_time = 3600
connection_pool.max_wait_time_in_ms = 1000
package com.example.demofastdfs.test;import org.csource.common.MyException;
import org.csource.common.NameValuePair;
import org.csource.fastdfs.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;import java.io.*;
import java.util.Arrays;/*** @className: FastDFSDemo* @description: TODO 类描述* @author: liangshijie* @date: 2023/3/5**/
public class FastDFSDemo {private static final String CONF_NAME = "fdfs_client.conf";private StorageClient storageClient;private TrackerServer trackerServer;@Beforepublic void initStorageClient() throws Exception {ClientGlobal.init(CONF_NAME);System.out.println("network_timeout=" +ClientGlobal.g_network_timeout + "ms");System.out.println("charset=" + ClientGlobal.g_charset);TrackerClient tracker = new TrackerClient();trackerServer = tracker.getTrackerServer();StorageServer storageServer = new StorageServer("storage1", 23000, 0);storageClient = new StorageClient(trackerServer, storageServer);
//        storageClient = new StorageClient(trackerServer, storageServer);}/*** 测试上传文件*/@Testpublic void upload() throws Exception {// http://storage2:23000/group1/M00/00/00/wKjMqWQHVleAFzK7AAAWWKCNj-E2720984.jpgNameValuePair[] metaList = new NameValuePair[1];String local_filename = "dog.png";metaList[0] = new NameValuePair("fileName", local_filename);File file = new File("C:\\Users\\admin\\Desktop\\dog.png");InputStream inputStream = new FileInputStream(file);int length = inputStream.available();byte[] bytes = new byte[length];inputStream.read(bytes);String[] result = storageClient.upload_file(bytes, "jpg", metaList);
//        String[] result = storageClient.upload_file(bytes, null, metaList);System.out.println("result {}" + Arrays.asList(result));}//查询文件@Testpublic void testQueryFile() throws IOException, MyException {
//        group1, M00/00/00/wKjMqWQGk_WAesAEAAAWWKCNj-E4269595FileInfo fileInfo = storageClient.query_file_info("group1", "M00/00/00/wKjMqWQGk_WAesAEAAAWWKCNj-E4269595");System.out.println(fileInfo);}/*** 测试下载*/@Testpublic void download() throws Exception {String[] uploadresult = {"group1","M00/00/00/wKjMqWQGk_WAesAEAAAWWKCNj-E4269595"};byte[] result = storageClient.download_file(uploadresult[0],uploadresult[1]);String local_filename = "dog_two.png";
//文件写入磁盘writeByteToFile(result, local_filename);File file = new File(local_filename);System.out.println("file.isFile = " + file.isFile());}@Afterpublic void closeClient() {System.out.println("close connection");if (storageClient != null) {try {storageClient.close();} catch (Exception e) {e.printStackTrace();} catch (Throwable e) {e.printStackTrace();}}}public void writeByteToFile(byte[] fbyte, String fileName) throwsIOException {BufferedOutputStream bos = null;FileOutputStream fos = null;File file = new File(fileName);try {fos = new FileOutputStream(file);bos = new BufferedOutputStream(fos);bos.write(fbyte);} catch (Exception e) {e.printStackTrace();} finally {if (bos != null) {bos.close();}if (fos != null) {fos.close();}}}}

测试地址

http://storage1:8888/group1/M00/00/00/wKjMqWQHWfqAGM9mAAAWWKCNj-E813.jpg

http://www.dinnco.com/news/70490.html

相关文章:

  • 直播视频网站谷歌浏览器app下载
  • 杭州做网站企业平台推广怎么做
  • 哪些建材网站可以做宣传网站分为哪几种类型
  • wordpress wp json济南百度推广优化
  • 2021免费正能量网站营销管理培训课程培训班
  • dede wap网站模板下载网站搜索优化
  • 电子鲜花php网站怎么做宁波免费seo在线优化
  • 4g网络架构湖南专业seo优化
  • 做五金批发的适合在哪些网站电商网站建设教程
  • 做旅游网站平台合作入驻seo推广公司招商
  • 百度网站权重百度百家号官网
  • 福州网站建设网站设计网站推广微博推广费用一般多少
  • 北京网页设计公司招聘宁波最好的seo外包
  • 湘西网站建设吧互联网广告
  • 360搜索入口搜索引擎优化的基础是什么
  • 营销推广包括几个方面seo试用软件
  • 什么企业需要网站建设软文技巧
  • 企业做网站这些问题必须要注意国内广告联盟平台
  • 如何在电脑上建立网站百度快照怎么做
  • 湖南网站建设推荐近期国内新闻热点事件
  • 做签证网站百度网盘app官网下载
  • 中国建设网 中国建设网网络优化工程师是干什么的
  • 网站维护的具体问题营销策划案的模板
  • 如何为网站做面包屑导航个人永久免费自助建站
  • phpcms网站备份网络营销收获与体会
  • 个人备案可以做盈利网站吗网站注册流程和费用
  • 杭州专业做网站公司外包公司
  • 湖南it网站建设mxtia怎么去营销自己的产品
  • wordpress 添加广告插件吗网站搜索引擎优化的方法
  • 网站管理入口南京seo网站管理