|
互联网的展开催生了云计算和大数据的展开, 云计算和大数据的实质都是构建低成本,高性能高可用的散布式存储系统,本文简单引见散布式存储的一些基础学问。 散布式存储经过网络衔接的大量的普通效劳器, 将数据分片分散在集群中的不同节点(效劳器或进程)中,对外提供统一的效劳。散布式存储普通需求具有几个特性:
散布式存储依据存储类型可分为:
存储系统的性能瓶颈在于随机的读写操作。下表列出了各种硬件的存储性能比: 类别耗费时间访问L1 Cache0.5 ns访问L2 Cache7 nsMutex加锁/解锁100 ns内存访问100 ns千兆网络发送1MB数据10 ms内存次第读取1MB数据0.25 ms机房内网络来回0.5 ms异地机房间网络来回30~100 ms SATA磁盘寻道10 ms 从SATA磁盘次第读取1MB数据20 ms 固态SSD盘访问延迟0.1~0.2 ms SATA的次第读取带宽能够抵达100MB以上, 由于磁盘的寻道时间大约为10ms, 次第读取1MB数据的时间为:磁盘寻道时间 + 数据读取时间, 即10ms + 1MB/100MB/s*1000=20ms。 散布式存储系统普通需求处置几个问题:
在散布式存储系统中,如何将数据分片到不同的节点是首先要思索的问题,普通散布式系统常运用的措施是Hash散布。
哈希散布就是依据数据的某一个特征计算hash值, 并将hash值和集群中的节点做映射。从而将不同hash值的数据散布到不同的节点上。 hash散布的一个问题是一旦数据曾经散布到不同的节点中, 做扩容比较艰难, 好比往常数据经过hash值散布到三台机器上, 假如要将机器扩展到五台, 需求重新将一切的数据重新算一下hash值, 然后重新散布。因而普通扩展节点的数量是原数量的一倍,这样只需求移动一半数据。
分歧性hash算法从某种水平上处置了扩展过程中移动数据太多的问题, 分歧行hash算法给每个节点赋予一个hash值, 这些节点按次第构成一个环,数据依据hash值落在环中的某个节点上。当需求扩容时,将新参与节点放入环中,数据迁移只需求迁移新节点相邻的节点上的数据即可。分歧性hash容易构成数据偏斜, 而且在数据复制过程中, 对相邻节点的压力比较大。 普通系统会引入虚拟节点或虚拟槽的处置方式:即解耦数据与节点间的关系,引入虚拟节点, 将数据映射到大量的虚拟节点上, 然后虚拟节点在在映射到实体节点上,这样在扩容过程中,能够以虚拟节点为单位移动数据, 可从不同的实体节点上移动虚拟节点到新节点。很多存系统都采用了这种计划,如redis, Cassandra。
散布式系统中,一台效劳器或者一个效劳器上的不同进程被成为一个节点, 节点间经过网络互联, 不论是节点还是网络都是不牢靠的。散布式系统需求处置由于节点或网络惹起的各种异常。
由于异常的存在,为了抵达高可用的目的, 普通数据会有多个副本, 多个副本键间的关系有:
由于同一份数据包含多个副本,副本间的分歧性是散布性存储系统需求思索的问题。 分歧性分为强分歧性,弱分歧性和最终分歧性。最终分歧又可分为: 读写分歧性:A写后, A后的读都可取得最新结果。 会话分歧性:同一个会话内写后读都可取得最新结果。 单调读:A读取一次结果后, 后续读取不会取得之前版本的值。 单调写:A的多次写在多个副本间依照次第执行。 普通散布式存储系统都既能够支持强分歧性又可支持最总分歧性。 散布式存储系统大致遵照相同的功用方式, 但细致完成又依据自身特性各有不同。在日常系统维护过程中,了解相应的散布式系统存储的完成机制能够快速辅佐定位问题并找到正确的处置计划。 |
万奢网手机版
官网微博:万奢网服务平台