分布式存储技术及应用_第1页
分布式存储技术及应用_第2页
分布式存储技术及应用_第3页
分布式存储技术及应用_第4页
分布式存储技术及应用_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

精品文档 1欢迎下载 分布式存储技术及应用分布式存储技术及应用 根据 did you know http didyouknow org 的数据 目前互联网上可访问的信息数 量接近 1 秭 1 百万亿亿 1024 毫无疑问 各个大型网站也都存储着海量的数据 这些 海量的数据如何有效存储 是每个大型网站的架构师必须要解决的问题 分布式存储技术 就是为了解决这个问题而发展起来的技术 下面让将会详细介绍这个技术及应用 分布式存储概念分布式存储概念 与目前常见的集中式存储技术不同 分布式存储技术并不是将数据存储在某个或多个特定 的节点上 而是通过网络使用企业中的每台机器上的磁盘空间 并将这些分散的存储资源 构成一个虚拟的存储设备 数据分散的存储在企业的各个角落 具体技术及应用 具体技术及应用 海量的数据按照结构化程度来分 可以大致分为结构化数据 非结构化数据 半结构化数 据 本文接下来将会分别介绍这三种数据如何分布式存储 结构化数据的存储及应用结构化数据的存储及应用 所谓结构化数据是一种用户定义的数据类型 它包含了一系列的属性 每一个属性都有一 个数据类型 存储在关系数据库里 可以用二维表结构来表达实现的数据 大多数系统都有大量的结构化数据 一般存储在 Oracle 或 MySQL 的等的关系型数据库中 当系统规模大到单一节点的数据库无法支撑时 一般有两种方法 垂直扩展与水平扩展 垂直扩展 垂直扩展比较好理解 简单来说就是按照功能切分数据库 将不同功 能的数据 存储在不同的数据库中 这样一个大数据库就被切分成多个小数据 库 从而达到了数据库的扩展 一个架构设计良好的应用系统 其总体功能一 般肯定是由很多个松耦合的功能模块所组成的 而每一个功能模块所需要的数 据对应到数据库中就是一张或多张表 各个功能模块之间交互越少 越统一 系统的耦合度越低 这样的系统就越容易实现垂直切分 水平扩展 简单来说 可以将数据的水平切分理解为按照数据行来切分 就是将 表中的某些行切分到一个数据库中 而另外的某些行又切分到其他的数据库中 为了能够比较容易地判断各行数据切分到了哪个数据库中 切分总是需要按照 某种特定的规则来进行的 如按照某个数字字段的范围 某个时间类型字段的 范围 或者某个字段的 hash 值 垂直扩展与水平扩展各有优缺点 一般一个大型系统会将水平与垂直扩展结合使用 实际应用 实际应用 图 1 是为核高基项目设计的结构化数据分布式存储的架构图 精品文档 2欢迎下载 图图 1 1 可水平可水平 垂直切分扩展的数据访问框架垂直切分扩展的数据访问框架 采用了独立的分布式数据访问层 后端分布式数据库集群对前端应用透明 集成了 Memcached 集群 减少对后端数据库的访问 提高数据的查询效率 同时支持垂直及水平两种扩展方式 基于全局唯一性主键范围的切分方式 减轻了后续维护的工作量 全局唯一性主键的生成采用 DRBD Heartbeat 技术保证了可靠性 利用 MySQL Replication 技术实现高可用的架构 注注 以上的数据切分方案并不是唯一扩展 MySql 的方法 有兴趣的读者可以关注一下 云 计算时代的 MySQL Clustrix Sierra 分布式数据库系统 非结构化数据的存储及应用非结构化数据的存储及应用 相对于结构化数据而言 不方便用数据库二维逻辑表来表现的数据即称为非结构化数据 包 括所有格式的办公文档 文本 图片 XML HTML 各类报表 图像和音频 视频信息等等 分布式文件系统是实现非结构化数据存储的主要技术 说到分布式文件系统就不得不提 GFS 全称为 Google File System GFS 的系统架构图如下图所示 精品文档 3欢迎下载 图图 2 2 Google file systemGoogle file system 架构图架构图 图图 3 3 Google file systemGoogle file system 架构图 详细 架构图 详细 GFS 将整个系统分为三类角色 Client 客户端 Master 主服务器 Chunk Server 数据块服务器 Client 客户端 是 GFS 提供给应用程序的访问接口 它是一组专用接口 不 遵守 POSIX 规范 以库文件的形式提供 应用程序直接调用这些库函数 并与 该库链接在一起 Master 主服务器 是 GFS 的管理节点 主要存储与数据文件相关的元数据 而不是 Chunk 数据块 元数据包括 命名空间 Name Space 也就是整个 文件系统的目录结构 一个能将 64 位标签映射到数据块的位置及其组成文件的 表格 Chunk 副本位置信息和哪个进程正在读写特定的数据块等 还有 Master 精品文档 4欢迎下载 节点会周期性地接收从每个 Chunk 节点来的更新 Heart beat 来让元数据 保持最新状态 Chunk Server 数据块服务器 负责具体的存储工作 用来存储 Chunk GFS 将 文件按照固定大小进行分块 默认是 64MB 每一块称为一个 Chunk 数据块 每一个 Chunk 以 Block 为单位进行划分 大小为 64KB 每个 Chunk 有一个唯一 的 64 位标签 GFS 采用副本的方式实现容错 每一个 Chunk 有多个存储副本 默认为三个 Chunk Server 的个数可有有多个 它的数目直接决定了 GFS 的规模 GFS 之所以重要的原因在于 在 Google 公布了 GFS 论文之后 许多开源组织基于 GFS 的论 文开发了各自的分布式文件系统 其中比较知名的有 HDFS MooseFS MogileFS 等 实际应用 实际应用 由于核高基的项目中未来会有大量的数据与应用需要存储 所以我们设计时也 采用分布式文件系统的方案 由于开源的分布式文件系统可以基本满足我们需求 另外从 时间上来说也比较紧张 所以我们采用了开源的 MooseFS 作为底层的分布式文件系统 MooseFS 存在的问题 由于 MooseFS 是也是按照 GFS 论文设计的 只有一个 Master 主服务器 虽然可以增加一个备份的日志服务器 但是还是存在 Master 无法扩展的问题 当单一 Master 节点上存储的元数据越来越多的时候 Master 节点占用的内存会越来越多 直到达到服务器的内存上限 所以单一 Master 节点存在内存上的瓶颈 只能存储有限的数据 可扩展性差 并且不稳 定 对 MooseFS 的优化 面对 MooseFS 存在的问题 我们采用了类似分布式数据库中 的 Sharding 技术 设计了一个分布式文件系统访问框架 可以做到对分布 式文件系统做垂直与水平切分 这样就最大限度的保证了 MooseFS 系统的可扩 展性与稳定性 下图是为核高基项目设计的非结构化数据分布式存储的架构图 我们设计了两种访问方式 一种是类似 GFS 的 API 访问方式 以库文件的方式提供 应用程序通过调用 API 直接访问 分布式文件系统 第二种是通过 RESTful web Service 访问 精品文档 5欢迎下载 图图 4 4 可水平可水平 垂直切分扩展的分布式文件系统访问框架 垂直切分扩展的分布式文件系统访问框架 APIAPI 版 版 图图 5 5 可水平可水平 垂直切分扩展的分布式文件系统访问框架 垂直切分扩展的分布式文件系统访问框架 RESTfulRESTful webweb ServiceService 版 版 半结构化数据的存储及应用半结构化数据的存储及应用 就是介于完全结构化数据 如关系型数据库 面向对象数据库中的数据 和完全无结构的 数据 如声音 图像文件等 之间的数据 半结构化数据模型具有一定的结构性 但较之 传统的关系和面向对象的模型更为灵活 半结构数据模型完全不基于传统数据库模式的严 格概念 这些模型中的数据都是自描述的 精品文档 6欢迎下载 由于半结构化数据没有严格的 schema 定义 所以不适合用传统的关系型数据库进行存储 适合存储这类数据的数据库被称作 NoSQL 数据库 NoSQLNoSQL 的定义 的定义 被称作下一代的数据库 具有非关系型 分布式 轻量级 支持水平扩展且一般不保证遵 循 ACID 原则的数据储存系统 NoSQL 其实是具有误导性的别名 称作 Non Relational Database 非关系型数据库 更为恰当 所谓 非关系型数据库 指的是 使用松耦合类型 可扩展的数据模式来对数据进行逻辑建模 Map 列 文档 图 表等 而不是使用固定的关系模式元组来构建数据模型 以遵循于 CAP 定理 能保证在一致性 可用性和分区容忍性三者中中达到任意两 个 的跨多节点数据分布模型而设计 支持水平伸缩 这意味着对于多数据中 心和动态供应 在生产集群中透明地加入 删除节点 的必要支持 也即弹性 Elasticity 拥有在磁盘或内存中 或者在这两者中都有的 对数据持久化的能力 有时候还 可以使用可热插拔的定制存储 支持多种的 Non SQL 接口 通常多于一种 来进行数据访问 图 6 是 Sourav Mazumder 提出的 NoSQL 总体架构 图图 6 6 NoSQLNoSQL 总体架构总体架构 接口 REST HBase CouchDB Riak 等 MapReduce HBase CouchDB MongoDB Hypertable 等 Get Put Voldemort Scalaris 精品文档 7欢迎下载 等 Thrift HBase Hypertable Cassandra 等 语言特定的 API MongoDB 逻辑数据模型 面向键值对的 Voldemort Dynomite 等 面向 Column Family 的 BigTable HBase Hypertable 等 面向文档的 Couch DB MongoDB 等 面向图的 Neo4j Infogrid 等 数据分布模型 致性和可用性 HBase Hypertable MongoDB 等 可用性和可 分区性 Cassandra 等 一致性和可分区性的组合会导致一些非额定的节点产生 可用性的损失 有趣的是目前还没有一个 非关系型数据库 支持这一组合 数据持久性 基于内存的 如 Redis Scalaris Terrastore 基于磁盘的 如 MongoDB Riak 等 或内存及磁盘二者的结合 如 HBase Hypertable Cassandra 存储的类型有助于我们辨别该解决方案适用 于哪种类型 然而 在大多数情况下人们发现基于组合方 案的解决方案是最佳 的选择 既能通过内存数据存储支持高性能 又能在写入足够多的数据后存储 到磁盘来保证持续性 NoSQLNoSQL 中的重要理论基础 中的重要理论基础 CAPCAP 理论 理论 C Consistency 一致性 A Availability 可用性 指的是快速获取数据 P Tolerance of network Partition 分区容忍性 分布式 精品文档 8欢迎下载 图图 7 7 CAPCAP 理论理论 CAP 原理告诉我们 这三个因素最多只能满足两个 不可能三者兼顾 对于分布式系统来 说 分区容错是基本要求 所以必然要放弃一致性 对于大型网站来说 分区容错和可用 性的要求更高 所以一般都会选择适当放弃一致性 对应 CAP 理论 NoSQL 追求的是 AP 而传统数据库追求的是 CA 这也可以解释为什么 传统数据库的扩展能力有限的原因 BASEBASE 模型 模型 说起来很有趣 BASE 的英文意义是碱 而 ACID 是酸 真的是水火不容啊 Basically Availble 基本可用 Soft state 软状态 柔性事务 Eventual Consistency 最终一致性 BASE 模型是传统 ACID 模型的反面 不同于 ACID 模型 BASE 强调牺牲高一致性 从而获得 可用性或可靠性 基本可用是指通过 Sharding 允许部分分区失败 软状态是指异步 允许数据在一段时间内的不一致 只要保证最终一致就可以了 最终一致性是整个 NoSQL 中的一个核心理念 强调最终数据是一致的就可以了 而不是时 时一致 QuorumQuorum NRWNRW 精品文档 9欢迎下载 图图 8 8 QuorumQuorum NRWNRW N 复制的节点数 即一份数据被保存的份数 R 成功读操作的最小节点数 即每次读取成功需要的份数 W 成功写操作的最小节点数 即每次写成功需要的份数 这三个因素决定了可用性 一致性和分区容错性 只需 W R N 就可以保证强一致性 实际应用 实际应用 今年上半年我在 aspire 的搜索团队中负责互联网搜索的设计与开发 我设计 的网页爬虫系统就是采用 Cassandra 来存储网页与链接信息的 下面结合我的实际使用经 验谈谈我对 Cassandra 的看法 优点 弹性扩展 由于 Cassandra 是完全分布式的 使用时不需要再像使用 MySQL 那样 自己设计复杂的数据切分方案 也不再配置复杂的 DRBD Heartbeat 一切都变 得非常简单了 只需要简单的配置就可以给一个集群中增加一个新的节点 而 且对客户端完全是透明的 不需要任何更改 灵活的 schema 不需要象数据库一样预先设计 schema 增加或者删除字段非常

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论