当前位置: 首页 > 原理解释

数据快照的原理-数据快照原理

数据快照这东西,说白了就是给硬盘打个“工夫胶囊”。
你想想,平时咱们干活,后台进程狂吐数据,就像这口井里水流哗哗,看不完也摸不着底。
要是每次都要把这一捧水捞出来,慢慢倒进个新桶里,得折腾半天,还好办把桶弄脏。而快照,就是把手里的活路给截断了,直接把桶里的水舀起来,装进个空的桶里,啥都没变,只有桶里多了一块冰。
这就叫快照,它是把系统在某个具体工夫点的状态,给硬生生“冻结”住了。 这玩意儿最早是 UNIX 系统那帮大牛搞出来的,后来 Windows 和 Linux 赶紧冲了,目前哪位家的服务器不带着它?它最骚的地方在于“回滚”这一招。平时你修个 Bug,改个参数,删了个文件,这些操作就像往井里倒水,井底下的水还在,但你倒进去的这局部,井里就少了一杯。到了工夫到了,你直接抽走那杯,井底的水还是原来的样子。别当作这玩意儿能当魔法使,它确实能救急,但救的是特定时刻的局部状态,不是整个系统。
要是你要让刚刚倒进井里的那杯水恢复原样,那就得往井底再倒一杯一模一样的,这就有点费水了。 为了把道理讲明白,咱得拿点具体事儿来扯皮。假设你有个网页,刚建好,里面全是空的。你开发速度嗖嗖的,几行代码写出来,把按钮颜色调成蓝色,加个输入框,可在这之前,还没来得及测呢,服务器十分钟后就崩了,直接把整个网页给我给删了。
这时候,你如何能救?你得赶紧在服务器上做个快照。
这个快照,就像个庞大的“啥都没形成”的副本。 接着,你启动开发。随意改改,加俩新功能,加俩新按钮。
这时候,那个被删掉的网页,就彻底死定在那一刻了,再改也回不去了。你目前要做的,是把刚刚改的这局部,变成一个新的快照。
这个新快照里,包含了你刚刚改的所有代码,也包含了网页原本删掉的那局部。目前,你拿起这个新快照,插回服务器,就像给死掉的网页复活了,而原本的网页,别看还是死在那儿,但你彻底能够重新开发,覆盖在它上面。 这个过程看起来挺绕,实际上核心就是“工夫节点”和“独立副本”。快照不是重置系统,它只是多了一份记录。记不记得那个著名的 Google 2004 年快照?那时候他们得花点工夫,把最新页面上每一块像素都先存下来,存个几小时,还得重新渲染一遍,这操作比目前复杂多了,但道理没跑。目前数据量大了,快照也得有点“智商”。
不能一次就把整个数据库都存进去,那样硬盘快吐了还能用吗?故此目前主流的技术方案,往往是“动态快照”。也就是后台有个进程,每隔几分钟,要么每形成个重大事件,就把目前的状态给存一遍。 举个更贴近生活的例子。你存个 Excel 表格,里面有个公式在自动算出来个结局。
突然你又加了一列数据,结局表格里少了一行记录,你没法发现。
这时候,你要是重新计算一遍,数据就乱了。但你能够用一个“工夫戳快照”,把你刚刚加完最终一行、算完最终一行的那一刻,给存个档。
那你赶明儿想恢复这个状态,就随意恢复那个工夫点,之前的数据还在,新的数据也没被写进去,表格就整个了。 不过,这种“静态快照”也有缺点。
要是服务器挂了,你拿那个刚生成的快照去修,万一那个工夫点服务器还没彻底预备好,要么快照本身有毛病,那整台机器都得跟着报废。
故此,目前的趋势是动态快照和静态快照混着干。动态快照侧重保数据保险、保业务连续性;静态快照侧重开发调试、回滚发布。就像咱们平时修车,有直尺量一下,有记录一下里程数,有时候还得把发动机拆下来换个件,有时候直接换套新轮胎就行。 最终还得提个词,“回滚”。大量人把这个词和“恢复”搞混了。恢复是啥?是啥都给你弄回去,把硬盘当新盘用。回滚是啥?只把刚刚掉下去的那点东西捡回来,其他的啥都没动。就像刚刚那个网页例子,回滚就是别把网页删了,赶紧把代码切出来,再测一下。测完了,把代码切回去。
这就叫回滚。它不是对系统状态的全面重置,而是对特定变更点的定位。 数据快照,实际上就是给系统装上了一个“暂停键”和一个“回放机”。它不保证一辈子不中,但能确保在关键时刻,你能随时把事故点拉出来。在搞数据的项目里,它不是救命的稻草,它是保命符。别指望它能解决所有难题,但有了它,起码你知道,在某个工夫点,一切还是原来的样子。
这就好比你在密室里,里面有个密室,这俩副本,一个是你目前,一个是你刚刚进来的那一刻。
只要你手里的刷子够好,把两个副本刷出来,你还能持续在里面折腾。
这就是快照的威力。
相关标签:

猜你喜欢

热门阅读

  • 赖柴尔定理-赖柴尔定理
  • 迪拜哪个国家的城市?-迪拜在哪国城市
  • 李毅吧番号及出处-李毅吧番号及出处
  • 贴春联的由来简介50字-春联由来简述
  • 思乡的名言和出处-思乡名言及出处

其他分站