分布式存储系统存在哪些问题?

什么是分布式存储系统?传统上的分布式存储系统本质上是一个中心化的系统,是将数据分散存储在多台独立的设备上,采用可扩展的系统结构、利用多台存储服务器分担存储负荷、利用位置服务器定位存储信息。而基于 P2P 网络的分布式存储是区块链的核心技术,是将数据存储于区块上并通过开放节点的存储空间建立的一种分布式数据库,解决传统分布式存储的问题。


分布式存储系统存在哪些问题?_娱乐产业_时尚资讯


分布式存储系统首先要面对的问题就是数据分片,即将数据均匀地分布到多个存储节点。另外,为了保证可靠性和可用性,需要将数据复制多个副本,这就带来了多个副本的数据一致性问题。


大规模系统的重要目标是节省成本,因而只能采用性价比较高的PC服务器。这些服务器性能很好,但是故障率很高,要求系统能够在软件层面实现自动容错。当存储节点出现故障时,系统能够检测出来,并将原有的数据和服务迁移到集群中其他正常工作的节点。


    一、数据如何分布  


就像把鸡蛋放进篮子里面。一般来说篮子大小是一样的,当然也有的系统支持不一样大小的篮子。鸡蛋大小也不一样,有很多系统就把鸡蛋给"切割"成一样大小然后再放。并且有的鸡蛋表示对篮子有要求,比如对机房/机架位的要求。衡量一个数据分布算法好不好就看他是否分得足够均匀,使得所有机器的负载方差足够小。


    二、如何容灾  


分布式系统一个很重要的定位就是要让程序自动来管机器,尽量减少人工参与,否则一个分布式系统的运维成本将不可接受。容灾问题非常复杂,有很多很成熟的系统也不敢保证自己做得特别好,那么来看看一个典型的系统都有可能出哪些问题吧:


    1.机器宕机  


这是最常见的故障了。系统中最容易出问题的硬盘的年故障率可能能达到10%。这样算下来,一个有1000台机器的集群,每一个星期就会有2台机器宕机。所以在机器数量大了之后,这是一个很正常的事情。一般一台机器出故障之后修复周期是24小时,这个过程是人工接入换设备或者重启机器。在机器恢复之后内存信息完全丢失,硬盘信息可能可以保存。一个分布式系统必须保证一台机器的宕机对服务不受影响,并且在修复好了之后再重新放到集群当中之后也能正常工作。


    2.网络故障  


这是最常见且要命的故障。就是该问题会大大增加分布式系统设计的难度。故障一般发生在网络拥塞,路由变动,设备异常等情况。出现的问题可能是丢包,可能是延时,也可能是完全失去连接。


有鉴于此,我们一般在设计分布式系统的时候,四层协议都采用TCP,很少采用UDP/UDT协议。而且由于TCP协议并不能完全保证数据传输到对面,比如我们再发送数据,只要数据写入本地缓冲区,操作系统就会返回应用层说发送成功,但是有可能根本没送到对面。所以我们一般还需要加上应用层的ACK,来保证网络层的行为是可预期的。但是,即使加上应用层的ACK,当发送请求之后迟迟没收到ACK。这个时候作为发送方也并不知道到底对方是直接挂了没收到请求,还是收到请求之后才挂的。这个尤其是对于一些控制命令请求的发送尤为致命。


一般系统有两种方案:发送查询命令来判断到底是哪种情况?将协议设计成"幂等性"(即可重复发送数据并不影响最终数据), 然后不停重试。


    3.其他异常  


比如磁盘坏块,但是机器并没有宕机;机器还活着,就是各种操作特别慢;由于网络拥塞导致一会网络断掉,不发送数据之后又好了,一旦探活之后重新使用又挂了等恶心的情况;这些异常都需要根据实际情况来分析,在长期工程实践中去调整解决。并且令人非常沮丧的事实是:你在设计阶段考虑的异常一定会在实际运行情况中遇到,你没考虑到的异常也会在实际运行中遇到。所以分布式系统设计的一个原则是:不放过任何一个你看得到的异常。


    4.读写过程一致性如何保证  


一致性的概率很简单,就是我更新/删除请求返回之后,别人是否能读到我新写的这个值。对于单机系统,这个一致性要达到很简单,大不了是损失一点写的效率。但是对于分布式系统,这个就复杂了。为了容灾,一份数据肯定有多个副本,那么如何更新这多个副本以及控制读写协议就成了一个大问题。而且有的写操作可能会跨越多个分片,这就更复杂了。再加上刚才提到的网络故障,可能在同步数据的时候还会出现各种网络故障,想想就头疼。


而且即使达到了一致性,有可能读写性能也会受到很大损失。我们设计系统的时候就像一个滑动条,左边是一致性,右边是性能,两者无法同时满足(CAP原理)。一般的系统会取折衷,设计得比较好的系统能够让用户通过配置来控制这个滑动条的位置,满足不同类型的需求。


一致性一般怎么折衷呢?我们来看看如下几种一致性的定义。注意除了强一致性以外,其他几种一致性并不冲突,一个系统可以同时满足一种或者几种一致性特点。


a.强一致性:不用多说,就是最严格的一致性要求。任何时候任何用户只要写了,写请求返回的一霎那,所有其他用户都能读到新的值了。


b.最终一致性:这个也是提得很多的一个概念,很多系统默认提供这种方式的一致性。即最终系统将将达到"强一致性"的状态,但在之前会有一段不确定的时间,系统处于不一致的状态。


c.会话一致性:这个也很容易理解,能满足很多场景下的需求。在同一个会话当中,用户感受到的是"强一致性"的服务。


d.单调一致性:这个比会话一致性还要弱一点。他之保证一个用户在读到某个数据之后,绝对不会读到比上一次读到的值更老的数据。


    5.如何提高性能  


分布式系统设计之初就是为了通过堆积机器来增加系统整体性能,所以系统性能也非常重要。性能部分一般会受一致性/容灾等设计的影响,会有一定的折衷。衡量一个分布式系统的性能指标往往有:最大容量、读qps、写qps。


    6.如何保证横向扩展  


横向扩展是指一个集群的服务能力是否可以通过加机器做到线性扩展。


分布式存储系统存在哪些问题?_娱乐产业_时尚资讯


在分布式存储系统中,往往将一台服务器或者服务器上运行的一个进程称为一个节点,节点与节点之间通过网络互联。然而,服务节点是不可靠的,网络也是不可靠的,它们之间通信可能会出现各种异常。以上就是对分布式存储系统的总结。


18
195
0
53

相关资讯

  1. 1、点燃激情《世界3》战斗系统玩法操作解析147
  2. 2、妙笔救苍生《捉妖记》灵天师职业视频首曝3010
  3. 3、《山口山战记》活动预抽阿萨斯再启今日开启3638
  4. 4、天天炫舞—世界上最多玩家同一天虚拟结婚的手机游戏3337
  5. 5、目标是星辰大海《苍之纪元》作战小队参上3642
  6. 6、秦时明月手游新版本明日开测送海量豪礼4633
  7. 7、绝地乱斗9377《皇图》大型PK混战玩法全曝4186
  8. 8、《大秦帝国》神兵回炉系统问世化腐朽为神奇820
  9. 9、《热血江湖手游》内甲符文神秘力量加身780
  10. 10、《航海王强者之路》公测季今日开启超多活动来袭4303
全部评论(0)
我也有话说
0
收藏
点赞
顶部