高效能資料庫集群的第一種方式是「讀寫分離」,其本質是將訪問壓力分散到集群中的多個節點,但是沒有分散儲存壓力;
第二種方式是「分庫分表」,既可以分散訪問壓力,又可以分散儲存壓力。
讀寫分離的基本實現是:
解決主從複製延遲有幾種常見的方法:
1. 寫操作後的讀操作指定發給資料庫主伺服器
2. 讀從機失敗後再讀一次主機
3. 關鍵業務讀寫操作全部指向主機,非關鍵業務採用讀寫分離
分配機制
將讀寫操作區分開來,然後訪問不同的資料庫伺服器,一般有兩種方式:程式**封裝和中介軟體封裝。
程式**封裝。示意圖:
中介軟體封裝:
中介軟體封裝指的是獨立一套系統出來,實現讀寫操作分離和資料庫伺服器連線的管理。中介軟體對業務伺服器提供 sql 相容的協議,業務伺服器無須自己進行讀寫分離。對於業務伺服器來說,訪問中介軟體和訪問資料庫沒有區別,事實上在業務伺服器看來,中介軟體就是乙個資料庫伺服器。其基本架構是:
分散儲存的方法「分庫分表」,其中包括「分庫」和「分表」兩大類。
1、分庫:
業務分庫指的是按照業務模組將資料分散到不同的資料庫伺服器。 通過分庫,將業務分別儲存在不同的資料庫中,從而降低資料庫儲存壓力。
分庫後,sql的join和事務無法使用,不建議初創公司使用。
單台資料庫伺服器的效能:一般來說,單台資料庫伺服器能夠支撐 10 萬使用者量量級的業務。
2、分表:
將不同業務資料分散儲存到不同的資料庫伺服器,能夠支撐百萬甚至千萬使用者規模的業務,但如果業務繼續發展,同一業務的單錶資料也會達到單台資料庫伺服器的處理瓶頸。此時就需要對單錶資料進行拆分。
單錶資料拆分有兩種方式:垂直分表和水平分表。
垂直分表適合將表中某些不常用且佔了大量空間的列拆分出去。水平分表適合錶行數特別大的表。
水平分表後,某條資料具體屬於哪個切分後的子表,需要增加路由演算法進行計算。
常見的路由演算法有:
hash 路由
配置路由
nosql 是 sql 的乙個有力補充,nosql != no sql,而是 nosql = not only sql。
nosql 方案帶來的優勢,本質上是犧牲 acid 中的某個或者某幾個特性。
常見的 nosql 方案分為 4 類。
k-v 儲存:解決關聯式資料庫無法儲存資料結構的問題,以 redis 為代表。
文件資料庫:解決關聯式資料庫強 schema 約束的問題,以 mongodb 為代表。
列式資料庫:解決關聯式資料庫大資料場景下的 i/o 問題,以 hbase 為代表。
全文搜尋引擎:解決關聯式資料庫的全文搜尋效能問題,以 elasticsearch 為代表。
需要經過複雜運算後得出的資料,儲存系統無能為力
讀多寫少的資料,儲存系統有心無力
快取就是為了彌補儲存系統在這些複雜業務場景下的不足,其基本原理是
將可能重複使用的資料放到記憶體中,一次生成、多次使用,避免每次使用都去訪問儲存系統。
快取能夠帶來效能的大幅提公升,以 memcache 為例,單台 memcache 伺服器簡單的 key-value 查詢能夠達到 tps 50000 以上,其基本的架構是:
快取穿透是指快取沒有發揮作用,業務系統雖然去快取查詢資料,但快取中沒有資料,業務系統需要再次去儲存系統查詢資料。
快取雪崩是指當快取失效(過期)後引起系統效能急劇下降的情況。
快取熱點的解決方案就是複製多份快取副本,將請求分散到多個快取伺服器上,減輕快取熱點導致的單台快取伺服器壓力。
架構設計 9 高效能設計
架構設計學習思維導圖 架構設計系列主要的adm 架構開發方法 主要基於togaf9或者togaf9.1來論述。這是個人學習實踐和總結筆記,專注並不斷積累和更新,努力精進自己。個人拙見,僅供參考。1 架構概述 了解架構基礎知識 架構定義 分類 級別 應用架構演進 架構是否合理 架構誤區等。談談架構 2...
資料庫架構設計
當您根據現有的資料庫規劃工作流應用程式時,請記住 將現有資料庫註冊為工作流應用程式之前,請製作該資料庫的乙個備份副本。不要試圖對產品資料庫進行設計更改。將資料庫移動並複製到某個測試環境中,並在該環境中執行所有工作流實現和架構更改。在確保工作流應用程式按照預期的那樣執行之後,請將其部署到生產伺服器中。...
資料庫架構設計規範
資料庫架構設計 做架構到底是在做什麼?抽象能力 抽象 具象 資料庫架構設計分為以下三種 1.具體內容設計資料庫的乙個邏輯結構。與具體的dbms無關,主要反映業務邏輯 2.設計步驟 用關係模型 3.使用工具來模型化 e r圖。4.實體關係模型 5.至少滿足3nf 第一正規化 1nf 要求資料庫表的每一...