2018-09-30 15:19:31 来源:交大数字研究院
分布式存储系统是大量普通PC服务器通过Internet互联,对外作为一个整体提供存储服务
分类
不同的分布式存储系统适合处理不同类型的数据:
分布式文件系统
分布式键值系统
分布式表格系统
分布式数据库
问题域
分布式存储解决的是单机存储的性能, 单点故障问题, 容量一开始到还在其次, 但随着应用规模的发展, 要解决容量也得必须分布式了.
鉴于解决容量问题的手段并没有引入新问题, 因而如果要实现一种分布式存储机制, 需解决或者需平衡的是性能(或者说可用性), 单点故障(或者说分区容忍性), 及一致性
基础结构
分层,一般是两到三层
实现关注点
数据分布策略
考虑因素包括读写场景, 即随机还是顺序, 包括如何保证负载均衡从而提高性能等
一致性策略
最终一致性变体
故障监控策略
集群管理策略
分布式事务策略
数据模型
列族和文档在某种程度上是存储模型, 而不是对外的接口模型. 列式存储更适合olap,列族则是对存取性能的优化
查询方式
领域语言
CAP理论
当分布式存储网络中有一台机器与其它机器的连接断开了, 但与客户的连接还在, 即依然有读写请求进来, 那么:
一致性哈希
在传统的哈希表中,添加或删除一个节点几乎需要对所有关键字进行重新映射(对N取模变成了对N-1或N+1取模, 影响大了)。而Hash算法的一个衡量指标是单调性( Monotonicity ),定义如下:
一致性哈希是一种特殊的哈希算法。在使用一致哈希算法后,哈希表节点数(大小)的改变平均只需要对K/n 个关键字重新映射,其中 K是关键字的数量,n是节点数量。
向量时钟
当系统中存在同一份数据的多份副本时, 如何决定更新顺序, 处理更新冲突成了一个问题, 因为不存在一个全局时钟(存在的话, 我们就可以在每次更新时记录全局时钟值, 这样的话就有明确的先后顺序). 因此我们需要发明一种在分布式环境下有明确顺序定义的机制. 传统的顺序定义通过版本来定义(时钟只是版本的一种实现手段). 将版本的概念扩展到分布式环境下时, 我们便得到了向量时钟: 对于同一份数据的N份副本, 都独立维护自己的一个版本号, 这些版本号合在一起, 组成一个N个元素的vector, 作为该数据的版本. 每个节点都维护这样一个vector, 初值可能都是0, 每次更新数据时, 一起更新vector中对应自己节点的那个版本号, 然后将vector和被更新的数据一起传播给其它节点. 这样每个节点都可以据此来发现更新冲突。
租约协议
租约主要用来解决心跳的误会问题. 在通常的集群系统中,我们采用心跳来检测节点状态。但普通的心跳机制存在误报警的可能. 普通心跳通常是在规定的时限内定期向检测节点发送存活性报告,若超出一段时间未能收到心跳报告,那么检测节点则判断节点可能失效,并采取一系列措施(报警、通知节点的使用者)。这种机制存在的问题是,检测节点单方面判定节点失效,在某些业务集群系统中可能存在风险。节点自身并未认识自己已被认定失效,还在继续提供正常的服务。若该节点在集群中承担唯一 primary 节点的职责,而检测节点的失效判定发起了重新选择新的主节点,会引发“双主”问题。
租约是一种双方协议, 通常定义为:颁发者在一定期限内給予持有者一定权利的协议. 它表达了颁发者在一定期限内的承诺,只要未过期颁发者必须严格遵守 lease 约定的承诺。而 lease 的持有者可以在期限内使用颁发者的承诺,但 lease 一旦过期必须放弃使用或者重新和颁发者续约。
租约过期前必须向颁发者续约才能继续使用, 因此若因为各种原因续约未果, 则使用者必须放弃租约规定的权利, 而颁发者可以将该权利颁发给其它节点.
lease 作为一种协议承诺,其承诺的范围十分宽泛:
Paxos协议
Paxos是一个分布式选举算法, 最大的用途就是保持多个节点数据的一致性. 基于消息传递通信模型的分布式系统,不可避免的会发生以下错误:进程可能会慢、垮、重启,消息可能会延迟、丢失、重复,在基础 Paxos 场景中,先不考虑可能出现消息篡改的情况。Paxos 算法解决的问题是在一个可能发生上述异常的分布式系统中如何就某个值达成一致,保证不论发生以上任何异常,都不会破坏决议的一致性。
一个典型的场景是,在一个分布式数据库系统中,如果各节点的初始状态一致,每个节点都执行相同的操作序列,那么他们最后能得到一个一致的状态。这里的问题在于: 为保证每个节点执行相同的命令序列,需要在每一条指令上执行一个“一致性算法”以保证每个节点看到的指令一致。Paxos就是这么一种”一致性算法”
为描述 Paxos 算法,其提出者Lamport 虚拟了一个叫做 Paxos 的希腊城邦,这个岛按照议会民主制的政治模式制订法律,但是没有人愿意将自己的全部时间和精力放在这种事情上。所以无论是议员,议长或者传递纸条的服务员都不能承诺别人需要时一定会出现,也无法承诺批准决议或者传递消息的时间。但是这里假设没有拜占庭将军问题(Byzantine failure,即虽然有可能一个消息被传递了两次,但是绝对不会出现错误的消息);只要等待足够的时间,消息就会被传到。另外,Paxos 岛上的议员是不会反对其他议员提出的决议的。
对应于分布式系统,议员对应于各个节点,制定的法律对应于系统的状态。各个节点需要进入一个一致的状态,例如在独立Cache的对称多处理器系统中,各个处理器读内存的某个字节时,必须读到同样的一个值,否则系统就违背了一致性的要求。一致性要求对应于法律条文只能有一个版本。议员和服务员的不确定性对应于节点和消息传递通道的不可靠性。
具体算法, 可参考网络资料
NWR
NWR是一种在分布式存储系统中用于控制一致性级别的策略。其中,N代表同一份数据的Replica的份数,W是更新一个数据对象时需要确保成功更新的份数;R代表读取一个数据需要读取的Replica的份数。
常用实现技巧
免责声明:本网站(http://www.ciotimes.com/)内容主要来自原创、合作媒体供稿和第三方投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。