大规模分布式存储系统原理与架构
文章转自:https://yq.aliyun.com/articles/195016?utm_content=m_30302
摘要: 概述 分布式存储概念 分布式存储系统是大量普通 PC 服务器通过 Internet 互联,对外作为一个整体提供存储服务。 特点 可扩展、低成本、高性能、易用 分布式存储涉及的设计主要来自两个领域:分布式系统以及数据库 数据分布、一致性、容错、负载均衡、事务与并发控制、易用性、压缩 / 解压缩 分布式存储分类 非结构化数据、结构化数据、半结构化数据 分布式存储系统分为四类: 分布式文件系统 :以对象的形式组织,对象之间没有关联,这样的数据一般称为 Blob(Binary Large Object, 二进制大对象 ) 数据。
概述
分布式存储概念
分布式存储系统是大量普通 PC 服务器通过 Internet 互联,对外作为一个整体提供存储服务。
特点
可扩展、低成本、高性能、易用
分布式存储涉及的设计主要来自两个领域:分布式系统以及数据库
数据分布、一致性、容错、负载均衡、事务与并发控制、易用性、压缩 / 解压缩
分布式存储分类
非结构化数据、结构化数据、半结构化数据
分布式存储系统分为四类:
分布式文件系统 :以对象的形式组织,对象之间没有关联,这样的数据一般称为 Blob(Binary Large Object, 二进制大对象 ) 数据。分布式文件系统也常作为分布式表格系统以及分布式数据库的底层存储。分布式文件系统存储三种类型的数据: Blob 对象、定长块以及大文件。从系统实现层面,分布式文件系统内部按照数据块 (chunk) 来组织数据,每个数据块的大小大致相同,每个数据块可以包含多个 Blob 对象或者定长块,一个大文件也可以拆分为多个数据块。分布式文件系统将这限额数据块分散到存储集群,处理数据复制、一致性、负载均衡、容错等分布式系统难题,并将用户对 Blob 对象,定长块以及大文件的操作映射为对底层数据块的操作。
分布式键值系统 :用于存储关系简单的半结构化数据,它只提供基于主键的 CRUD 功能,即根据主键创建、读取、更新或者删除一条键值记录。从数据结构的角度看,分布式键值系统与传统的哈希表比较类似,不同的是,分布式键值系统支持将数据分不到集群中的多个存储节点。分布式键值系统是分布式表格系统的简化实现,一般用作缓存。一致性哈希是分布式键值系统中常用的数据分布技术。
分布式表格系统 :用于存储关系较为复杂的半结构化数据,与分布式键值系统相比,分布式表格系统不仅仅支持简单的 CRUD, 而且支持扫描某个主键范围。以表格为单位组织数据,每个表格包括很多行,通过主键标识一行,支持根据主键的 CRUD 功能以及范围查找功能。支持某种程度上的事务。与分布式数据库相比,分布式表格系统主要支持针对单张表格的操作,不支持一些特别复杂的操作,比如多表关联,多表联接,嵌套子查询;分布式表格系统,同一个表格的多个数据行也不要求包含相同类型的列,
分布式数据库: 是从单机关系数据库扩展而来,用于存储结构化数据。分布式数据库采用二维表格组织数据,提供 SQL 关系查询语句,支持多表关联,嵌套子查询等复杂操作,并提供数据库事务以及并发控制,为了解决关系数据库面临的可扩展性、高并发性以及性能方面的问题,各种菲关系数据库风起云涌,这类系统成为 NoSQ 系统。
单机存储系统
单机存储引擎就是哈希表、 B 树等数据结构在机械磁盘、 SSD 等持久化介质上的实现。是单机存储引擎的一种封装,对外提供文件、键值、表格或者关系模型。单机存储系统的理论来源与关系数据库。数据库将一个或多个操作组成一组,称作事务,事务必须满足原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation )以及持久性 (Durability), 简称 ACID 特性。多个事务并发执行时,数据库的并发控制管理器必须能保证多个事务的执行结果不能破坏某种约定,如不能出现执行到一半的情况,不能读取到未提交的事务,等等。为了保证持久性,对于数据库的每一个变化都要在磁盘上记录日志,当数据库系统突然发生故障,重启后能恢复到之前的一致状态
硬件基础 : 硬件发展很快,摩尔定律告诉我们:每 18 个月计算机等 IT 产品的性能会翻一番;或者说相同性能的计算机等 IT 产品,每 18 个月价钱会降低一半。计算机的硬件体系价格保持相对稳定。架构设计很重要的一点就是合理选择并能够最大限度的发挥底层硬件的价值
CPU 架构: 早期的 CPU 为单核芯片,工程师很快意识到,仅仅提高单核的速度会产生过多的热量且无法带来相应的性能改善,因此,现代服务器基本为多核或多个 CPU 。经典的多 CPU 架构为对称多处理结构( SMP ) , 即在一个计算机上汇聚了一组处理器,它们之间对称工作,无主次或从属关系,共享相同的物理内存及总线。 SMP 架构主要特征是共享,系统中所有资源( CPU 、内存、 I/O )都是共享的,由于多 CPU 对前端总线的竞争, SMP 的扩展能力非常有限。为了提高扩展性,现在主流服务器架构一般为 NUMA( 非一致存储访问 ) 架构。它具有多个 NUMA 节点,每个 NUMA 节点是一个 SMP 结构,一般由多个 CPU 组成,并且具有独立的本地内存、 IO 槽口
IO 总线: 存储系统的性能瓶颈一般在于 IO.
网络拓扑: 思科过去一致提倡三层拓扑(接入层 -> 汇聚层 -> 核心层) 2008 年谷歌将网络改造为扁平化拓扑结构,即三级 CLOS 网络,同一个集群内最多支持 20480 台服务器,切任何两台都有 1GB 带宽。同一个数据中心内部的传输延时是比较小的,网络一次来回的时间在 1 毫秒之内。数据中心之间的传输延迟是很大的,取决于光在光纤的传输时间。
性能参数: 存储系统的性能瓶颈主要在于磁盘随机读写。设计存储引擎的时候会针对磁盘的特性做很多的处理,比如将随机写操作转化为顺序写,通过缓存减少对磁盘随机读操作。固态磁盘( SSD )在最近几年得到越来越多的关注,各大互联网公司都有大量基于 SSD 的应用。 SSD 的特点是随机读取延迟小,能有提供更高的 IOPS( 每秒读写, Input/Output Per Second) 性能。它的主要问题在于容量和价格,设计存储系统的时候一般可以用来做缓存或者性能要求较高的关键业务
单位成本提供的 IOPS 比传统的 SAS 或者 SATA 磁盘都要大很多,而且 SSD 功耗低,更加环保,适合小数据量并且对性能要求更高的场景。
存储层次架构: 从分布式系统的角度看,整个集群中所有服务器上的存储介质(内存、机械硬盘、 SSD )构成一个整体,其他服务器上的存储介质与本机存储介质一样都是可访问的,区别仅仅在于需要额外的网络传输及网络协议栈等访问开销。
存储系统的性能主要包括两个纬度:吞吐量以及访问延时,设计系统时要求能够在保证访问延时的基础上,通过最低的成本实现尽可能高的吞吐量。磁盘和 SSD 的访问延时差别很大,但宽带差别不大,因此,磁盘适合大块顺序访问的存储系统, SSD 适合随机访问较多或者对延时比较敏感的关键系统。二者常常组合在一起进行混合存储,热数据(访问频繁)存储到 SSD 中,冷数据(访问不频繁)存储到磁盘中。
Java工程化、高性能及分布式、高性能、深入浅出。高架构。性能调优、Spring,MyBatis,Netty源码分析和大数据等多个知识点。如果你想拿高薪的,想学习的,想就业前景好的,想跟别人竞争能取得优势的,想进阿里面试但担心面试不过的,你都可以来,群号为:647631030
注:加群要求
1、具有1-5工作经验的,面对目前流行的技术不知从何下手,需要突破技术瓶颈的可以加。
2、在公司待久了,过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的可以加。
3、如果没有工作经验,但基础非常扎实,对java工作机制,常用设计思想,常用java开发框架掌握熟练的,可以加。
4、觉得自己很牛B,一般需求都能搞定。但是所学的知识点没有系统化,很难在技术领域继续突破的可以加。
5.阿里Java高级大牛直播讲解知识点,分享知识,多年工作经验的梳理和总结,带着大家全面、科学地建立自己的技术体系和技术认知!
6.小号或者小白之类加群一律不给过,谢谢。