FDFS
FastDFS 分布式文件系统
为什么我们需要它?
众所周知,在微服务架构中,从网关进来的请求会通过Ribbon进行负载均衡,可能造成你每次请求都有可能是不同的服务器处理的
,因为,为了提高系统的吞吐量,某些服务被集群化,在这种情况下,当用户需要进行文件存储的时候,如果说把文件存储在当前处理请求的服务器中,那么下次当你想要获得这个文件的时候可能就获取不到了
,因为你的这次请求可能交由另一个服务器处理了。为了解决在分布式系统中文的件存储这一问题,FastDFS应运而生
FastDFS是什么?
这是一款开源的分布式文件系统,负责对文件进行存储,主要功能包括:文件存储、文件同步、文件访问等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等、并且注重高可用、高性能,
使用FastDFS可以很容易的搭建一套高性能的文件服务器集群提供上传、下载文件等服务
FastDFS的结构图:
FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)
。在Storage集群中,每一个Volume也称作一个组(group)
FastDFS是怎么存储文件的?
存储过程
Tracker主要负责对请求进行调度,起到负载均衡的作用,类似于微服务中的注册中心(有心跳机制等等)
,它有每一个存储点的信息,在收到客户端发来的存储文件的请求时,会通过负载均衡算法来选择某一个Storage来存储该文件。
为什么是都是集群?
之前提到过高可用、负载均衡等名词,都是通过跟踪器(tracker)的集群化来保证的。当某一个Tracker宕机后,其他的Tracker可以继续对存储请求进行处理,这就保证了高可用。在决定文件要存到哪一个Storage的时候会使用随机或轮询等负载均衡的算法
,来保证每个Storage所存储的数据比较均匀,之前也提到过冗余备份、线性扩容,是通过组(group)
来保证的。
想想为什么会出现组这个概念呢?
因为,当我们进行文件存储的时候,不是说把文件存储到某个Storage后就万事大吉了,万一某台机器故障了怎么办?
那里面的数据可能就都要丢失了,这是一件非常严重的情况,为了解决这种情况,FastDFS中可以采用多个Storage来存储相同的文件
,这样做的目的是进行数据备份,即冗余备份,解决了某个Storage出现故障时文件丢失的问题。这些存储相同文件的Storage就属于同一个组(group)。还有一种情况,当存储的文件逐渐增多时,如何进行扩容呢?根据FastDFS的结构,我们可以通过增加组(group)的方式来扩容。
AWS架构图
CDN:
- 什么是CDN?
CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器, 通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。 CDN的关键技术主要有内容存储和分发技术。
-
基本原理
CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。 -
基本思路
基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节 点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。 -
服务模式
内容分发网络(CDN)是一种新型网络构建方式,它是为能在传统的IP网发布宽带丰富媒体而特别优化的网络覆盖层;而从广义的角度,CDN代表了一种基于质量与秩序的网络服务模式。
简单地说,内容分发网络(CDN)是一个经策略性部署的整体系统,包括分布式存储、负载均衡、网络请求的重定向和内容管理4个要件,而内容管理和全局的网络流量管理(Traffic Management)是CDN的核心所在。通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务。
总的来说,内容服务基于缓存服务器,也称作代理缓存(Surrogate),它位于网络的边缘,距用户仅有"一跳"(Single Hop)之遥。同时,代理缓存是内容提供商源服务器(通常位于CDN服务提供商的数据中心)的一个透明镜像。这样的架构使得CDN服务提供商能够代表他们客户,即内容供应商,向最终用户提供尽可能好的体验,而这些用户是不能容忍请求响应时间有任何延迟的。
项目相关
默认端口:22122
安装FastDFS
Tracker Server:跟踪服务器,主要做调度工作,起到均衡的作用;负责管理所有的 storage server和 group,每个 storage 在启动后会连接 Tracker,告知自己所属 group 等信息,并保持周期性心跳。
Storage Server:存储服务器,主要提供容量和备份服务;以 group 为单位,每个 group 内可以有多台 storage server,数据互为备份。
拉取提供的镜像文件
docker load -i 文件路径/fastdfs_docker.tar
# 安装tracker
docker run -dti --network=host --name tracker -v /var/fdfs/tracker:/var/fdfs delron/fastdfs tracker
# 安装storage, IP地址用虚拟机的, 如果是云服务器就用云服务器的IP
docker run -dti --network=host --name storage -e TRACKER_SERVER=192.168.216.137:22122 -v /var/fdfs/storage:/var/fdfs delron/fastdfs storage
# 查看容器是否有开启
dcoker container ls -a
如果无法重新运行,可以删除/var/fdfs/storage/data目录下的fdfs_storaged.pid 文件,然后重新运行storage。
# 使用FastDFS客户端,需要有配置文件, 创建utils/fastdfs/client.conf配置文件
课件提供 需要修改地方
tracker_server=运行tracker服务的机器ip:22122
# 上传文件需要先创建fdfs_client.client.Fdfs_client的对象,并指明配置文件,如创建utils/fastdfs/fdfs.py文件
from fdfs_client.client import Fdfs_client
# 指定fdfs客户端配置文件所在路径
FDFS_Client = Fdfs_client('utils/fastdfs/client.conf')
# 安装相关包
pip install fdfs_client-py-master.zip
pip install mutagen
pip install requests
# settings里面配置 地址
# FastDFS
FDFS_URL = 'http://192.168.216.137:8888/'
FDFS_CLIENT_CONF = os.path.join(BASE_DIR, 'utils/fastdfs/client.conf')
# 通过 python manage.py shell 进入命令行 在命令行中测试
from fdfs_client.client import Fdfs_client
FDFS_Client = Fdfs_client('utils/fastdfs/client.conf')
ret = FDFS_Client.upload_by_filename('media/tian.jpg')
# 文件上传后访问路径
http://192.168.216.137:8888/group1/M00/00/00/wKjYiVzeVpyAFbG8AACylQSEBq8752.jpg