| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> fastDFS学习相关 -> 正文阅读 |
|
[系统运维]fastDFS学习相关 |
FastDFS架构fastDFS由三大部分组成,负责调度的跟踪服务器、存储服务器和客户端,存储服务器跟追踪服务器都可以拥有不止一台 存储服务器存储服务器(Storage Server)也称之为数据服务器或者数据结点,用于存储数据的。不但保存了文件的也保存了文件的元数据,具体实现是通过Linux操作系统的文件管理方式实现的。 程序默认启动23000端口监听等待客户端的请求,同时会创建专门的线程周期性地向跟踪服务器上报一些重要信息,例如文件上传总数、成功上传文件数、删除文件总数、成功删除文件总数、下载文件总数、成功下载文件总数、删除文件数、成功删除文件总数等等。 FastDFS使用一种分组的机制,存储集群分为不同的组Group,组内有一台到多台服务器,方便扩展,每个组之间相互独立,相同组之间的服务器数据相互备份,新的存储加入到组内,数据会同步到组内,同步完成后开始对外工作 跟踪服务器跟踪服务器(Tracker),该程序启动后,默认会在22122端口监听。当存储服务器启动时,会根据其配置文件的信息主动和跟踪服务器通信汇报信息,跟踪服务器收到消息后判断其类型 当服务器上报信息,会用链表形式将存储服务器的状态信息保存起来,然后再用链表形式保存集群中各个分组的信息 当收到的是客户端的文件操作请求,跟踪服务器返回某个存储服务器的地址,客户端直接与该返回地址的存储服务器通信,进行文件操作。跟踪服务器可以调度客户端的任务请求,有负载均衡的效果。同时作为一个中间人,使客户端能够找到提供服务的存储服务器 客户端使用专有的ClientAPI接口,发起对文件的各种操作请求。但无论是何种请求,都需要跟追踪服务器先通信,获取对应的ip地址才能够与存储服务器通信。通信过程中均采用TCP/IP网络协议 FastDFS的运行机制文件上传客户端先跟追踪节点通信,追踪服务器按照一定的算法,轮询或者最大磁盘剩余空间找到一台存储服务器,然后将存储服务器的地址跟端口返回给客户端,客户端用TCP协议直接跟存储服务器通信上传文件。上传结束后,存储服务器将生成的文件ID返回给客户端并且由客户端保存,之后操作文件时候通过文件ID进行操作,在存储服务器上不再使用原有的文件名,而是使用某种HASH算法生成的新的文件名称 生成的文件ID由四个部分组成
上传的文件会根据某种特定的算法存储到某个目录下,文件可以均匀的分布到各个目录中,方便文件的查找 文件下载文件下载时候,客户端也需要跟追踪服务器通信,先将需要下载的文件ID发送到追踪服务器,追踪服务器将存储文件的存储服务器的ip根端口通过TCP协议发送给客户端,客户端根据返回的信息与存储服务器建立通信,从而实现文件下载 追踪服务器并不知道文件的存储位置,但客户端文件下载请求中包含了文件ID,追踪服务器可以根据Group知道文件所在的组,然后在该组内找到一台能够用的存储服务器,让客户端跟该存储服务器建立通信 存储服务器接收到的请求也包含文件ID的参数,依据文件ID的虚拟磁盘路径和两级目录迅速找到该文件,然后通过套接字将文件内容返回,完成下载 FastDFS的同步机制存储服务器启动时会根据配置文件中跟踪服务器的数量,创建相同数目的上报线程与他们分别通信。例如同一个组中有N台服务器,那么每一台服务器都有N-1个线程,每个线程都分别跟另外N-1个线程周期性通信,访问对方的binlog文件,binlog文件有三列数据,分别是时间戳、操作类型、文件id。可以根据操作类型知道是否是源数据,服务器只能从源数据服务器中备份,以此解决备份环路问题。 如果有数据更新,会将logbin文件发送给备份数据的服务器,从文件id中知道源文件的存储路径,从而备份好数据,达到数据一致性。 缺点:fastDFS并不是强一致性,丢失风险高,比如一个组有10台服务器,a服务器存了一个文件,其他服务器会从a备份,但只有5个服务器备份完成了,还有四个没有完成,这时候a挂机了,另外四个服务器数据是不完整的,只要源服务器写入就算成功 FastDFS负载均衡算法的分析与设计上传文件存储调度方式分组选择上传文件时,首先会选择将文件存储在那一组的服务器上,一般有三种算法
服务器选择选择好分组后,还需要从分组里面选择出一台最合适的服务器跟客户端进行交互,一般也有三种算法
下载文件调度方式对于下载,不需要进行分组选择,因为文件ID有分组,但需要从该分组中选择一台服务器,一般提供两种调度算法
调度方式分析轮转算法轮转算法是一种静态方法,就是服务器轮流存储一次,实际环境中一般不会手动选择 负载均衡算法FastDFS算法使用的是磁盘最大空间剩余,该方法可以最大限度的使用不同组别的磁盘空间组内分组可以分为可用分组和可存储分组 可用分租满足以下条件
可存储分组除了满足可用分组的条件,还增加了存储空间使用率这一指标,可存储分组的空间使用率不能够超过规定的比值 负载均衡算法具体实现,当任务到达追踪服务器时候,会先遍历分组链表,在分组链表中找出剩余空间最大的分组,然后检查空间使用率,满足条件,任务调度到该分组中 负载均衡算法的不足之处:
FastDFS负载均衡算法的改进分组负载均衡,在负载均衡算法上加入新的参数因子,进行分组时不是依据磁盘剩余空间,是以磁盘空间使用率和分组内存储服务器的任务使用率,任务使用率就是已分配的任务书和虽大任务数量的比值,最大任务数在配置文件中规定。这样一来,磁盘使用率越低,任务数量越少分组负载就越小,被选中概率就越大 完成分组选择后,组内选择存储服务器要考虑服务器性能和服务器负载情况,那么性能越好负载越小的服务器被选中概率越大。性能由多个因素决定,如CPU、磁盘IO、内存、网络等等 另补上一个很不错的课程:https://ke.qq.com/course/417774?flowToken=1040694 载越小的服务器被选中概率越大。性能由多个因素决定,如CPU、磁盘IO、内存、网络等等 另补上一个很不错的课程:云盘项目学习良心课程 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/16 0:48:23- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |