程序员误删,暂时不用离职了…… | 凌云时刻


凌云时刻 · 技术

程序员误删,暂时不用离职了…… | 凌云时刻_第1张图片

导读:阿里云对象存储 OSS 是保存海量数据的平台,支持丰富的应用。在使用过程中难免会遇到误操作、程序 Bug、覆盖写等导致数据被删除的场景,对于数据的丢失会非常着急,后果也非常严重,甚至某些情况下还会影响你的职业生涯。  

作者 | 罗庆超

来源 | 凌云时刻(微信号:linuxpk)

1. 背景

                   

阿里云对象存储 OSS 是保存海量数据的平台,支持丰富的应用。在使用过程中难免会遇到误操作、程序 Bug、覆盖写等导致数据被删除的场景,对于数据的丢失会非常着急,后果也非常严重,甚至某些情况下还会影响你的职业生涯。OSS 每年都会遇到多起客户误删除数据的事件,为此 OSS 开发了 版本控制 功能,开启该特性后,可以在误删除数据时通过历史版本找回数据。

2. 版本控制技术介绍


存储空间(Bucket)开启版本控制后,OSS 会为 Bucket 中所有文件(Object)的每个版本指定唯一的 ID 值,且 Bucket 中现有 Object 的内容、权限保持不变。开启版本控制后,还能够防止意外覆盖或者删除 Object ,并允许查询、恢复 Object 的历史版本。详细信息,请参考 官网 介绍。

程序员误删,暂时不用离职了…… | 凌云时刻_第2张图片

如上图所示,通过 PUT 操作第一次上传同名 Object (key=example.jpg)时,原始 Object 版本(ID=111111)作为历史版本,生成的新版本(ID=222222)将作为当前版本保存在存储空间中。当再次上传同名 Object 时,原始 Object 版本(包括 ID=111111 以及 ID=222222)将作为历史版本,而生成的新版本(ID=333333)则作为当前版本保存在 Bucket 中。

3. 数据防误删实际操作

 3.1 开启版本控制

开启版本控制有两种方式:

  • 创建时,选择开通 版本控制

  • 创建后,设置 版本控制

程序员误删,暂时不用离职了…… | 凌云时刻_第3张图片

程序员误删,暂时不用离职了…… | 凌云时刻_第4张图片

因此,通过创建后设置版本控制,可以对存量的OSS数据设置版本控制,有效的保障历史数据。

 3.2 上传对象

开启版本控制后,在控制台有 显示对象的历史版本 框,选择该框则可以显示对象的历史版本,如下图所示。

 
程序员误删,暂时不用离职了…… | 凌云时刻_第5张图片

通过在控制台上传同名对象,则会生成多个版本,其中显示(最新版本) 的那个对象是最新对象,更新时间 也是最近的时间。

 3.3 删除对象

开启版本控制后,删除对象并不会真正删除,而是插入 删除标记,如下图所示。

程序员误删,暂时不用离职了…… | 凌云时刻_第6张图片

程序员误删,暂时不用离职了…… | 凌云时刻_第7张图片

删除对象后,如果没有选择 显示对象的历史版本则在控制台显示该文件不存在,但实际上对象并未删除,因此可以支持后面的恢复操作。

 3.4 快捷的恢复数据

由于开通了版本保护,数据历史版本并未删除,可以采用下图所示的顺序,DIY 恢复数据。第一步,选中 显示对象的历史版本,此时可以看到历史版本,其中显示 (删除标记) 表示该对象被删除。第二步,删除该 (删除标记)就可以让数据在控制台重新可见。第三步,删除标记成功后,最近的版本被恢复为 (最新版本),此时不管是否选中 显示对象的历史版本,都可以在控制台看到该对象。

程序员误删,暂时不用离职了…… | 凌云时刻_第8张图片

因此,开通了版本控制后,可以非常便捷的 DIY 恢复数据,不用再担心“误操作、程序 Bug、覆盖写”等带来的严重影响。

4. 数据误删的批量修复实战

OSS 控制台提供了简单的单对象恢复能力,但是对于删除目录下的海量文件,效率就非常低下了,需要频繁的UI点击,修复速度太慢。因此 OSS 提供了 ossutil 工具,能够批量修复数据,提高修复效率。

 4.1 指定前缀批量修复

程序员误删,暂时不用离职了…… | 凌云时刻_第9张图片

整个过程如上图,参考命令为:

$) ./ossutilmac64 ls oss://test-jsj-versioning/prefix/ --all-versions
| grep -rn "true        true           oss://"
| awk -F ' '  '{drcmd=("./ossutilmac64 rm " $10" --version-id "$7);print drcmd}'
| sh

其中,删除标记会显示 "true true",所以只需要删除匹配 前缀 的删除标记,即可恢复对象。

 4.2 指定时间批量修复

程序员误删,暂时不用离职了…… | 凌云时刻_第10张图片

整个过程如上图,参考命令为:

./ossutilmac64 ls oss://test-jsj-versioning/pre- --all-versions
| awk '{(dtime=($1" "$2" "$3" "$4));
if ((dtime>="2020-06-16 16:55:05 +0800 CST")
&& (dtime<="2020-06-16 16:55:40 +0800 CST")) print}'
| grep -rn "true        true           oss://"
| awk -F ' '  '{drcmd=("./ossutilmac64 rm " $10" --version-id "$7);print drcmd}'
| sh


只需要删除匹配 时间范围 的删除标记,即可恢复对象。

 4.3 指定修复列表文件批量修复

程序员误删,暂时不用离职了…… | 凌云时刻_第11张图片

整个过程如上图,参考命令为:

for i in cat file_list;
do
./ossutilmac64 ls oss://test-jsj-versioning/$i --all-versions
| grep -rn "true        true           oss://"
| awk -F ' '  '{drcmd=("./ossutilmac64 rm " $10" --version-id "$7);print drcmd}'
| sh;
done


只需要遍历 修复列表文件,并删除对象的删除标记,即可恢复对象。

5. 版本控制和生命周期结合实现类回收站(成本优化)


设置版本控制后,即使删除对象也会保留历史版本,这会带来成本的增加。为了支持版本控制的数据恢复,以及成本优化,设计了 版本控制+生命周期的组合方案,如下图所示。

 

程序员误删,暂时不用离职了…… | 凌云时刻_第12张图片

程序员误删,暂时不用离职了…… | 凌云时刻_第13张图片

在生命周期配置中,针对 当前版本(删除标记) 和 历史版本 设置策略,可以将其在指定时间后转换为其他类型从而 降低成本,也可以选择在指定天数(比如30天)之后删除,从而在 30 天内仍然可以恢复数据,类似回收站的保留时长。

6. 小结

数据误删除是非常严重的事件,也是难以预防的问题。通过开通对象存储 OSS 的 版本控制 提供了有效的数据保护方案,封装 版本控制+生命周期 的回收站也可以帮助更好的优化成本和恢复体验,希望您能尽快开通,保护您的珍贵数据。 

END

往期精彩文章回顾

云原生:重新定义云时代的技术标准

我们能从Matlab被禁中学习什么?

申通上云?技术详解!

Python 命令行库的大乱斗

乘风破浪的中国数据库

SpaceX上天容易,Tesla自动驾驶难

与生命赛跑,Serverless提升AI诊断效率90%

技术创造新商业:云研发时代的效能挑战

生不出孩子怪天气?驳《我国工业软件失去的30年》一文

应云而生,原力觉醒——解读云原生基础设施

长按扫描二维码关注凌云时刻

每日收获前沿技术与科技洞见

你可能感兴趣的:(程序员误删,暂时不用离职了…… | 凌云时刻)