MySQL架構由小變大的演進過程的詳情
假設一個網站(discuz)從最開始訪問量很小做到日pv千萬,我們來推測一下它的mysql伺服器架構演變過程。
第一階段
網站訪問量日pv量級在1w以下。 單一機器跑web和db,不需要做架構層調優(例如,不需要增加memcached快取)。此時,資料往往都是每日冷備份的,但有時候如果考慮資料安全性,會建立一個mysql主從。
第二階段
網站訪問量日pv達到數萬。此時單一機器已經有點負載,需要我們把web和db分開,需要搭建memcached服務作為快取。也就是說,在這個階段,我們也可以使用單一機器來跑mysql去承擔整個網站的資料儲存和查詢。如果做 MySQL 主從,目的也是為了資料安全性。
第三階段
網站訪問量日pv達到幾十萬。單台機器雖然也可以支撐,但是需要的機器配置比之前的機器好很多。如果經費允許,可以購買配置很高的機器來跑mysql服務,但是並不是說,配置翻倍,性能也翻倍,到了一定階段配置增加已經不能帶來性能的增加。所以,此階段,我們會想到做mysql服務的集群,也就是說我們可以拿多台機器來跑MySQL。但,MySQL的叢集和web叢集是不一樣的,我們需要考慮資料的一致性,所以不能簡單套用做web叢集的方式(lvs,nginx代理程式)。可以做的架構是,mysql主從,一主多從。為了確保架構的健壯和資料完整,主只能是一個,從可以是多個。
還有一個問題,我們需要想到,就是在前端web層,我們的程式裡面指定了MySQL機器的ip,那麼當mysql機器有多台時,程式裡面如何去配置? discuz,其實有一個功能,支援MySQL讀寫分離。即,我們可以拿多台機器跑MySQL,其中一台寫,其他多台是讀,我們只需要把讀和寫的 IP 分別配置到程式中,程式自動會去區分機器。當然,如果不使用 discuz 自帶的配置,我們也可以引用一個軟體叫做 mysql-proxy, 使用他來實現讀寫分離。它支援一主多從的模式。
第四階段
網站訪問量日pv到數百萬。之前的一主多從模式已經遇到瓶頸,因為當網站訪問量變大,讀取資料庫的量也會越來越大,我們需要多加一些從進來,但是從的數量增加到數十台時,由於主需要把bin-log全部分發到所有從上,那麼這個過程本身就是一件很繁瑣的事情,再加上頻繁讀取,勢必會造成從上同步過來的資料有很大延遲。所以,我們可以做一個優化,把mysql原來的一主多從變成一主一從,然後從作為其他從的主,而前面的主只負責網站業務的寫入,而後面的從不負責網站任何業務,只負責給其他從同步bin-log。 這樣還可以繼續多疊加幾個從函式庫。
第五階段
網站訪問量日pv到1千萬的時候,我們發現,網站的寫入量非常大,我們之前架構只有一個主,這裡的主已經變成瓶頸了。所以,需要再近一步來做出調整。例如,我們可以把業務分模組,把用戶相關的單獨分離出來,把權限、積分等也可以分離出來單獨跑一個庫,然後再做主從,也就是所謂的分庫。當然也可以換一個緯度,把訪問量或寫入量大的表單獨分離出來,跑在一台伺服器上,也可以把一個表分成多個小表。這一步操作,牽涉到一些程式上的改動,所以需要事先和發展同事做好溝通設計。總之,這一步要做的就是分庫分錶。
寫在後面
再往後發展,繼續把大表分小表即可。 而國內阿里淘寶網站的資料量是巨量的,他們的資料庫全部都是MySQL,他們的MySQL 架構就是遵循分庫分錶這個原則的,只不過他們劃分規則會有很多緯度,比如可以根據地域劃分,可以依買家、賣家劃分,可以依時間劃分等等。
以上就是MySQL架構由小變大的演進過程的詳情的內容,更多相關內容請關注PHP中文網(www.php.cn)!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

MySQL是一種開源的關係型數據庫管理系統,主要用於快速、可靠地存儲和檢索數據。其工作原理包括客戶端請求、查詢解析、執行查詢和返回結果。使用示例包括創建表、插入和查詢數據,以及高級功能如JOIN操作。常見錯誤涉及SQL語法、數據類型和權限問題,優化建議包括使用索引、優化查詢和分錶分區。

MySQL在數據庫和編程中的地位非常重要,它是一個開源的關係型數據庫管理系統,廣泛應用於各種應用場景。 1)MySQL提供高效的數據存儲、組織和檢索功能,支持Web、移動和企業級系統。 2)它使用客戶端-服務器架構,支持多種存儲引擎和索引優化。 3)基本用法包括創建表和插入數據,高級用法涉及多表JOIN和復雜查詢。 4)常見問題如SQL語法錯誤和性能問題可以通過EXPLAIN命令和慢查詢日誌調試。 5)性能優化方法包括合理使用索引、優化查詢和使用緩存,最佳實踐包括使用事務和PreparedStatemen

Apache 連接數據庫需要以下步驟:安裝數據庫驅動程序。配置 web.xml 文件以創建連接池。創建 JDBC 數據源,指定連接設置。從 Java 代碼中使用 JDBC API 訪問數據庫,包括獲取連接、創建語句、綁定參數、執行查詢或更新以及處理結果。

選擇MySQL的原因是其性能、可靠性、易用性和社區支持。 1.MySQL提供高效的數據存儲和檢索功能,支持多種數據類型和高級查詢操作。 2.採用客戶端-服務器架構和多種存儲引擎,支持事務和查詢優化。 3.易於使用,支持多種操作系統和編程語言。 4.擁有強大的社區支持,提供豐富的資源和解決方案。

在 Docker 中啟動 MySQL 的過程包含以下步驟:拉取 MySQL 鏡像創建並啟動容器,設置根用戶密碼並映射端口驗證連接創建數據庫和用戶授予對數據庫的所有權限

MySQL在Web應用中的主要作用是存儲和管理數據。 1.MySQL高效處理用戶信息、產品目錄和交易記錄等數據。 2.通過SQL查詢,開發者能從數據庫提取信息生成動態內容。 3.MySQL基於客戶端-服務器模型工作,確保查詢速度可接受。

Laravel 是一款 PHP 框架,用於輕鬆構建 Web 應用程序。它提供一系列強大的功能,包括:安裝: 使用 Composer 全局安裝 Laravel CLI,並在項目目錄中創建應用程序。路由: 在 routes/web.php 中定義 URL 和處理函數之間的關係。視圖: 在 resources/views 中創建視圖以呈現應用程序的界面。數據庫集成: 提供與 MySQL 等數據庫的開箱即用集成,並使用遷移來創建和修改表。模型和控制器: 模型表示數據庫實體,控制器處理 HTTP 請求。

Linux系統的五個基本組件是:1.內核,2.系統庫,3.系統實用程序,4.圖形用戶界面,5.應用程序。內核管理硬件資源,系統庫提供預編譯函數,系統實用程序用於系統管理,GUI提供可視化交互,應用程序利用這些組件實現功能。
