(一)关键问题node
对于存储系统,最重要的问题就是数据分布,即什么样的数据放置在什么样的节点上。数据分布时须要考虑数据是否均衡、之后是否容易扩容等一系列问题。不一样的数据分布方式也存在不一样的优缺点,须要根据自身数据特色进行选择。缓存
关键:找出一个散列特性很好的哈希函数服务器
问题:增长、减小服务器时的大量数据迁移负载均衡
解决:1)将<哈希值,服务器>元数据存储在元数据服务器中;2)一致性哈希异步
关键:哈希值变成了一个范围,每一个物理节点上存储的数据是哈希值处于前一段范围的数据。函数
优势: 节点增长/删除时只会影响到在hash环中相邻的节点,而对其余节点没影响。性能
维护每台机器在哈希环中的位置方式:1) 记录它前一个&后一个节点的位置信息,每次查找可能遍历整个哈希环全部服务器;2) O(logN)位置信息,查找的时间复杂度为O(logN);3) 每台服务器维护整个集群中全部服务器的位置信息,查找服务器的时间复杂度为O(1)cdn
优势:将传统哈希的一(物理节点)对一(哈希值)的分布变成了一(物理节点)对多(哈希值)的分布。能够根据物理节点的能力调整数据的分布。blog
表格上的数据按照主键总体有序索引
1)数据写入时,写入节点的选择(空间容量?CPU负载?)
2)运行过程当中,数据的迁移
若是运行过程当中有新机器的加入,致使每一个机器的存储数据量不一样,须要可以自动发现,并自动进行调整。可是在调整的过程当中也要控制好速度,以避免对业务产生影响。
1)最大保护模式
强同步复制:至少在一个备库上执行成功
至少成功存储2个备份,才返回成功。
2)最大性能模式
异步复制模式:主库执行成功即返回
只要成功存储1个备份,就返回成功。
3)最大可用性模式
两种模式折衷:正常状况是最大保护模式,出现故障时变成最大性能模式
版本号:在收到写入数据请求时,生成对应版本号。
删除老的版本号;读取时,保证读取到的是最新的版本号的数据;写入时,保证写入数据的版本号要新与存储的。
心跳:S每隔一段时间向C发送一个心跳包
租约机制:带有超时时间的受权
master:主备机制,持久化索引
datanode:永久故障,增长备份
不是瓶颈:舍弃小文件的处理,数据的读写控制权下放到工做机,经过客户端缓存元数据减小对总控节点的访问
内存成为瓶颈:采用两级结构,在总控机与工做机之间加一层元数据节点
存储节点分为若干组,每一个组内的节点服务彻底相同的数据
将数据划分为大小接近的分片,每一个分片的多个副本分布到集群中的任何一个存储节点,某个节点发生故障,原有的服务将由整个集群而不是某几个固定的存储节点来恢复