DevOps實(shí)踐-數(shù)據(jù)庫備份設(shè)計

DevOps實(shí)踐系列文章,請參見連接。

概述:

在所有的軟件系統(tǒng)中都有數(shù)據(jù)持久化的需求。而平常我們在軟件系統(tǒng)中使用最多的方式就是數(shù)據(jù)庫。所以,就需要對數(shù)據(jù)庫的可靠性做一些必要的設(shè)計。以保證之后在項(xiàng)目上線運(yùn)營過程中發(fā)生不可修復(fù)的問題,以此來整體提高軟件系統(tǒng)的整體可靠性。

隨著軟件行業(yè)的不斷發(fā)展,行業(yè)中也對軟件各個層面上的解決方案都提供了高性能、靠可靠的解決方案?,F(xiàn)在在數(shù)據(jù)存儲層面也形成了很多解決方案。如:RDBMS的分庫分片技術(shù)、NoSql的CAP解決方案、NewSQL技術(shù)、BigTable技術(shù)等。雖然數(shù)據(jù)存儲層也有著層出不窮的存儲技術(shù),就像作者之前說的一樣。每項(xiàng)技術(shù)都有它所擅長的方向,都有它的問題解決域。所以,不是每一項(xiàng)技術(shù)都可以應(yīng)用到所有的場景下。

針對業(yè)務(wù)系統(tǒng)中的結(jié)構(gòu)化數(shù)據(jù)存儲領(lǐng)域,仍然是RDBMS占有著很大的優(yōu)勢。就算是RDBMS型的數(shù)據(jù)庫也可以再劃分為很多種類型。鑒于本文關(guān)系的是數(shù)據(jù)庫的存儲(物理)結(jié)構(gòu),從數(shù)據(jù)庫的存儲結(jié)構(gòu)上將數(shù)據(jù)庫分為:內(nèi)存式、文件系統(tǒng)、物理機(jī)?;旧弦粋€比較成熟的數(shù)據(jù)庫都是支持這些模式。

內(nèi)存式 文件系統(tǒng) 物理機(jī)
Oracle TimesTen 本身支持 本身支持
Postgresql 不支持,支持表空間 本身支持 不支持
Mysql MEMORY存儲引擎 本身支持 InnoDB存儲引擎
Sqlite3 本身支持 本身支持 不支持

數(shù)據(jù)庫使用過程中需要發(fā)揮RDBMS的特點(diǎn)。在滿足業(yè)務(wù)上的需求的同時,還需要滿足技術(shù)上的、運(yùn)維上的很多需求。所以接下來就從數(shù)據(jù)庫設(shè)計開始一步一步的深入數(shù)據(jù)庫可靠性設(shè)計的方方面面。

數(shù)據(jù)庫驅(qū)動開發(fā):

現(xiàn)在業(yè)界有一種不成文的規(guī)定:在項(xiàng)目沒有發(fā)展到一定階段時,開發(fā)模型都會直接使用數(shù)據(jù)庫驅(qū)動開發(fā)。然后在到達(dá)一定階段之后,再進(jìn)行重構(gòu)。
這里對數(shù)據(jù)庫驅(qū)動開發(fā)的軟件過程或思維模式的指導(dǎo)下,簡單的對項(xiàng)目的實(shí)施過程進(jìn)行一下闡述:

  1. 根據(jù)業(yè)務(wù)分析出數(shù)據(jù)庫邏輯結(jié)構(gòu);
  2. \color{#FF00FF}{設(shè)計數(shù)據(jù)庫的運(yùn)維方法};
    • 規(guī)劃數(shù)據(jù)庫容量,并發(fā)量
    • 設(shè)計數(shù)據(jù)庫物理存儲結(jié)構(gòu)
    • 設(shè)計容災(zāi)與備份方案
  3. 開發(fā)、測試、部署之后即可交付。

數(shù)據(jù)庫驅(qū)動開發(fā)模式是對軟件無知狀態(tài)下的一種探索。它忽略了前期、中期、后期的很多分析與度量的內(nèi)容。并且省略了上面的第二條。而且根據(jù)作者在之后會介紹倉庫系統(tǒng)及知識庫架構(gòu)模式中的指導(dǎo):可以將數(shù)據(jù)庫作為以一個知識庫。也不會進(jìn)行提前的風(fēng)險評估。知識庫是用來在不同的業(yè)務(wù)或者服務(wù)間共享知識與數(shù)據(jù)。所以,這里并不是推薦這種開發(fā)模式,并請盡量不要使用數(shù)據(jù)庫驅(qū)動開發(fā)模式。

數(shù)據(jù)庫設(shè)計:

數(shù)據(jù)庫設(shè)計一般可以分為:概念結(jié)構(gòu)設(shè)計、邏輯結(jié)構(gòu)設(shè)計、物理結(jié)構(gòu)設(shè)計。概念結(jié)構(gòu)設(shè)計是將業(yè)務(wù)轉(zhuǎn)化為數(shù)據(jù)庫中結(jié)構(gòu)的一個過程。邏輯結(jié)構(gòu)設(shè)計是根據(jù)概念結(jié)構(gòu)設(shè)計中的E-R圖,具體的將實(shí)體關(guān)系,數(shù)據(jù)格式定義出來。物理結(jié)構(gòu)設(shè)計是確定邏輯層的數(shù)據(jù)存儲在什么樣的硬件上,怎樣存儲在硬件上。

我們這里更關(guān)心物理結(jié)構(gòu)設(shè)計。第一步是需要知道業(yè)務(wù)中的非功能需求。非功能需求可以評估出數(shù)據(jù)庫的容量,并發(fā)量,數(shù)據(jù)類型等等信息。然后根據(jù)這些信息在進(jìn)行下一步的設(shè)計工作。設(shè)計工作中要考慮的內(nèi)容有:

  1. 數(shù)據(jù)庫的存儲容量是否能夠容納,是否需要進(jìn)行分庫,分表操作。
  2. 是讀頻繁型,還是寫頻繁型,還是都頻繁型?
  3. 數(shù)據(jù)庫對數(shù)據(jù)寫入到查詢出的時延要求?
  4. 是否允許進(jìn)行讀寫分離設(shè)計?
  5. 數(shù)據(jù)庫是否允許冷備,還是只可以進(jìn)行熱備或者變形方案?
  6. 數(shù)據(jù)庫可以接受的備份方式:全量備份,增量備份(日志備份,差異備份),不備份?
  7. 數(shù)據(jù)庫恢復(fù)時允許丟失的數(shù)據(jù)的要求?
  8. 數(shù)據(jù)庫運(yùn)維監(jiān)控、容量監(jiān)控、負(fù)載監(jiān)控、熱數(shù)據(jù)加速、死鎖檢測。
  9. 數(shù)據(jù)庫恢復(fù)設(shè)計?;謴?fù)時間要求?恢復(fù)到的環(huán)境的要求?

在設(shè)計過程中還需要考慮數(shù)據(jù)庫中存儲的數(shù)據(jù)的價值以及對于維護(hù)數(shù)據(jù)庫可用、可靠的投入之間的投入產(chǎn)出比。因?yàn)橐粋€完備的數(shù)據(jù)庫設(shè)計可能成本會非常高。而對于一個小型的網(wǎng)頁應(yīng)用來看,不必要做的很完善。

并且因?yàn)閿?shù)據(jù)庫的備份工作一般情況下還是需要人員參與的,所以也需要制定一套完善的數(shù)據(jù)庫操作規(guī)范。以防止在人為參與的情況下造成數(shù)據(jù)的丟失與不一致。并且需要設(shè)計一套完整的自動化數(shù)據(jù)庫運(yùn)維過程。

備份設(shè)計:

數(shù)據(jù)庫的備份需要從下圖中的幾個方面進(jìn)行考慮。但在每個產(chǎn)品/項(xiàng)目中數(shù)據(jù)庫的使用設(shè)計都是不盡興同的,所以,對數(shù)據(jù)庫的備份方面的設(shè)計還是要與使用設(shè)計相結(jié)合。這里只介紹備份設(shè)計中需要考慮的內(nèi)容。

數(shù)據(jù)庫備份設(shè)計

下面逐層介紹需要注意的內(nèi)容:

  1. 邏輯結(jié)構(gòu)層:
    • 邏輯結(jié)構(gòu)中是否可以進(jìn)行讀寫分離時的部分表的備份,即是否有外鍵關(guān)系,表中的數(shù)據(jù)是否可以進(jìn)行單獨(dú)的導(dǎo)入導(dǎo)出操作。
    • 數(shù)據(jù)索引是否與具體的存儲結(jié)構(gòu)和索引方式有關(guān)。如果有關(guān)需要將這些元數(shù)據(jù)一并保存。
    • 數(shù)據(jù)庫中的存儲過程,觸發(fā)器是否與表空間、邏輯數(shù)據(jù)庫有關(guān)。
    • 數(shù)據(jù)備份時使用鎖表,還是停機(jī)的方式進(jìn)行備份?
  2. 中間件
    • 中間件中的分片策略是否與具體的數(shù)據(jù)庫有關(guān),是否可以在中間上替換數(shù)據(jù)庫實(shí)例?
    • 向中間件中新添加數(shù)據(jù)庫實(shí)例時,分片策略是否需要變更?
  3. 內(nèi)存
    • 表數(shù)據(jù)怎樣被加載到內(nèi)存中?
    • 是否有內(nèi)存表的創(chuàng)建?內(nèi)存表是否需要進(jìn)行備份?
  4. 計算
    • 計算是在磁盤上的數(shù)據(jù)中進(jìn)行的還是在內(nèi)存上的數(shù)據(jù)中進(jìn)行的?
    • 是否有預(yù)處理、預(yù)計算結(jié)果保存表,每次備份重新計算還是直接保存預(yù)計算結(jié)果?
  5. 裸設(shè)備
    • 裸設(shè)備上的數(shù)據(jù)是否有工具可以備份成文件形式?并有工具可以恢復(fù)回去
    • 裸設(shè)備導(dǎo)出與導(dǎo)入的速度?
  6. 自動化
    • 盡量的減少人工操作的內(nèi)容,減少因?yàn)槿斯氲腻e誤。
  7. 規(guī)范流程
    • 數(shù)據(jù)遷移工具的使用規(guī)范
    • 數(shù)據(jù)備份過程規(guī)范
    • 數(shù)據(jù)備份存儲規(guī)范
    • 數(shù)據(jù)備份恢復(fù)規(guī)范

參照:

關(guān)于開發(fā)方法可以參照:TDD,ATDD,BDD,DDD,MDSD。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第三章 數(shù)據(jù)庫系統(tǒng) 3.1 數(shù)據(jù)庫管理系統(tǒng)的類型 通常有多個分類標(biāo)準(zhǔn)。如按數(shù)據(jù)模型分類、按用戶數(shù)分類、按數(shù)據(jù)庫分布...
    步積閱讀 3,114評論 0 7
  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當(dāng)在唯一索引所對應(yīng)的列上鍵入重復(fù)值時,會觸發(fā)此異常。 O...
    我想起個好名字閱讀 5,954評論 0 9
  • 【什么是大數(shù)據(jù)、大數(shù)據(jù)技術(shù)】 大數(shù)據(jù),又稱巨量資料,指的是所涉及的數(shù)據(jù)資料量規(guī)模巨大到無法在合理時間內(nèi)通過傳統(tǒng)的應(yīng)...
    kimibob閱讀 2,898評論 0 51
  • 今天看到一位朋友寫的mysql筆記總結(jié),覺得寫的很詳細(xì)很用心,這里轉(zhuǎn)載一下,供大家參考下,也希望大家能關(guān)注他原文地...
    信仰與初衷閱讀 4,826評論 0 30
  • 在這里,希望喜歡它的人一起每日感悟人生哲理,為你的生活多一點(diǎn)改變。 1、特立獨(dú)行的風(fēng)格,是思想美麗的衣裳。 2、自...
    林窗鯨落閱讀 240評論 0 0

友情鏈接更多精彩內(nèi)容