专栏首页MYSQL轻松学分布式文件系统—Google File System介绍

分布式文件系统—Google File System介绍

为什么要文件系统?

我们知道如要要从磁盘取数据,需要告诉控制器从哪取,取多长等信息,如果这步由应用来做,那实在太麻烦。所以操作系统提供了一个中间层,它管理本地的磁盘存储资源、提供文件到存储位置的映射,并抽象出一套文件访问接口供用户使用。对用户来说只需记住文件名和路径,其他的与磁盘块打交道的事就交给这个中间层来做,这个中间层即为文件系统。

但随着互联网企业的高速发展,一些业务对数据存储的要求越来越高,而且模式各异,如购物网站的大量商品图片,其特点是文件较小,但数量巨大;而类似于youtube,优酷这样的视频服务网站,其后台存储着大量的视频文件,尺寸大多在几十M到几十G不等。这些应用场景都是传统文件系统不能解决的。分布式文件系统将数据存储在物理上分散的多个存储节点上,对这些节点的资源进行统一的管理与分配,并向用户提供文件系统访问接口,其主要解决了本地文件系统在文件大小、文件数量、打开文件数等的限制问题。

上一篇文章关于分布式系统的介绍中有提到GFS,谷歌的三篇重要论文之一。GFS是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。它运行于廉价的普通硬件上,提供容错功能。

GFS体系结构

图1 GFS Architecture

GFS包括一个master结点(元数据服务器),多个chunkserver(数据服务器)和多个client(运行各种应用的客户端)。在可靠性要求不高的场景,client和chunkserver可以位于一个结点。图1是GFS的体系结构示意图,每一结点都是普通的Linux服务器,GFS的工作就是协调成百上千的服务器为各种应用提供服务。

典型分布式系统架构 参考GFS设计理念,目前比较主流的一种分布式文件系统架构,如下图所示,通常包括主控服务器(或称元数据服务器、名字服务器等,通常会配置备用主控服务器以便在故障时接管服务,也可以两个都为主的模式),多个数据服务器(或称存储服务器,存储节点等),以及多个客户端,客户端可以是各种应用服务器,也可以是终端用户。

采用集中式管理方式,通过一个独立的服务器(如上图中的主控服务器)来管理数据服务器,每个服务器向其汇报服务状态来达到集中管理的目的,这种方式简单易实现,目前很多分布式文件系统都采用这种方式如GFS、TFS等。主控服务器在负载较大时会出现单点,较多的解决方案是配置备用服务器,以便在故障时接管服务,如果需要,主备之间需要进行数据的同步。

分布式文件系统的数据存储解决方案,归根结底是将将大问题划分为小问题。大量的文件,均匀分布到多个数据服务器上后,每个数据服务器存储的文件数量就少了,另外通过使用大文件存储多个小文件的方式,总能把单个数据服务器上存储的文件数降到单机能解决的规模;对于很大的文件,将大文件划分成多个相对较小的片段,存储在多个数据服务器上(目前,很多本地文件系统对超大文件的支持已经不存在问题了,如ext3文件系统使用4k块时,文件最大能到4T,ext4则能支持更大的文件,只是受限于磁盘的存储空间)。

分布式文件系统涉及的主要问题及解决方法如下图所示:

主控服务器包含:

1. 命名空间维护

  • 维护整个文件系统的命名空间,并暴露给用户使用,命名空间的结构主要有典型目录树结构、扁平化结构、图结构
  • 需要存储一些辅助的元数据如文件(块)到数据服务器的映射关系、文件之间的关系

2. 数据服务管理

  • 集中管理数据服务器,监测数据服务器存活
  • 当数据服务器不可用时,对一些副本数不足的文件(块)执行复制
  • 当数据服务器负载过高,执行一些副本迁移计划

3. 服务调度

  • 负责客户端和数据服务器的请求处理
  • 包含单线程和线程池方式,线程池的方式目前使用较多

4. 主备容灾

  • 主服务器作用非常重要,为了避免单点问题,通常会为其配置备用服务器,当备用服务器检测到主宕机时,会接管主的资源及服务
  • 主备数据需要一致,可采用etcd或zookeeper等

数据服务器包含

1. 数据本地存储

  • 数据服务器负责文件数据在本地的持久化存储
  • 对于小文件的存储,可以将多个文件的数据存储在一个块中,并为块内的文件建立索引,这样可以极大的提高存储空间利用率
  • 对于大文件的存储,则可将文件存储到多个块上,多个块所在的数据服务器可以并行服务,这种需求通常不需要对本地存储做太多优化

2. 状态维护

  • 将自己的状态以心跳包的方式周期性的报告给主控服务器
  • 心跳信息还包含当前负载情况,可以帮助主控服务器制定负载均衡策略

3. 副本管理

  • 分布式文件系统中的文件会存储多个副本到数据服务器上
  • 方式一,客户端分别向多个数据服务器写同一份数据,如DNFS采用这种方式
  • 方式二方式二,客户端向主数据服务器写数据,主数据服务器向其他数据服务器转发数据,如TFS采用这种方式
  • 方式三,采用流水复制的方式,client向某个数据服务器写数据,该数据服务器向副本链中下一个数据服务器转发数据,依次类推,如HDFS、GFS采取这种方式

客户端包含:

1. 接口

  • 用户最终通过文件系统提供的接口来存取数据
  • 需考虑接口复杂性

2. 缓存

  • 缓存元数据信息,降低主控服务器负载
  • 数据可根据业务特性缓存在本地内存或磁盘,也可缓存在远端的cache系统上
  • 维护缓存需考虑如何解决一致性问题及缓存替换算法,使用得较多的替换算法如LRU、随机替换等

3. 其他

  • 数据进行加密保证数据的安全性
  • 数据进行压缩后存储降低存储空间使用
  • 在接口中封装一些访问统计行为,以支持系统对应用的行为进行监控和统计

本文主要从典型分布式文件系统架构出发,讨论了分布式文件系统的基本原理,工程实现时需要解决的问题、以及解决问题的基本方法,真正在系统工程实现时,要考虑的问题会更多。

本文分享自微信公众号 - MYSQL轻松学(easymysql),作者:YoungerChina

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL 面试选择题15道(单选)

    1、MySQL数据库四种特性,不包括() A.原子性 B.事务性 C.一致性 D.隔离性 2、MySQL报错error 1062 的意思是() A.连接数据库失...

    MySQL轻松学
  • Helm 构建 Kubernetes 软件包最佳管理工具

    Helm 是 Kubernetes 的包管理器。包管理器类似于我们在 Ubuntu 中使用的apt、Centos中使用的yum 或者Python中的 pip 一...

    MySQL轻松学
  • V 语言强势登顶 GitHub TOP1,欲取 Go 而代之?

    长久以来,编程语言在语法、语义和标准库等方面都存在着千差万别,使得程序员在选择时不得不面临着差异化等难题。自然选择下,就会有旧语言的淘汰(PHP 是个意外,至今...

    MySQL轻松学
  • 从HTTP到HTTPS

    HTTP 是基于文本传输的协议,它位于 OSI 七层模型的应用层(Application) ,HTTP 是通过客户端向服务器发送请求,服务器响应请求来进行通讯,...

    喵叔
  • 云计算等新兴技术如何影响服务器市场

    在云计算盛行的今天,云计算不可避免会对服务器销售产生影响。一些企业特别是新创企业和小企业,他们往往将选择至少将一部分基础设施移动到云上,而不是维护自己的数据中心...

    静一
  • 速读原著-TCP/IP(Whois协议)

    W h o i s协议是另一种信息服务。尽管任何站点都可以提供一个 W h o i s服务器,在I n t e r N I C站点(r s . i n t e ...

    cwl_java
  • 七牛CEO许式伟:服务端开发那些事儿

    服务端开发对于任何互联网公司来讲,都并非易事,它所涉及的技术知识面非常广泛,如果开发人员的经验不足,将直接影响产品用户的体验。作为七牛云存储创始人,许式伟有着超...

    范蠡
  • 速读原著-TCP/IP(Finger协议)

    F i n g e r协议返回一个指定主机上一个或多个用户的信息。它常被用来检查某个人是否登录了,或者搞清一个人的登录名以便给他发送邮件。 RFC1288 [Z...

    cwl_java
  • HAProxy配置文件结构

    image.png 前面配置负载均衡的示例中,使用了一个简单的配置文件 global daemon maxconn 256 defaults mod...

    dys
  • SSL的单向认证和双向认证

    为了便于更好的认识和理解SSL协议,这里着重介绍SSL协议的握手流程。SSL协议既用到了公钥加密技术又用到了对称加密技术,对称加密技术虽然比公钥加密技术的速度快...

    合信ssl证书

扫码关注云+社区

领取腾讯云代金券