sql server数据求和
分布式文件系统FastDFS如何做到高可用?
分布式文件系统FastDFS如何做到高可用?
大家好我是数据僧,下面是我对这个问题的理解,不对之处还望指正。
什么是高可用?通俗讲就是在任何异常情况下,系统依然能正常提供服务。尽量缩短系统不可用时间,以提高系统的可用时间。大多按照年可用时间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没有实现自己的文件系统而是利用操作系统 的文件系统来管理文件。存储系统由一个或多个组组成,组与组之间的文件是相互独立的,所有组的文件容量累加就是整个存储系统中的文件容量。
文件上传流程
1,Client想上传图片,它先向Tracker进行询问,Tracker查看一下登记信息之后,告诉Client哪个storage当前空闲,Tracker会把IP和端口号都返回给Client,Client在拿到IP和端口号之后,便不再需要通过Tracker,直接便向Storage进行上传图片,Storage在保存图片的同时,会向Tracker进行汇报,告诉Tracker它当前是否还留有剩余空间,以及剩余空间大小。汇报完之后,Storage将服务器上存储图片的地址返回给Client,Client可以拿着这个地址进行访问图片。
我们来了解下文件索引信息。主要包括:组名,虚拟磁盘路径,数据两级目录,文件名。如下所示:
我们来看看文件索引的具体解释和组成部分:
组名:文件上传后所在的storage组名称,在文件上传成功后由storage服务器返回,需要客户端自行保存。
虚拟磁盘路径:storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。
数据两级目录:storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。文件名:与文件上传时不同。是由存储服务器根据特定信息生成,
文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息
文件下载流程
如图所示FastDFS下载的时序图
图解如下
Storage Server启动后会主动去连结Tracker Server,周期性向Tracker Server发送心跳。
然后client询问tracker下载文件的storage,参数为文件标识(组名和文件名),tracker返回一台可用的storage。
最后client直接和storage通讯完成文件下载。
我们在来看看FastDFS下载的运行的示意图
FastDFS高可用架构实践。
如果FastDFS压力过大此时我们如何在对这个架构进行优化呢?我们可以使用ATS做文件缓存服务。
我们通过对FastDFS中的Tracker server和Storage server 的工作流程的了解,以及上传和下载的具体场景图列,可以发现它做到了冗余,做到了自动故障转移。以上就是我这个问题的理解。
我们一起探讨FastDFS的相关问题。在评论区留言,我们一起讨论,持续更新对这个问题的理解。
如何评价字节跳动开源的高性能分布式训练框架BytePS?
在分布式训练中有两大流派,分别是allreduce和PS(Parameter Server)。过去三年中,尤其是百度提出allreduce,以及Uber开源基于allreduce的Horovod之后,行业内的认知中,allreduce是最好的分布式训练通信方式,而过去的PS实现的性能也确实与allreduce存在一定差距。
BytePS可以兼容Tensorflow、PyTorch、MXNet等训练框架。BytePS团队表示,开发者只需要非常少的改动,就可以使用BytePS框架进行分布式训练,享受BytePS带来的高性能。此前行业里的PS实现,都是针对特定通用框架,例如专门为TensorFlow实现的PS,也有专门为MXNet实现的PS。字节跳动人工智能实验室开源的BytePS,通过实现一个通用的抽象层,抽象层可以被各种通用框架引用,实现了同时支持多个框架的可能性,因此能够支持Tensorflow、PyTorch、MXNet等行业主流训练框架。
在测试上,BytePS 在 Resnet50 的表现较 Horovod(NCCL)提高 44%,在 VGG16 则提升了 100%。