數據庫高併發解決方法總結和主從複製

數據庫高併發解決方法總結

一個項目剛開始的時候是爲了實現基本功能,隨着版本和功能的迭代,大數據和高併發成了軟件設計必須考慮的問題!
本質很簡單,一個是慢,一個是等。

兩者是相互關聯的,因爲慢,所以要等,因爲等,所以慢,解決了慢,也就解決了等,解決了等,也就解決了慢。

關鍵是如何解決慢和等,核心一個是,一個是,一個是分流,最後一個是集羣/橫向擴張/讀寫分離/建立主從。

短是指路徑要短:

典型的mvc結構是請求->controller->model->dao->view,然後把頁面返回給用戶。要想短的話,

1、頁面靜態化- 用戶可以直接獲取頁面,不用走那麼多流程,比較適用於頁面不頻繁更新。

2、使用緩存- 第一次獲取數據從數據庫準提取,然後保存在緩存中,以後就可以直接從緩存提取數據。不過需要有機制維持緩存和數據庫的一致性。

3、使用儲存過程-那些處理一次請求需要多次訪問數據庫的操作,可以把操作整合到儲存過程,這樣只要一次數據庫訪問就可以了。

4、批量讀取 - 高併發情況下,可以把多個請求的查詢合併到一次進行,以減少數據庫的訪問次數

5、延遲修改 - 高併發情況下,可以把多次修改請求,先保存在緩存中,然後定時將緩存中的數據保存到數據庫中,風險是可能會斷電丟失緩存中的數據,

6、使用索引 - 索引可以看作是特殊的緩存,儘量使用索引就要求where字句中精確的給出索引列的值。

少是指查詢的數據要少:

1、分表 - 把本來同一張表的內容,可以按照地區,類別等分成多張表,很簡單的一個思路,但是要儘量避免分出來的多表關聯查詢。

2、分離活躍數據 - 例如登錄用戶業務,註冊用戶很多,但是活躍的登錄用戶很少,可以把活躍用戶專門保存一張表,查詢是先查詢活躍表,沒有的話再查總表,這也類似與緩存啦。

3、分塊 - 數據庫層面的優化,對程序是透明的,查詢大數據只用找到相應塊就行。

分流三種:

1、集羣 - 將併發請求分配到不同的服務器上,可以是業務服務器,也可以是數據庫服務器。

2、分佈式 - 分佈式是把單次請求的多項業務邏輯分配到多個服務器上,這樣可以同步處理很多邏輯,一般使用與特別複雜的業務請求。

3、CDN - 在域名解析層面的分流,例如將華南地區的用戶請求分配到華南的服務器,華中地區的用戶請求分配到華中的服務器。







\

一、什麼是主從複製?

主從複製,是用來建立一個和主數據庫完全一樣的數據庫環境,稱爲從數據庫,主數據庫一般是準實時的業務數據庫。您看,像在mysql數據庫中,支持單項、異步賦值。在賦值過程中,一個服務器充當主服務器,而另外一臺服務器充當從服務器。此時主服務器會將更新信息寫入到一個特定的二進制文件中。並會維護文件的一個索引用來跟蹤日誌循環。這個日誌可以記錄併發送到從服務器的更新中去。當一臺從服務器連接到主服務器時,從服務器會通知主服務器從服務器的日誌文件中讀取最後一次成功更新的位置。然後從服務器會接收從哪個時刻起發生的任何更新,然後鎖住並等到主服務器通知新的更新

二、主從複製的作用(好處,或者說爲什麼要做主從)重點?

做數據的熱備,作爲後備數據庫,主數據庫服務器故障後,可切換到從數據庫繼續工作,避免數據丟失。
架構的擴展。業務量越來越大,I/O訪問頻率過高,單機無法滿足,此時做多庫的存儲,降低磁盤I/O訪問的評率,提高單個機器的I/O性能。
讀寫分離,使數據庫能支持更大的併發。在報表中尤其重要。由於部分報表sql語句非常的慢,導致鎖表,影響前臺服務。如果前臺使用master,報表使用slave,那麼報表sql將不會造成前臺鎖,保證了前臺速度。

  • 在從服務器可以執行查詢工作(即我們常說的讀功能),降低主服務器壓力(主庫寫,從庫讀,降壓)
  • 在從主服務器進行備份,避免備份期間影響主服務器服務;(確保數據安全)
  • 當主服務器出現問題時,可以切換到從服務器。(提升性能)

三、主從複製的原理?

1.數據庫有個bin-log二進制文件,記錄了所有sql語句。

2.我們的目標就是把主數據庫的bin-log文件的sql語句複製過來。

3.讓其在從數據的relay-log重做日誌文件中再執行一次這些sql語句即可。

4.下面的主從配置就是圍繞這個原理配置

5.具體需要三個線程來操作:

1、binlog輸出線程:每當有從庫連接到主庫的時候,主庫都會創建一個線程然後發送binlog內容到從庫。在從庫裏,當複製開始的時候,從庫就會創建兩個線程進行處理:

2、從庫I/O線程:當START SLAVE語句在從庫開始執行之後,從庫創建一個I/O線程,該線程連接到主庫並請求主庫發送binlog裏面的更新記錄到從庫上。從庫I/O線程讀取主庫的binlog輸出線程發送的更新並拷貝這些更新到本地文件,其中包括relay log文件。

3、從庫的SQL線程:從庫創建一個SQL線程,這個線程讀取從庫I/O線程寫到relay log的更新事件並執行。

可以知道,對於每一個主從複製的連接,都有三個線程。擁有多個從庫的主庫爲每一個連接到主庫的從庫創建一個binlog輸出線程,每一個從庫都有它自己的I/O線程和SQL線程。

主從複製如圖 幫助理解:
在這裏插入圖片描述
在這裏插入圖片描述

四、主從複製的好處?

做數據的熱備,作爲後備數據庫,主數據庫服務器故障後,可切換到從數據庫繼續工作,避免數據丟失。

架構的擴展。業務量越來越大,I/O訪問頻率過高,單機無法滿足,此時做多庫的存儲,降低磁盤I/O訪問的評率,提高單個機器的I/O性能。
讀寫分離,使數據庫能支持更大的併發。在報表中尤其重要。由於部分報表sql語句非常的慢,導致鎖表,影響前臺服務。如果前臺使用master,報表使用slave,那麼報表sql將不會造成前臺鎖,保證了前臺速度。

好處一:實現服務器負載均衡

通過服務器複製功能,可以在主服務器和從服務器之間實現負載均衡。即可以通過在主服務器和從服務器之間切分處理客戶查詢的負荷,從而得到更好地客戶相應時間。通常情況下,數據庫管理員會有兩種思路。

一是在主服務器上只實現數據的更新操作。包括數據記錄的更新、刪除、新建等等作業。而不關心數據的查詢作業。數據庫管理員將數據的查詢請求全部 轉發到從服務器中。這在某些應用中會比較有用。如某些應用,像基金淨值預測的網站。其數據的更新都是有管理員更新的,即更新的用戶比較少。而查詢的用戶數 量會非常的多。此時就可以設置一臺主服務器,專門用來數據的更新。同時設置多臺從服務器,用來負責用戶信息的查詢。將數據更新與查詢分別放在不同的服務器 上進行,即可以提高數據的安全性,同時也縮短應用程序的響應時間、提高系統的性能。

二是在主服務器上與從服務器切分查詢的作業。在這種思路下,主服務器不單單要完成數據的更新、刪除、插入等作業,同時也需要負擔一部分查詢作 業。而從服務器的話,只負責數據的查詢。當主服務器比較忙時,部分查詢請求會自動發送到從服務器重,以降低主服務器的工作負荷。當然,像修改數據、插入數 據、刪除數據等語句仍然會發送到主服務器中,以便主服務器和從服務器數據的同步。

好處二:通過複製實現數據的異地備份

可以定期的將數據從主服務器上覆制到從服務器上,這無疑是先了數據的異地備份。在傳統的備份體制下,是將數據備份在本地。此時備份 作業與數據庫服務器運行在同一臺設備上,當備份作業運行時就會影響到服務器的正常運行。有時候會明顯的降低服務器的性能。同時,將備份數據存放在本地,也 不是很安全。如硬盤因爲電壓等原因被損壞或者服務器被失竊,此時由於備份文件仍然存放在硬盤上,數據庫管理員無法使用備份文件來恢復數據。這顯然會給企業 帶來比較大的損失。

而如果使用複製來實現對數據的備份,就可以在從服務器上對數據進行備份。此時不僅不會干擾主服務氣的正常運行,而且在備份過程中主服務器可以繼 續處理相關的更新作業。同時在數據複製的同時,也實現了對數據的異地備份。除非主服務器和從服務器的兩塊硬盤同時損壞了,否則的話數據庫管理員就可以在最 短時間內恢復數據,減少企業的由此帶來的損失。

好處三:提高數據庫系統的可用性

數據庫複製功能實現了主服務器與從服務器之間數據的同步,增加了數據庫系統的可用性。當主服務器出現問題時,數據庫管理員可以馬上讓從服務器作爲主服務器,用來數據的更新與查詢服務。然後回過頭來再仔細的檢查主服務器的問題。此時一般數據庫管理員也會採用兩種手段。

一是主服務器故障之後,雖然從服務器取代了主服務器的位置,但是對於主服務器可以採取的操作仍然做了一些限制。如仍然只能夠進行數據的查詢,而 不能夠進行數據的更新、刪除等操作。這主要是從數據的安全性考慮。如現在一些銀行系統的升級,在升級的過程中,只能夠查詢餘額而不能夠取錢。這是同樣的道理。

二是從服務器真正變成了主服務器。當從服務器切換爲主服務器之後,其地位完全與原先的主服務器相同。此時可以實現對數據的查詢、更新、刪除等操 作。爲此就需要做好數據的安全性工作。即數據的安全策略,要與原先的主服務器完全相同。否則的話,就可能會留下一定的安全隱患。

四 從數據庫的讀的延遲問題了解嗎?如何解決?

主庫宕機後,數據可能丟失
從庫只有一個sql Thread,主庫寫壓力大,複製很可能延時
解決方法:

半同步複製—解決數據丟失的問題

並行複製—-解決從庫複製延遲的問題
https://blog.csdn.net/darkangel1228/article/details/80003967

主從複製和主主複製區別?

最大區別是 主從是對主操作數據,從會實時同步數據。反之對從操作,主不會同步數據,還有可能造成數據紊亂,導致主從失效。 主主則是無論對那一臺操作,另一個都會同步數據。一般用作高容災方案

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章