RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

干貨:20個MySQL開源數據庫架構設計原則

如意 ? 來源:數據庫開發(fā) ? 作者:佚名 ? 2020-08-28 10:57 ? 次閱讀

開源數據庫架構設計原則

01. 技術選型

選擇成熟的平臺和技術,同時是最熟悉的,能做到極致的,用好不用壞,用熟不用生。目前業(yè)界的MySQL主流分支版本有Oracle官方版本的MySQL、Percona Server、MariaDB。

02. 高可用選擇

高可用解決方案探討的本質上是低宕機時間解決方案,可以理解成高可用的反面是不可用,絕大部分情況下數據庫宕機才會導致數據庫不可用。隨著技術發(fā)展,開源數據庫方面很多高可用組件(主從復制、半同步、MGR、MHA、Galera Cluster),對應場景,只有適合的,沒有萬能的,需要理解每個高可用優(yōu)缺點。

03. 表設計

表設計方面目前一致堅持和提倡的原則:

單表數據量

所有表都需要添加注釋,單表數據量建議控制在 3000 萬以內

不保存大字段數據

不在數據庫中存儲圖片、文件等大數據

表使用規(guī)范

拆分大字段和訪問頻率低的字段,分離冷熱數據

單表字段數控制在 20 個以內

索引規(guī)范

1.單張表中索引數量不超過 5 個

2.單個索引中的字段數不超過 5 個

3.INNODB 主鍵推薦使用自增列,主鍵不應該被修改,字符串不應該做主鍵,

如果不指定主鍵,INNODB 會使用唯一且非空值索引代替

4.如果是復合索引,區(qū)分最大的字段放在索引前面

5. 避免冗余或重復索引:合理創(chuàng)建聯合索引(避免冗余)

6. 不在低基數列上建立索引,例如‘性別’

7. 不在索引列進行數學運算和函數運算

字符集utf8mb4(偏生字,表情符)

04. 優(yōu)化原則

05. 復制方式

MySQL復制方式提供異步方式、半同步方式、全局事務強一致性、binglog同步。需要不同業(yè)務系統(tǒng)間 或 兩個數據庫間進行同步。異步方式可以防止故障和效率問題的蔓延,擴大化;但強一致性會更復雜,并發(fā)、事務大小都有求限制。

06. 分離原則

區(qū)分核心的業(yè)務,重要業(yè)務,渠道,內部業(yè)務的業(yè)務系統(tǒng),對不同的系統(tǒng)設置不同的架構。為核心業(yè)務設置 最佳為分庫,多活 專用高速公路,其他業(yè)務可以做讀寫分離,緩存。

07. 擴展性

對于系統(tǒng)來說擴展性很重要,盡量做到水平擴展。避免過度依賴縱向擴展,同時具備縱向,橫向擴展的能力,例如無狀態(tài)應用應該多套負載均衡多活部署,數據庫分庫架構。

08. 讀寫分離

讀多寫少場景(10%寫 90%讀)

復制存在延遲,業(yè)務對延遲不敏感的

實現方式:

1. 通過應用代碼配置讀寫分離,

2. 通過中間代理方式路由只讀庫 &

3. 業(yè)務和數據庫為一個單位

09. 分庫分表

當表中數據記錄的數量超過3000萬條,再好的索引也已經不能提高數據查詢的速度,這時需要將表拆分成更多的小表,增加性能,增加彈性,避免發(fā)生垮庫進行操作。

引入中間價要考慮性能代價,聚合需求。

分庫原則盡量在app 上層進行分庫,就是流量。

分多少合適:可用性和性能滿足TPS。

路由:寫入配置文件 或則 插表 或則 zookeeper。

10. 歸檔原則

歷史數據定期進行歸檔 或則 移到其他大數據平臺。能讓輕量級數據庫更多緩存有用的數據。

在MySQL分區(qū)表里 注意要避免分區(qū)鎖,只能寫讀的場景。

11. 連接池的要求

長鏈接,自動重鏈,延時和異常記錄, 彈性鏈接,檢測滿,異常告警,進階要求

是記錄所有訪問情況,可以擴展出很多能力。

應用和數據庫連接池設置,數據庫允許的連接數設置,常見問題。

A )應用的數據庫連接池設置偏小,一旦數據庫相應慢(新上線應用,缺少索引 等)則應。

用排隊嚴重,甚至雪崩,而遺憾的是數據庫能力還遠為用盡。

B )不具備失效及時發(fā)現和重新鏈接數據庫能力。

C )隔離級別設置:RR 和 RC下不同的表現。

12. 應用解耦

通過應用訪問數據庫而不是直接訪問,重要業(yè)務不能依賴低保障級別的系統(tǒng),應用層重要業(yè)務和普通業(yè)務解耦,關鍵業(yè)務要獨立。

13. 組件失效免疫能力

單一應用,單一硬件,甚至單一基礎設施,單一站點容災,業(yè)務影響,故障恢復能力,要季度級別進行演練。

14. 關鍵詞組件減負

特別是數據庫訪問,數據庫成本最高,擴展性最難,可用性保障最難,恢復難度和時間最大。

減負:能不用就不用,使用最簡單,成本最低的語句,避免大事務,慎用兩階段事務。

15. 灰度數據庫

減少發(fā)布時變更數據庫對全局的影響,只有應用程序灰度是不夠的,還要有專門的灰度數據庫。在分庫、讀寫分離架構下,一套含數據庫的完整應用架構,變的很自然。

所為灰度環(huán)境就是生產環(huán)境,生產數據,所影響的也是生產環(huán)境,只是范圍比測試環(huán)境更廣,更真實。其實就是小范圍的生產環(huán)境。類似于游戲內測。

16. 高仿真架構體系

建立高仿真架構體系

數據庫,操作系統(tǒng)升級:應用是否適應,性能會變好, 還是變壞

應用上線發(fā)布,系統(tǒng)變更(列如換平臺),提前判斷業(yè)務影響和性能瓶頸

應對突發(fā)交易量,例如雙十一,性能極限在哪里,瓶頸在哪里。

17. 容災保障

高可用是運維核心要求,容災是最后屏障

例如 雙活比單活好,MGR比復制架構好,重要系統(tǒng)要做好高可用,容災建設。

18. 多中心建設

冗余是基礎,多中心建設是為了提升容災能力和擴展能力,并保障業(yè)務。

19. 應用和數據庫是一個整體

應用和運維人員一起,解決應用解耦,數據庫解耦,追賬補數,業(yè)務監(jiān)控,應用路由,故障切換等??捎眯?,效率,故障恢復等方面都要一起參與。

20. 性能提升

開源數據庫使用應該合理且有效的結合周邊的其他類型數據庫,做到性能最大化。比如:Redis、MongoDB、ES、ClickHouse等。

總結

1. 最適合的架構是結合軟件特性和業(yè)務場景,又能取得成本收益平衡;

2. 大數據情況下可以是利用讀寫分離、分庫分表,但要選擇合適的;

3. 不適合分庫的應該考慮竭盡所能把核心庫做小,然后通過垂直擴展來擴容;

4. 用盡各種技術, 高可用 和 容災手段保證其可用。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • 數據庫
    +關注

    關注

    7

    文章

    3794

    瀏覽量

    64358
  • MySQL
    +關注

    關注

    1

    文章

    804

    瀏覽量

    26526
  • 系統(tǒng)架構

    關注

    1

    文章

    69

    瀏覽量

    23528
收藏 人收藏

    評論

    相關推薦

    干貨分享:MySQL零基礎入門視頻教程!

    維工程師的一分支,主要負責業(yè)務數據庫從設計、測試到部署交付的全生命周期管理。數據庫工程師的核心目標是保證數據庫管理系統(tǒng)的穩(wěn)定性、安全性、完整性和高性能。今天在這里給大家分享一
    發(fā)表于 06-22 14:22

    干貨:38MySQL數據庫的必備知識和小技巧

    干貨:38MySQL數據庫的必備知識和小技巧
    的頭像 發(fā)表于 08-31 13:08 ?2396次閱讀

    Mysql和Oracle數據庫之間的誤區(qū)

    Mysql 和Oracle 在開發(fā)中的使用是隨處可見的,那就簡單去了解一下這倆款火的不行的數據庫。 本質區(qū)別: Oracle數據庫是一對象關系數據
    的頭像 發(fā)表于 11-13 09:35 ?1903次閱讀
    <b class='flag-5'>Mysql</b>和Oracle<b class='flag-5'>數據庫</b>之間的誤區(qū)

    華為云數據庫-RDS for MySQL數據庫

    (for MySQL)為輔。 MySQL數據庫是全球最受歡迎的一種數據庫,它是屬于 Oracle旗下的一款產品,MySQL是一種關系型
    的頭像 發(fā)表于 10-27 11:06 ?1515次閱讀

    華為云數據庫\-GaussDB for MySQL數據庫

    華為云更可靠,技術強、創(chuàng)新快、資源多的特點。華為云采用了最新的DFV分布式存儲技術,架構方面使用了計算存儲分離架構,存儲還最高支持128TB的海量存儲,可以實現超百萬級QPS吞吐,還支持跨AZ部署,故障秒級切換,既擁有商業(yè)數據庫
    的頭像 發(fā)表于 10-27 14:56 ?1251次閱讀

    MongoDB開源文檔數據庫的安裝

    MongoDB開源文檔數據庫。它屬于一稱為NoSQL的數據庫家族,它與傳統(tǒng)關系型基于表的SQL數據庫不同,如
    的頭像 發(fā)表于 12-06 17:00 ?1088次閱讀

    基于樹莓派的開源庫存管理系統(tǒng)和MySQL數據庫

    我準備使用?Raspberry Pi 設置一用 PHP 編寫的開源庫存管理系統(tǒng)和 MySQL 數據庫。用 PHP 編寫的帶有 MySQL/
    發(fā)表于 12-19 16:58 ?0次下載

    MySQL數據庫服務器、數據庫和表之間是什么關系

    數據庫服務器:MySQL安裝后,會成為一windows服務,這個windows服務可以看做是數據庫服務器。用CMD登錄MySQL,此時CM
    的頭像 發(fā)表于 01-31 14:59 ?1207次閱讀
    <b class='flag-5'>MySQL</b><b class='flag-5'>數據庫</b>服務器、<b class='flag-5'>數據庫</b>和表之間是什么關系

    MySQL數據庫管理與應用

    MySQL數據庫管理與應用 MySQL是一種廣泛使用的關系型數據庫管理系統(tǒng),被認為是最流行和最常見的開源
    的頭像 發(fā)表于 08-28 17:15 ?969次閱讀

    mysql是一什么類型的數據庫

    強、易于使用和管理。在本文中,我們將詳盡、詳實、細致地介紹MySQL的功能、優(yōu)勢、架構、語法等方面。 一、MySQL的功能: 數據庫管理:MySQL
    的頭像 發(fā)表于 11-16 14:43 ?1763次閱讀

    數據庫mysql基本增刪改查

    MySQL是一種開源的關系型數據庫管理系統(tǒng),常用于Web應用程序的數據存儲和管理。通過使用MySQL,用戶可以進行
    的頭像 發(fā)表于 11-16 16:35 ?1504次閱讀

    MySQL數據庫基礎知識

    MySQL 是一種開源的關系型數據庫管理系統(tǒng),它是目前最流行的數據庫之一。MySQL 提供了一種結構化的方法來管理大量的
    的頭像 發(fā)表于 11-21 11:09 ?969次閱讀

    mysql數據庫基礎命令

    MySQL是一流行的關系型數據庫管理系統(tǒng),經常用于存儲、管理和操作數據。在本文中,我們將詳細介紹MySQL的基礎命令,并提供與每個命令相關
    的頭像 發(fā)表于 12-06 10:56 ?580次閱讀

    mysql怎么新建一個數據庫

    mysql怎么新建一個數據庫 如何新建一個數據庫MySQL中 創(chuàng)建一個數據庫MySQL中的基
    的頭像 發(fā)表于 12-28 10:01 ?885次閱讀

    數據庫數據恢復—Mysql數據庫表記錄丟失的數據恢復流程

    Mysql數據庫故障: Mysql數據庫表記錄丟失。 Mysql數據庫故障表現: 1、
    的頭像 發(fā)表于 12-16 11:05 ?104次閱讀
    <b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復—<b class='flag-5'>Mysql</b><b class='flag-5'>數據庫</b>表記錄丟失的<b class='flag-5'>數據</b>恢復流程
    RM新时代网站-首页