系統(tǒng)產(chǎn)生的數(shù)據(jù), 是有生命周期的. 總結(jié)來說可以分成三個階段:
- 炙手可熱.
- 不時之需
- 以備后患
0x00 炙手可熱
數(shù)據(jù)處于"炙手可熱"時期, 一般指線上系統(tǒng)會訪問, 或者近期計算需要使用的數(shù)據(jù). 比如線上 DB 中的數(shù)據(jù), 或者當(dāng)天產(chǎn)生的日志. 這種情況下, 必須以性能為主要考慮因素, 放在訪問最快的介質(zhì)中
0x01 不時之需
過一段時間后, 部分?jǐn)?shù)據(jù)會變成只有很少情況會訪問到的情況. 比如一年前的訂單, 或者是已經(jīng) ETL 過的原始的日志手. 這種場景下, 就可以將數(shù)據(jù)遷移到相對便宜的存儲方案中. 例如一些電商網(wǎng)站把這個階段的數(shù)據(jù)存儲到 HBase 中. 這種存儲的選型, 更多的是結(jié)合業(yè)務(wù)系統(tǒng)的改造, 盡量選擇一個價格便宜, 但數(shù)據(jù)遷移成本相對低廉的方案.
0x02 以備后患
這種場景下, 數(shù)據(jù)變成了容災(zāi)備份, 無論如何線上系統(tǒng)或者分析系統(tǒng)都不會訪問這部分?jǐn)?shù)據(jù). 但一旦需要這種數(shù)據(jù)時, 最重要的卻是多長時間能夠數(shù)據(jù)到位(一般備份數(shù)據(jù)都很大). 成本低廉 + 持久性好 + 容災(zāi)恢復(fù)快是此類型數(shù)據(jù)存儲選型的三個要素. 當(dāng)然, 更關(guān)鍵并且容易忽略的是, 備份完成后一定要驗證備份可用啊, Gitlab.com 300G 數(shù)據(jù)遭誤刪,5種備份失效,在線等!, 如果標(biāo)題中的主角換成你家公司, 你肯定準(zhǔn)備卷包袱走人了吧...
0x03 存儲選型閑扯
舉兩個例子, 閑扯一下線上數(shù)據(jù)庫和分析數(shù)據(jù)存儲在上述三種情況下的選型.
線上數(shù)據(jù)庫
-
炙手可熱
階段數(shù)據(jù)一般都存儲在 MySQL 中 -
不時之需
階段數(shù)據(jù)可以選擇 HBase 等便宜又能塞的多的品種; 數(shù)據(jù)遷移的策略也可以根據(jù)業(yè)務(wù)場景進(jìn)行選擇, 比如一刀切按照時間遷移, 或則給每個用戶保存最后一段時間范圍的數(shù)據(jù). -
以備后患
階段, 就要看手頭有什么了, 如果是 AWS 家的, 強(qiáng)烈推薦 S3
日志存儲
-
炙手可熱
階段, AWS 家的話數(shù)據(jù)可以存儲在 S3 的 Standard 級別的存儲中; 自建 Hadoop 的話就是 HDFS 了 -
不時之需
階段, 由于 S3 便宜, Standard 這個級別還可以繼續(xù)保持 Standard 級別的存儲; HDFS 的話, 就要參考 HDFS 新特性: Archival Storage, SSD & Memory -
以備后患
階段, AWS 家有 Glacier/Standard IA 兩個選擇, 更便宜, 直設(shè)置一下規(guī)則即可
0x04 總結(jié)
數(shù)據(jù)按照生命周期這個維度選擇不同的存儲介質(zhì), 以來節(jié)省成本, 二來還能降低對炙手可熱
級別系統(tǒng)的影響, 比如爬蟲經(jīng)常爬歷史數(shù)據(jù)導(dǎo)致線上數(shù)據(jù)庫負(fù)載高影響正常用戶.
日志型數(shù)據(jù)存儲分級別就更是剛需了, 當(dāng)年 HDFS Archival Storage 沒有的年代, 冷數(shù)據(jù)扔也不是, 不扔存儲3份還嫌貴的糾結(jié)誰經(jīng)歷過誰知道其中的酸爽. 不過這里還是要表揚(yáng)一下 AWS 家的 S3, 通過簡單的設(shè)置就可以支持回收站和冷熱數(shù)據(jù)轉(zhuǎn)移的功能. 例如如下 Terraform 配置:
lifecycle_rule {
id = "log"
# 根據(jù)路徑指定存儲規(guī)則
prefix = "log/"
enabled = true
# ----- 冷熱數(shù)據(jù)分級配置 ----
## 30 天后將數(shù)據(jù)放到稍微便宜一點(diǎn)兒的存儲
transition {
days = 30
storage_class = "STANDARD_IA"
}
## 60天后, 將數(shù)據(jù)轉(zhuǎn)移到 Glacier 級別的存儲, 就是最便宜那種
transition {
days = 60
storage_class = "GLACIER"
}
## 這里的意思是 90 天后數(shù)據(jù)就自動刪除
expiration {
days = 90
}
# -------------------
## 往下就是回收站功能
## 數(shù)據(jù)刪除 30 天后, 轉(zhuǎn)移到便宜的 IA 級別
noncurrent_version_transition {
days = 30
storage_class = "STANDARD_IA"
}
## 數(shù)據(jù)被刪除90天后, 自動徹底刪除
noncurrent_version_expiration {
days = 90
}
}
-- EOF --