开发者学堂课程【分布式文件存储系统技术及实现:常见分布式系统-终版 】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/368/detail/4381
分布式系统功能设计-Replication
内容介绍
一、怎样保证数据不丢失?
二、怎样即使发现磁盘出现错误呢?
一、怎样保证数据不丢失?
要保证在机器或者磁盘出现问题的时候快速进行复制,这是里面一个技术含量非常高的点。
二、怎样即使发现磁盘出现错误呢?
1. 及时发现磁盘问题
在计算机里面每隔 15 秒会汇报一次心跳,这样的话在 15 秒之内可以发现坏盘,同时磁盘上存储的数据可以快速进行恢复,比如某块磁盘出错了,然后 15 秒内发现磁盘出错,计算机会问这个磁盘存储了哪些文件的数据 ,然后针对这些文件做快速恢复,它的恢复优先级是相对较高的。
2. 考虑网络流量,快速恢复数据
在复制的过程中还要考虑到网络流量,如果参加的机械数比较少的话网络带宽自然会降低,所以在这过程中会尽量多利用带宽。比如某个机器出错的时候,我们发现这个机器上存储的数据分布在多个机器上,为了快速恢复会找到所有可以发起复制的源,然后往尽量多的目的端把数据补齐。整个集群如果有五千台机器,每台机器利用 30m 带宽的话,这个流量可以达到几百G的级别,所以恢复磁盘的数据只需要十几分钟的时间,这就有效防止多个磁盘在同时发生错误的时候数据丢失的概率。
3. 比较数据的优先级
在复制过程中可能有不同的优先级,比如一个文件要求写三部分但已经丢了两部分,同一文件要求写三部分,现在有两部分的优先级是不同的,这时候发现有数据接近丢失的情况下会以更高的优先级进行复制。在复制过程中,由于复制流量可能会非常高,不能复制,再造成异常节点。如果不加控制的话,复制的数据将会非常多,可能会把网络占满,这时候如果心跳丢失,会造成整个机器又是一个异常点,要恢复的数据将变得更多造成一个数据风暴,所以在这过程中是要增加流量控制的。
4. 根据配置控制流量
每台机器的千兆网卡配置下,会控制到 30M 流量,这样防止恢复数据造成整个集群不可用。在这样的动画中看到在一台机器宕机的情况下数据在多个机器间相互复制,很快复制到以前拷过数据的过程。