1. 概念
2. 分布式存储系统的特性(可扩展、低成本、高性能、易用)
3.技术难点
3.1. 数据分布( 3.1.1. 哈希分布3.1.2. 顺序分布 ) 3.2. 负载均衡
4. 分布式存储系统分类
4.1. 分布式文件系统 4.2. 分布式键值系统 4.3. 分布式表格系统 4.4. 分布式数据库
1.概念
分布式存储系统,是将数据分散存储在多台独立的设备上。传统的网络存储系统采用集中的存储服务器存放所有数据,存储服务器成为系统性能的瓶颈,也是可靠性和安全性的焦点,不能满足大规模存储应用的需要。分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,它不但提高了系统的可靠性、可用性和存取效率,还易于扩展。
2.分布式存储系统的特性
可扩展
分布式存储系统可以扩展到几百台甚至几千台的集群规模,而且随着集群规模的增长,系统整体性能表现为线性增长。
低成本
分布式存储系统的自动容错、自动负载均衡机制使其可以构建在普通的PC机之上。另外,线性扩展能力也使得增加、减少机器非常方便,可以实现自动运维。
高性能
无论是针对整个集群还是单台服务器,都要求分布式存储系统具备高性能。
易用
分布式存储系统需要能够提供易用的对外接口,另外,也要求具备完善的监控、运维工具,并能够文玩 与其他系统集成。
3.技术难点
分布式存储系统的挑战主要在于数据、状态信息的持久化,要求在自动迁移、自动容错、并发读写的过程中保证数据的一致性。分布式存储涉及的技术主要来自两个领域:分布式系统以及数据库。
3.1数据分布
如何将数据分布到多台服务器才能保证数据分布均匀?数据分布到多台服务器后如何实现跨服务器读写操作?
分布式系统区别于传统单机系统在于能够将数据分布到多个节点,并在多个节点之间实现负载均衡。分布式存储系统的一个基本要求就是透明性,包括数据分布透明性, 数据迁移透明性,数据复制透明性还有数据故障透明性。
3.1.1. 哈希分布
哈希分布的方法很常见,其方法是根据数据的某一特征计算哈希值,并将哈希值与集群中的服务器建立映射关系,从而将不同哈希值的数据分布到不同的服务器上。如果哈希函数的散列性很好,哈希方式可以将数据比较均匀地分布到集群中去,而且哈希方式需要记录的元信息也很简单,每个节点只需要知道哈希函数的计算方式以及模的服务器的个数就可以计算出处理的数据应该属于哪台机器。
传统的哈希分布算法有一个问题,当服务器上线或者下线时,N值发生变化,数据映射会被打乱。为解决这个问题,一个办法是不再简单地将哈希值和服务器个数做除法映射,而是将哈希值与服务器的对应关系作为元数据,交给专门的元数据服务器来管理。还有一个办法是采用一致性哈希算法。
一致性哈希(Distributed Hash Table,DHT)算法。算法思想:给系统中每个节点分配一个随机token,这些token构成一个哈希环。执行数据存放操作时,先计算Key的哈希值,然后存放到顺时针方向第一个大于或者等于该哈希值的token 所在的节点。一致性哈希值的优点在于加入或删除时只会影响到在哈希环中相除的节点,而对其它节点没影响。
3.1.2. 顺序分布
哈希散列破坏了数据的有序性,只支持随机读取操作,不能支持顺序扫描。而且这种方式可能出现某些用户的数据量太大的问题,由于用户的数据限定在一个存储节点,无法发挥分布式存储系统的多机并行处理能力。
顺序分布在分布式表格系统中比较常见,一般的做法是将大表顺序划分为连续的范围,每个范围称为一个子表,总控服务器负责将这些子表按照一定的策略分配到存储节点上。
3.2. 负载均衡
新增服务器和集群正常运行过程中如何实现自动负载均衡?数据迁移过程中如何保证不影响已有服务?
分布式存储系统的每个集群中一般有一个总控节点,其他节点为工作节点,由总控节点根据全局负载信息进行整体调度。工作节点刚上线时,总控节点需要将数据迁移到该节点上,另外,系统运行过程中也需要不断地执行迁移任务,将数据从负载较高的工作节点迁移到负载较低的工作节点。
工作节点通过心跳包,将节点负载相关的信息,如CPU、内存、磁盘及网络等资源使用率,读写次数及读写数据量等发给主控节点。主控节点计算出工作节点的负载信息以及需要迁移的数据,生成迁移任务放入迁移队列中等待执行。
负载均衡需要执行数据迁移操作。在分布式存储系统中往往会存储数据的多个副本,一个为主副本,其他为备副本,由主副本对外提供服务。迁移备副本不会对服务造成影响,迁移主副本也可以首先将数据的读写服务切换到其他备副本。整个迁移过程可以做到无缝,对用户完全透明。
4.分布式存储系统分类
分布式存储系统需要存储的数据多种多样,大致上可分为:非结构化数据,如文本文件、图片、视频和音频等格式;结构化数据,一般存在关系数据库中,可以用二维关系表结构来表示,模式与内容是分开的;半结构化数据,如HTML文档,模式结构与内容是放在一起的。
不同的分布式存储系统适合存储不同的数据。
1.分布式文件系统
互联网应用需要存储大量的图片、照片和视频等非结构化数据对象,这类数据以对象的形式组织,对象之间没有关联,这样的数据一般称为Blob(Binary large object)数据。
分布式文件系统适合存储Blob对象,典型的如谷歌的GFS以及它的开源实现HDFS。在系统实现层面,分布式文件系统内部按照数据块(chunk)来组织数据,每个数据块的大小相同,每个数据块可以包含我个Blob 对象或者定长块,一个大文件也可以拆分成多个数据块。
2.分布式键值系统
分布式键值系统存储关系简单的半结构化数据,它只提供主键的CRUD功能,如Dynamo、Redis和Memcache。从数据结构来看,分布式键值系统与传统的哈希表比较类似,不同的是,分布式系统支持将数据分布到集群中的多个存储结点。分布式键值系统是分布式表格系统的一种简化实现,一般用作缓存。一致性哈希是分布式键值系统中常用的数据分布技术。
3.分布式表格系统
分布式表格系统用于存储关系较为复杂的半结构化数据,与分布式键值系统相比,分布式表格系统不仅仅支持简单的CRUD 操作,而且支持扫描某个主键范围。分布式表格系统以表格为单位组织数据,每个表格包括很多行,通过主键标识一行,支持根据主键的CRUD功能以及范围查找功能。
分布式表格系统借鉴了很多关系数据库的技术,例如支持某种程度上的事务。典型的系统如Bigtable、HBase和DynamoDB。与分布式数据库相比,分布式表格系统主要针对单张表格的操作,不支持一些特别复杂的操作,比如多表关联、多表连接、嵌套子查询。而且在分布式表格系统中,同一个表格的多个数据行也不要求包含相同类型的列,适合半结构化数据。分布式表格系统是一种很好的权衡,这类系统可以做到超大规模,而且支持较多的功能,但实现往往比较复杂。
4.分布式数据库
分布式数据库一般是从单机关系数据库扩展而来,用于存储结构化数据。分布式数据库采用二维表格组织数据,提供SQL关系查询语言,支持多表关联,嵌套子查询等复杂操作,并提供数据库事务以及并发控制。典型的如MySQL数据库集群、Amazon RDS及Microsoft SQL Azure。
http://witchiman.top/2017/05/05/distributed-system/
网友评论