C#.NET 權限管理系統組件 - 大數據讀寫分離實現的例子


   當web服務器的每天的訪問量超過10萬ip時對服務器主機的性能要求就非常高了,而且這些訪問量又不是平均分布在24個小時里,往往有一個集中的訪問高峰,晚上服務器的訪問量又很低甚至是深夜連續好幾個小時沒訪問量!

   例如我們平時維護的網站的日平均訪問量是30萬ip、訪問高峰時並發的用戶量非常大,數據庫主機的壓力非常大,雖然我們采取了分庫措施,但是有些大表、核心業務表的訪問壓力又非常大,例如有同時有1千個用戶在讀取數據庫又同時這1千個用戶在寫入數據庫,往往讀取的次數比寫入的更多一些。

   1:購買更好的服務器硬件提升性能(硬件性能越高價錢越高,這個是無止境的投資,而且閑置下來的服務器有時候也無法發揮更好的作用,同時還需要購買相同配置的備份服務器,以防止硬件突然損壞,所以這個代價不只是購買1台就可以了,要購買2台才可以)。

   2:利用讀寫分離進行性能優化,例如數據庫的復制機制,把主數據庫復制出一份到另外一個服務器上,寫入操作都寫主數據庫,讀取操作都從另外一個服務器讀取,這樣並不需要非常牛的服務器,就可以把1千人同時讀取,同時又寫入的操作,分給2台服務器來承擔。這樣主服務器的壓力明顯可以減少了,性能下降也會明顯得到改善。一台主機可能處理起來要接近死機了,2台主機來承擔這個壓力,可能2個主機都活得好好的,而且還可以承擔的更大的並發壓力了。

   3:數據庫的復制同步可以讓數據庫管理員來設置配置了,我們寫程序主要是改我們的源碼,原來的1個數據庫連接UserCenterDbConnection讀寫在一起的修改一下,UserCenterWriteDbConnection(寫入)、UserCenterReadDbConnection(讀取)的進行分離,當然我們的系統剛開始設計的時候就足夠健壯那就耗費1天2天就可以修改過來了,再仔細測試一下就可以重新發布了,讀寫分離就這么搞定了,心里舒坦了很多。

   4: 讀寫分離也不是那么100%絕對的,主要目的是為了降低主服務器的性能壓力,盡量把讀取操作集中在另外一個讀取的數據庫服務器上,解放主服務器;例如一個操作需要馬上寫入服務器,然后需要及時讀取到值的,也直接寫入讀取主服務器就可以了,讀寫分離也是相對的,我們的主要目的是把主服務器的並發訪問壓力減緩、提高主服務器的數據處理性能。 

下圖是大數據讀寫分離的示意圖,做得非常好看,我喜歡

下面是數據庫連接到2個服務器的配置方法,第一個是寫入的服務器,第二個是讀取的服務器。

這里是連接2個服務器的例子

下面是讀寫分離的服務器上監控只讀服務器上的sql語句運行情況的例子抓圖


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM