前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分布式文件系统(HDFS和FastDFS)

分布式文件系统(HDFS和FastDFS)

作者头像
码客说
发布2020-10-23 11:01:48
4.3K0
发布2020-10-23 11:01:48
举报
文章被收录于专栏:码客码客

HDFS和FastDFS对比

测试项

HDFS

FastDFS

25个小文件上传

13599ms

1949ms

318个图片上传

63460ms

9585ms

3个700m视频上传

62092ms

58137ms

3个2g视频上传

171743ms

131861ms

25个小文件下载

13008ms

1218ms

318个图片下载

24942ms

7051ms

3个700m视频下载

69266ms

36144ms

3个2g视频下载

192315ms

138215ms

25个小文件删除

10517ms

62ms

318个图片删除

12828ms

811ms

3个700m视频删除

10286ms

150ms

3个2g视频删除

10594ms

255ms

结论

  1. FastDFS客户端底层连接服务端使用的是Socket,本身速度就要快很多。
  2. HDFS在做删除测试时,明显较慢的地方是在创建到服务端的连接上,实际删除文件的速度很快。由于每次测试都需要先创建到服务端的连接,HDFS在这块消耗较大,在实际场景下,差距应该没有这么大。
  3. 两者的适用场景确有不同,FastDFS更适合小文件的高效存取,而HDFS更适合超大文件上传后使用Mapreduce去做大数据处理

简介

概要

FastDFS 是一个开源的高性能分布式文件系统(DFS)。 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡。主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。

FastDFS 系统有三个角色:跟踪服务器(Tracker Server)、存储服务器(Storage Server)和客户端(Client)。

Tracker Server:跟踪服务器,主要做调度工作,起到均衡的作用;负责管理所有的 storage server和 group,每个 storage 在启动后会连接 Tracker,告知自己所属 group 等信息,并保持周期性心跳。

Storage Server:存储服务器,主要提供容量和备份服务;以 group 为单位,每个 group 内可以有多台 storage server,数据互为备份。

Client:客户端,上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。

FastDFS开源地址:https://github.com/happyfish100

封装的FastDFS Java API:https://github.com/bojiangzhou/lyyzoo-fastdfs-java

文件上传

img
img

文件同步

写文件时,客户端将文件写至group内一个storage server即认为写文件成功,storage server写完文件后,会由后台线程将文件同步至同group内其他的storage server。

每个storage写文件后,同时会写一份binlog,binlog里不包含文件数据,只包含文件名等元信息,这份binlog用于后台同步,storage会记录向group内其他storage同步的进度,以便重启后能接上次的进度继续同步;进度以时间戳的方式进行记录,所以最好能保证集群内所有server的时钟保持同步。

storage的同步进度会作为元数据的一部分汇报到tracker上,tracke在选择读storage的时候会以同步进度作为参考。

文件下载

img
img

安装FastDFS环境

操作环境:CentOS7 X64

我把所有的安装包下载到/softpackages/下,解压到当前目录。

1. 下载安装 libfastcommon

libfastcommon是从 FastDFS 和 FastDHT 中提取出来的公共 C 函数库,基础环境,安装即可 。

① 下载libfastcommon

代码语言:javascript
复制
cd /softpackages
wget https://github.com/happyfish100/libfastcommon/archive/V1.0.7.tar.gz

② 解压

代码语言:javascript
复制
tar -zxvf V1.0.7.tar.gz
cd libfastcommon-1.0.7

③ 编译、安装

代码语言:javascript
复制
./make.sh
./make.sh install

④ libfastcommon.so 安装到了/usr/lib64/libfastcommon.so,但是FastDFS主程序设置的lib目录是/usr/local/lib,所以需要创建软链接。

代码语言:javascript
复制
ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so

2. 下载安装FastDFS

① 下载FastDFS

代码语言:javascript
复制
cd /softpackages
wget https://github.com/happyfish100/fastdfs/archive/V5.05.tar.gz

② 解压

代码语言:javascript
复制
tar -zxvf V5.05.tar.gz
cd fastdfs-5.05

③ 编译、安装

代码语言:javascript
复制
./make.sh
./make.sh install

④ 默认安装方式安装后的相应文件与目录 A、服务脚本:

/etc/init.d/fdfs_storaged /etc/init.d/fdfs_tracker

B、配置文件(这三个是作者给的样例配置文件) :

/etc/fdfs/client.conf.sample /etc/fdfs/storage.conf.sample /etc/fdfs/tracker.conf.sample

C、命令工具在 /usr/bin/ 目录下:

fdfs_appender_test fdfs_appender_test1 fdfs_append_file fdfs_crc32 fdfs_delete_file fdfs_download_file fdfs_file_info fdfs_monitor fdfs_storaged fdfs_test fdfs_test1 fdfs_trackerd fdfs_upload_appender fdfs_upload_file stop.sh restart.sh

⑤ FastDFS 服务脚本设置的 bin 目录是 /usr/local/bin, 但实际命令安装在 /usr/bin/ 下。

建立 /usr/bin/usr/local/bin 的软链接,我是用这种方式。  

代码语言:javascript
复制
ln -s /usr/bin/fdfs_trackerd   /usr/local/bin
ln -s /usr/bin/fdfs_storaged   /usr/local/bin
ln -s /usr/bin/stop.sh         /usr/local/bin
ln -s /usr/bin/restart.sh      /usr/local/bin

3. 配置FastDFS跟踪器(Tracker)

配置文件详细说明参考:FastDFS 配置文件详解

① 进入 /etc/fdfs,复制 FastDFS 跟踪器样例配置文件 tracker.conf.sample,并重命名为 tracker.conf。

代码语言:javascript
复制
cd /etc/fdfs
cp tracker.conf.sample tracker.conf
vi tracker.conf

② 编辑tracker.conf ,标红的需要修改下,其它的默认即可。

代码语言:javascript
复制
# 配置文件是否不生效,false 为生效
disabled=false
# 提供服务的端口
port=22122
# Tracker 数据和日志目录地址(根目录必须存在,子目录会自动创建)
base_path=/data/fastdfs/tracker
# HTTP 服务端口
http.server_port=8080

③ 创建tracker基础数据目录,即base_path对应的目录

代码语言:javascript
复制
mkdir -p /data/fastdfs/tracker

④ 防火墙中打开跟踪端口(默认的22122)

代码语言:javascript
复制
vi /etc/sysconfig/iptables

添加如下端口行:

-A INPUT -m state –state NEW -m tcp -p tcp –dport 22122 -j ACCEPT

重启防火墙:

代码语言:javascript
复制
service iptables restart

⑤ 启动Tracker

初次成功启动,会在 /data/fdfsdfs/tracker/ (配置的base_path)下创建 data、logs 两个目录。

代码语言:javascript
复制
# 可以用这种方式启动
/etc/init.d/fdfs_trackerd start

# 也可以用这种方式启动,前提是上面创建了软链接,后面都用这种方式
service fdfs_trackerd start

查看 FastDFS Tracker 是否已成功启动 ,22122端口正在被监听,则算是Tracker服务安装成功。

代码语言:javascript
复制
netstat -unltp|grep fdfs
img
img

关闭Tracker命令:

代码语言:javascript
复制
service fdfs_trackerd stop

⑥ 设置Tracker开机启动

代码语言:javascript
复制
chkconfig fdfs_trackerd on

或者

代码语言:javascript
复制
vi /etc/rc.d/rc.local

加入配置

/etc/init.d/fdfs_trackerd start

⑦ tracker server 目录及文件结构

Tracker服务启动成功后,会在base_path下创建data、logs两个目录。目录结构如下:

代码语言:javascript
复制
${base_path}
  |__data
  |   |__storage_groups.dat:存储分组信息
  |   |__storage_servers.dat:存储服务器列表
  |__logs
  |   |__trackerd.log: tracker server 日志文件

4. 配置 FastDFS 存储 (Storage)

① 进入 /etc/fdfs 目录,复制 FastDFS 存储器样例配置文件 storage.conf.sample,并重命名为 storage.conf

代码语言:javascript
复制
cd /etc/fdfs
cp storage.conf.sample storage.conf
vi storage.conf

② 编辑storage.conf

标红的需要修改,其它的默认即可。

代码语言:javascript
复制
# 配置文件是否不生效,false 为生效
disabled=false 

# 指定此 storage server 所在 组(卷)
group_name=group1

# storage server 服务端口
port=23000

# 心跳间隔时间,单位为秒 (这里是指主动向 tracker server 发送心跳)
heart_beat_interval=30

# Storage 数据和日志目录地址(根目录必须存在,子目录会自动生成)
base_path=/data/fastdfs/storage

# 存放文件时 storage server 支持多个路径。这里配置存放文件的基路径数目,通常只配一个目录。
store_path_count=1


# 逐一配置 store_path_count 个路径,索引号基于 0。
# 如果不配置 store_path0,那它就和 base_path 对应的路径一样。
store_path0=/data/fastdfs/file

# FastDFS 存储文件时,采用了两级目录。这里配置存放文件的目录个数。 
# 如果本参数只为 N(如: 256),那么 storage server 在初次运行时,会在 store_path 下自动创建 N * N 个存放文件的子目录。
subdir_count_per_path=256

# tracker_server 的列表 ,会主动连接 tracker_server
# 有多个 tracker server 时,每个 tracker server 写一行
tracker_server=file.psvmc.cn:22122
# 允许系统同步的时间段 (默认是全天) 。一般用于避免高峰同步产生一些问题而设定。	
sync_start_time=00:00
sync_end_time=23:59
# 访问端口
http.server_port=8888

tracker_server不能写127.0.0.1或localhost

③ 创建Storage基础数据目录,对应base_path目录

代码语言:javascript
复制
mkdir -p /data/fastdfs/storage
# 这是配置的store_path0路径
mkdir -p /data/fastdfs/file

④ 防火墙中打开存储器端口(默认的 23000)

代码语言:javascript
复制
vi /etc/sysconfig/iptables

添加如下

代码语言:javascript
复制
-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT

重启防火墙:

代码语言:javascript
复制
service iptables restart
img
img

⑤ 启动 Storage

启动Storage前确保Tracker是启动的。初次启动成功,会在 /data/fastdfs/storage 目录下创建 data、 logs 两个目录。

代码语言:javascript
复制
# 可以用这种方式启动
/etc/init.d/fdfs_storaged start

# 也可以用这种方式,后面都用这种
service fdfs_storaged start

查看 Storage 是否成功启动,23000 端口正在被监听,就算 Storage 启动成功。

代码语言:javascript
复制
netstat -unltp|grep fdfs
img
img

关闭Storage命令:

代码语言:javascript
复制
service fdfs_storaged stop

查看Storage和Tracker是否在通信:

代码语言:javascript
复制
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
微信截图_20201013170934
微信截图_20201013170934

⑥ 设置 Storage 开机启动

代码语言:javascript
复制
chkconfig fdfs_storaged on

或者:

代码语言:javascript
复制
vi /etc/rc.d/rc.local

加入配置:

代码语言:javascript
复制
/etc/init.d/fdfs_storaged start

⑦ Storage 目录

同 Tracker,Storage 启动成功后,在base_path 下创建了data、logs目录,记录着 Storage Server 的信息。

在 store_path0 目录下,创建了N*N个子目录:

img
img

5. 文件上传测试

① 修改 Tracker 服务器中的客户端配置文件

代码语言:javascript
复制
cd /etc/fdfs
cp client.conf.sample client.conf
vi client.conf

修改如下配置即可,其它默认。

代码语言:javascript
复制
# Client 的数据和日志目录
base_path=/data/fastdfs/client

# Tracker端口
tracker_server=file.psvmc.cn:22122

② 上传测试

在linux内部执行如下命令上传 namei.jpeg 图片

代码语言:javascript
复制
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf namei.jpeg

上传成功后返回文件ID号:group1/M00/00/00/wKgz6lnduTeAMdrcAAEoRmXZPp870.jpeg

img
img

返回的文件ID由group、存储目录、两级子目录、fileid、文件后缀名(由客户端指定,主要用于区分文件类型)拼接而成。

img
img

安装Nginx

上面将文件上传成功了,但我们无法下载。因此安装Nginx作为服务器以支持Http方式访问文件。同时,后面安装FastDFS的Nginx模块也需要Nginx环境。

Nginx只需要安装到StorageServer所在的服务器即可,用于访问文件。我这里由于是单机,TrackerServer和StorageServer在一台服务器上。

1. 安装Nginx所需环境

① gcc 安装

代码语言:javascript
复制
yum install gcc-c++

② PCRE pcre-devel 安装

代码语言:javascript
复制
yum install -y pcre pcre-devel

③ zlib 安装

代码语言:javascript
复制
yum install -y zlib zlib-devel

④ OpenSSL 安装

代码语言:javascript
复制
yum install -y openssl openssl-devel

2. 安装Nginx

① 下载nginx

代码语言:javascript
复制
cd /softpackages
wget -c https://nginx.org/download/nginx-1.12.1.tar.gz

② 解压

代码语言:javascript
复制
tar -zxvf nginx-1.12.1.tar.gz
cd nginx-1.12.1

③ 使用默认配置

代码语言:javascript
复制
./configure

④ 编译、安装

代码语言:javascript
复制
make && make install

配置文件路径

vi /usr/local/nginx/conf/nginx.conf

⑤ 启动nginx

代码语言:javascript
复制
cd /usr/local/nginx/sbin/
./nginx

其它命令

代码语言:javascript
复制
./nginx -s stop
./nginx -s quit
./nginx -s reload

⑥ 设置开机启动

代码语言:javascript
复制
vi /etc/rc.local

添加一行

代码语言:javascript
复制
/usr/local/nginx/sbin/nginx

设置执行权限

代码语言:javascript
复制
chmod 755 /etc/rc.local

⑦ 查看nginx的版本及模块

代码语言:javascript
复制
/usr/local/nginx/sbin/nginx -V

⑧ 防火墙中打开Nginx端口(默认的 80)

添加后就能在本机使用80端口访问了。

代码语言:javascript
复制
vi /etc/sysconfig/iptables

添加如下端口行:

代码语言:javascript
复制
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

重启防火墙

代码语言:javascript
复制
service iptables restart

3. 访问文件

简单的测试Nginx是否安装成功,下述操作可以跳过,直接配置Nginx的FastDFS模块

① 修改nginx.conf

代码语言:javascript
复制
vi /usr/local/nginx/conf/nginx.conf

添加如下行,将 /group1/M00 映射到 /data/fastdfs/file/data

代码语言:javascript
复制
location /group1/M00 {
    alias /data/fastdfs/file/data;
}

重启nginx

代码语言:javascript
复制
/usr/local/nginx/sbin/nginx -s reload

② 在浏览器访问之前上传的图片、成功。

http://file.psvmc.cn/group1/M00/00/00/wKgz6lnduTeAMdrcAAEoRmXZPp870.jpeg

4. 安装配置Nginx模块

① fastdfs-nginx-module 模块说明

  FastDFS 通过 Tracker 服务器,将文件放在 Storage 服务器存储, 但是同组存储服务器之间需要进行文件复制, 有同步延迟的问题。

  假设 Tracker 服务器将文件上传到了 192.168.51.128,上传成功后文件 ID已经返回给客户端。

  此时 FastDFS 存储集群机制会将这个文件同步到同组存储 192.168.51.129,在文件还没有复制完成的情况下,客户端如果用这个文件 ID 在 192.168.51.129 上取文件,就会出现文件无法访问的错误。

  而 fastdfs-nginx-module 可以重定向文件链接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。

② 下载 fastdfs-nginx-module、解压

代码语言:javascript
复制
cd /softpackages
# 这里为啥这么长一串呢,因为最新版的master与当前nginx有些版本问题。
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip

# 解压
unzip 5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip

# 重命名
mv fastdfs-nginx-module-5e5f3566bbfa57418b5506aaefbe107a42c9fcb1  fastdfs-nginx-module-master

③ 配置Nginx

在nginx中添加模块

代码语言:javascript
复制
# 先停掉nginx服务
/usr/local/nginx/sbin/nginx -s stop

# 进入解压包目录
cd /softpackages/nginx-1.12.1/

# 添加模块
./configure --add-module=../fastdfs-nginx-module-master/src

# 重新编译、安装
make && make install

④ 查看Nginx的模块

代码语言:javascript
复制
/usr/local/nginx/sbin/nginx -V

有下面这个就说明添加模块成功

img
img

⑤ 复制 fastdfs-nginx-module 源码中的配置文件到/etc/fdfs 目录, 并修改

代码语言:javascript
复制
cd /softpackages/fastdfs-nginx-module-master/src

cp mod_fastdfs.conf /etc/fdfs/

修改如下配置,其它默认

代码语言:javascript
复制
# 连接超时时间
connect_timeout=10

# Tracker Server
tracker_server=file.psvmc.cn:22122
# StorageServer 默认端口
storage_server_port=23000

# 如果文件ID的uri中包含/group**,则要设置为true
url_have_group_name = true

# Storage 配置的store_path0路径,必须和storage.conf中的一致
store_path0=/data/fastdfs/file

⑥ 复制 FastDFS 的部分配置文件到/etc/fdfs 目录

代码语言:javascript
复制
cd /softpackages/fastdfs-5.05/conf/

cp anti-steal.jpg http.conf mime.types /etc/fdfs/

⑦ 配置nginx,修改nginx.conf

代码语言:javascript
复制
vi /usr/local/nginx/conf/nginx.conf

修改配置,其它的默认

在80端口下添加fastdfs-nginx模块

代码语言:javascript
复制
location ~/group([0-9])/M00 {
    ngx_fastdfs_module;
}
img
img

注意:

  listen 80 端口值是要与 /etc/fdfs/storage.conf 中的 http.server_port=80 (前面改成80了)相对应。如果改成其它端口,则需要统一,同时在防火墙中打开该端口。

  location 的配置,如果有多个group则配置location ~/group([0-9])/M00 ,没有则不用配group。

⑧ 在/data/fastdfs/file 文件存储目录下创建软连接,将其链接到实际存放数据的目录,这一步可以省略。

代码语言:javascript
复制
ln -s /data/fastdfs/file/data/ /data/fastdfs/file/data/M00

⑨ 启动nginx

代码语言:javascript
复制
/usr/local/nginx/sbin/nginx

打印处如下就算配置成功

img
img

⑩ 在地址栏访问。

能下载文件就算安装成功。注意和第三点中直接使用nginx路由访问不同的是,这里配置 fastdfs-nginx-module 模块,可以重定向文件链接到源服务器取文件。

http://file.psvmc.cn/group1/M00/00/00/wKgz6lnduTeAMdrcAAEoRmXZPp870.jpeg

最终部署结构图:可以按照下面的结构搭建环境。

img
img

Java客户端

前面文件系统平台搭建好了,现在就要写客户端代码在系统中实现上传下载,这里只是简单的测试代码。

1. 搭建Java开发环境

① 项目中使用maven进行依赖管理,可以在pom.xml中引入如下依赖即可:

代码语言:javascript
复制
<dependency>
   <groupId>net.oschina.zcx7878</groupId>
   <artifactId>fastdfs-client-java</artifactId>
   <version>1.27.0.0</version>
</dependency>

其它的方式,参考官方文档:https://github.com/happyfish100/fastdfs-client-java

② 引入配置文件

可直接复制包下的 fastdfs-client.properties.sample 或者 fdfs_client.conf.sample,到你的项目中,去掉.sample。

img
img

我这里直接复制 fastdfs-client.properties.sample 中的配置到项目配置文件 config.properties 中,修改tracker_servers。只需要加载这个配置文件即可

img
img

2. 客户端API

个人封装的FastDFS Java API以同步到github:https://github.com/bojiangzhou/lyyzoo-fastdfs-java.git

权限控制

前面使用nginx支持http方式访问文件,但所有人都能直接访问这个文件服务器了,所以做一下权限控制。

FastDFS的权限控制是在服务端开启token验证,客户端根据文件名、当前unix时间戳、秘钥获取token,在地址中带上token参数即可通过http方式访问文件。

① 服务端开启token验证

修改http.conf

代码语言:javascript
复制
vi /etc/fdfs/http.conf

按如下配置

代码语言:javascript
复制
# 设置为true表示开启token验证
http.anti_steal.check_token=true
# 设置token失效的时间单位为秒(s)
http.anti_steal.token_ttl=1800
# 密钥,跟客户端配置文件的fastdfs.http_secret_key保持一致
http.anti_steal.secret_key=FASTDFS1234567890

# 如果token检查失败,返回的页面
http.anti_steal.token_check_fail=/data/fastdfs/page/403.html

记得重启服务。

② 配置客户端

客户端只需要设置如下两个参数即可,两边的密钥保持一致。

代码语言:javascript
复制
# token 防盗链功能
fastdfs.http_anti_steal_token=true
# 密钥
fastdfs.http_secret_key=FASTDFS1234567890

③ 客户端生成token

访问文件需要带上生成的token以及unix时间戳,所以返回的token是token和时间戳的拼接。

之后,将token拼接在地址后即可访问:file.psvmc.cn/group1/M00/00/00/wKgzgFnkaXqAIfXyAAEoRmXZPp878.jpeg?token=078d370098b03e9020b82c829c205e1f&ts=1508141521

代码语言:javascript
复制
/**
* 获取访问服务器的token,拼接到地址后面
*
* @param filepath 文件路径 group1/M00/00/00/wKgzgFnkTPyAIAUGAAEoRmXZPp876.jpeg
* @param httpSecretKey 密钥
* @return 返回token,如: token=078d370098b03e9020b82c829c205e1f&ts=1508141521
*/
public static String getToken(String filepath, String httpSecretKey){
    // unix seconds
    int ts = (int) Instant.now().getEpochSecond();
    // token
    String token = "null";
    try {
        token = ProtoCommon.getToken(getFilename(filepath), ts, httpSecretKey);
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } catch (MyException e) {
        e.printStackTrace();
    }

    StringBuilder sb = new StringBuilder();
    sb.append("token=").append(token);
    sb.append("&ts=").append(ts);

    return sb.toString();
}

④ 注意事项

如果生成的token验证无法通过,请进行如下两项检查:   A. 确认调用token生成函数(ProtoCommon.getToken),传递的文件ID中没有包含group name。传递的文件ID格式形如:M00/00/00/wKgzgFnkTPyAIAUGAAEoRmXZPp876.jpeg

  B. 确认服务器时间基本是一致的,注意服务器时间不能相差太多,不要相差到分钟级别。

⑤ 对比下发现,如果系统文件隐私性较高,可以直接通过fastdfs-client提供的API去访问即可,不用再配置Nginx走http访问。配置Nginx的主要目的是为了快速访问服务器的文件(如图片),如果还要加权限验证,则需要客户端生成token,其实已经没有多大意义。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • HDFS和FastDFS对比
  • 简介
    • 概要
      • 文件上传
        • 文件同步
          • 文件下载
          • 安装FastDFS环境
            • 1. 下载安装 libfastcommon
              • 2. 下载安装FastDFS
                • 3. 配置FastDFS跟踪器(Tracker)
                  • 4. 配置 FastDFS 存储 (Storage)
                    • 5. 文件上传测试
                    • 安装Nginx
                      • 1. 安装Nginx所需环境
                        • 2. 安装Nginx
                          • 3. 访问文件
                            • 4. 安装配置Nginx模块
                            • Java客户端
                              • 1. 搭建Java开发环境
                                • 2. 客户端API
                                • 权限控制
                                相关产品与服务
                                文件存储
                                文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
                                领券
                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档