什么是高可用?
通俗讲就是在任何异常情况下,系统依然能正常提供服务。尽量缩短系统不可用时间,以提高系统的可用时间。大多按照年可用时间99.99%为标准。平摊到每个月不可用时间在几十分钟内。如何做到高可用?1,系统设计上避免使用单点。2,自动故障转移。
我们下面来看看FastDFS是如何做到这两点的。通过下图来了解下FastDFS的架构。
Tracker server主要作用是负载均衡和调度,通过Tracker server在文件上传时可以根据一些策略找到Storage server提供文件上传服务。Tracker server可以由一台或者N台服务器组成。可以随时增加或者下线不会影响线上服务,同时可以根据线上服务器的压力情况随时增加或者减少。
Tracker负责管理Storage和group。每个storage会去连结Tracker,并切报告自己所属的group等信息,并保持和Tracker周期性的心跳。tracker根据storage的心跳信息建立 group-storage server list的映射表。所有的元信息很少,都存储在内存中。这样就使Tracker非常容易扩展。
Storage server:可以称为存储服务器。客户端上传的文件最终存储在Storage服务器上,Storage server没有实现自己的文件系统而是利用操作系统 的文件系统来管理文件。存储系统由一个或多个组组成,组与组之间的文件是相互独立的,所有组的文件容量累加就是整个存储系统中的文件容量。
文件上传流程
image1,Client想上传图片,它先向Tracker进行询问,Tracker查看一下登记信息之后,告诉Client哪个storage当前空闲,Tracker会把IP和端口号都返回给Client,Client在拿到IP和端口号之后,便不再需要通过Tracker,直接便向Storage进行上传图片,Storage在保存图片的同时,会向Tracker进行汇报,告诉Tracker它当前是否还留有剩余空间,以及剩余空间大小。汇报完之后,Storage将服务器上存储图片的地址返回给Client,Client可以拿着这个地址进行访问图片。
我们来了解下文件索引信息。主要包括:组名,虚拟磁盘路径,数据两级目录,文件名。如下所示:
image我们来看看文件索引的具体解释和组成部分:
组名:文件上传后所在的storage组名称,在文件上传成功后由storage服务器返回,需要客户端自行保存。
虚拟磁盘路径:storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。
数据两级目录:storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。文件名:与文件上传时不同。是由存储服务器根据特定信息生成,
文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息
文件下载流程
如图所示FastDFS下载的时序图
image图解如下
Storage Server启动后会主动去连结Tracker Server,周期性向Tracker Server发送心跳。
然后client询问tracker下载文件的storage,参数为文件标识(组名和文件名),tracker返回一台可用的storage。
最后client直接和storage通讯完成文件下载。
我们在来看看FastDFS下载的运行的示意图
FastDFS下载FastDFS高可用架构实践。
!FastDFS高可用架构实践](https://img.haomeiwen.com/i7063537/78ecc4573e6372ce?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
如果FastDFS压力过大此时我们如何在对这个架构进行优化呢?我们可以使用ATS做文件缓存服务。
增加缓存我们通过对FastDFS中的Tracker server和Storage server 的工作流程的了解,以及上传和下载的具体场景图列,可以发现它做到了冗余,做到了自动故障转移。
网友评论