系统架构图

1、客服端
网络架构:b/s必须使用http协议;c/s协议可以任意选择、Qt-->http。
2、服务器
Nginx:能处理静态请求-->html,jpg;动态请求无法实现;服务器集群之后,每台服务器上部署的内容必须相同。
fastCGI:帮助服务器处理动态请求。
3、反向代理服务器
客户端并不能直接访问web服务器,直接访问的是反向代理服务器。
客户端请求发送给反向代理服务器,反向代理服务器将客户端请求转发给web服务器。
4、关系型数据库
文件的属性信息
用户的属性信息
5、redis 非关系型数据库(内存数据库)
作用:提高程序效率
存储:是服务器经常要从关系型数据中读取的数据
6、FASTDFS 分布式文件系统
存储文件内容
供用户去下载
一些概念
(1)什么是服务器?
硬件:配置高的电脑软件:电脑必须有一个解析http协议的软件(2)常见的web服务器
tomcat服务器weblogic服务器IIS服务器nginx服务器分布式文件系统
1、传统文件系统
2、分布式文件系统
分布式文件系统:1、需要有网络;2、多台主机(不需要同一地);3、需要管理者;4、编 写应用层的管理程序
分布式存储fastdfs
1、概述
2、fastDFS框架中的三个角色
追踪器Tracker(管理者):管理存储节点 -----最先启动追踪器
存储节点-storage:存储节点有多个-------1、第二个启动的角色;2、存储节点启动后,会单独开一个线程(汇报当前存储节点的容量和剩余容量;汇报数据的同步情况;汇报数据被下载的次数)
客服端:文件上传、文件下载-------最后启动----上传---连接追踪器,询问存储节点信息---我要上传1G的文件,询问哪个存储节点有足够的容量;追踪器查询,得到结果;追踪器将查到的存储节点的IP和端口;通过IP和端口连接存储节点;将文件的内容发送给存储节点。下载---连接追踪器,询问要下载文件到哪一个存储节点----追踪器查询得到结果----追踪器将查到的存储节点的IP和端口发送给客户端----下载文件
上传文件
下载文件
3、fastDFS集群
1.追踪器集群
为什么集群?避免单点故障多个Trancker如何工作轮询工作如何实现集群修改配置文件2.存储节点集群
fastDFS 管理存储节点的方式通过分组方式完成的集群方式(扩容方式)横向扩容--增加容量添加一台主机--》扩容增加假设当前有group1和group2添加一个新的分组->group3新主机属于第三组不同组的主机之间不需要通信纵向扩容(数据备份)假设当前有group1和group2将新的主机放到现有的组中每一组的主机数量从1-->N这n台主机的关系是相互备份的关系同一个组的主机需要通信每一组的容量==容量最小的主机如何实现通过修改配置文件4、fastDFS安装
安装测试5、fastDFS配置文件
tracker配置文件(1)#将追踪器和部署的主机的IP地址进行绑定,也可以不绑定
(2)#如果不指定,会自动绑定当前主机IP,如果是云服务器建议不要写
(3)bind_addr = 192.168.xx.xx
(4)#追踪器监听端口
(5)port = 22122
(6)#追踪器存储日志信息目录。xxx.pid文件,必须是一个存在的目录
(7)base_path = /home/yuqing/fastdfs
storage 配置文件(1)#当前存储节点对应的节点属于哪个组
(2)group_name=group1
(3)#当前存储节点和所应该的主机进行IP地址绑定,如果不写,有fastdfs自动绑定
(4)bind_addr =
(5)#储存节点绑定端口
(6)part = 23000
(7)#存储节点写log日志的路径
(8)base_path = /home/yuqing/fastdfs
(9)#存储节点提供存储文件的路径个数
(10)store_path_count = 1
(11)#具体的存储路径
(12)store_path0 = /home/yuqing/fastdfs
(13)#追踪器的地址信息
(14)tracker_server = 192.168.209.121:22122
客户端配置(1)#客户端写log日志的目录
(2)#路径必须存在
(3)#当前用户对该路径中的文件有读写权限
(4)#当前用robin
(5)#指定路径属于root
(6)base_path=/home/yuqing/fastdfs
(7)#要连接追踪器的地址信息
(8)tracker_server=192.168.0.197:22122
6、fastDFS的启动
第一个启动追踪器---守护进程(1)#启动程序在 ,/usr/bin/fdfs_*
(2)#启动
(3)fdfs_trackerd 追踪器的配置文件(/etc/fdfs/tracker.conf)
(4)#关闭
(5)fdfs_trackerd 追踪器的配置文件(/etc/fdfs/tracker.conf) stop
(6)#重启
(7)fdfs_trackerd 追踪器的配置文件(/etc/fdfs/tracker.conf) restart
第二个启动存储节点--守护进程(1)#启动程序在 ,/usr/bin/fdfs_*
(2)#启动
(3)fdfs_storaged 追踪器的配置文件(/etc/fdfs/storage.conf)
(4)#关闭
(5)fdfs_storaged追踪器的配置文件(/etc/fdfs/storage.conf) stop
(6)#重启
(7)fdfs_storaged 追踪器的配置文件(/etc/fdfs/storage.conf) restart
客户端--普通进程(1)#上传
(2)fdfs_upload_file 客户端配置文件(/etc/fdfs/client.conf)要上传的文件
(3)#得到结果字符串:group1/M00/00/00/wKgUgmJ8g6OAU57cAABWPdaHXZc70153.c
(4)#下载
(5)fdfs_download_file 客户端配置文件(/etc/fdfs/client.conf)上传之后得到的字符串
(5)#得到下载文件
fdfs_monitor使用对file_id的解释group1/M00/00/00/wKgUgmJ8g6OAU57cAABWPdaHXZc70153.c
group1:文件上传到了存储节点的哪个组;如果有多组这个组名可变
M00(可变):虚拟目录----和存储节点的配置项有映射(store_path0 = /home/yuqing/fastdfs/data----M00 、store_path1 = /home/yuqing/fastdfs1/data---M01)
00/00:实际路径
wKgUgmJ8g6OAU57cAABWPdaHXZc70153:
文件包含的信息
采用base64编码(64个字符来替换数据)
包含的字段包括:源文件storage service IP地址、文件创建时间、文件大小、文件CRC32校验码(循环冗余校验)、随机数
7、上传下载文件代码实现
1、使用多进程方式实现
exec函数族函数
execl
execlp
父进程
子进程-->执行exelp("file_upload_file";"xx",arg,NULL),有结果,输出终端
不让它写入终端-->重定向dup2(old,new)
old-->标准输出
new-->管道写端
文件描述符
数据快读到内存-->子进程
数据最终要给到父进程
pipe-->读端、写端
在子进程创建之前创建
父进程
读管道-->内存
内存数据写数据库
2、使用fastDFS API实现
8、源码安装--回顾


还没有评论,来说两句吧...