優化杭州某著名電子商務網站高並發千萬級大型數據庫經驗之- 讀寫分離


     好久沒寫博客了,一方面是日常工作繁忙,另外一方面是想更多的時間陪陪家里人,享受春天的美好時光,還在寫一本《程序員,你傷不起》的一本書要由人民郵電出版社出版;我的性格可能也跟大多數程序員類似吧,沒什么興趣愛好、不擅長與人交流、平時話也少、也不夠幽默,唯一的優點就是一個實實在在。

下圖命名為:孤獨的程序員

      由於公司的主服務器責任重大,而且滿負荷跑了接近2年了,怕萬一有閃失主服務器出現硬件故障后重新購買新服務器訂貨到貨周期可能會比較長,所以公司在春節期間購買了一台更強大的新服務器來當備用服務器,購買的初衷就是防止出現硬件故障。

      春節前新服務器就采購到位了,由於手上事情比較多根本忙不過來配置新服務器,春節休息期間看了一些數據同步的資料,准備把主數據庫的讀寫分離,當初主要思路見下圖。

很多需要讀取的都從另外一個服務器讀取,這樣主服務器的壓力會小很多,2台服務器之間進行讀寫分離。

     以前習慣了什么事情都自己親自操刀,也想也改變一下思維模式,把數據庫鏡像、讀寫分離的工作安排給部門里的其他人員去實施,自己只是拋出了一些主導核心思想,結果折騰了很久沒能那么順利實現,期間主要問題有:

     1: 讀寫分離,進行了復制訂閱后,同步的周期非常長,在主服務器繁忙時,3分鍾都無法進行同步。

     2:主服務器無形中額外增加了更嚴重的數據同步負擔,沒能達到預期的效果,反而效果更糟糕。

     3:服務器維護人員對數據庫也不是很精通,主要精通硬件及網絡配置維護,他們平時的各種維護管理工作也非常繁雜,無法集中精力專門搞定這個任務。

    經過第一次讀寫分離接近失敗后,思考了2-4周時間,還是打算親自操刀一下否則沒有非常狠的力度。

     1:分析主服務器最影響性能效率的SQL語句,幾乎把所有常用的語句都整理出來,分析公司的核心業務、核心數據表。

     2:把最核心的少數幾個表同步到新服務器,這樣同步的效率高一些,主服務器的壓力也小一些,而不是選擇同步所有的表,同步所有的表意義不大。

     3:把推送模式修改為從主服務器拉的模式進行同步,由於新服務器的性能更好,承擔的工作壓力更小,所以新服務器主動去拉數據的模式。

     4:把主服務器上的所有SQL語句、索引都進行優化,主服務器的性能提升了接近4倍,然后再進行數據同步工作相對輕松了很多,效率也高了很多。

     5:把所有實時性要求不高的,數量龐大的,操作頻繁的SQL語句都從新服務器讀取,解放主服務器的磁盤讀寫壓力。

     6:新服務器的性能非常強大,所以一部分磁盤用來做鏡像、另外一部分磁盤做數據同步,這樣新服務器的磁盤也充分利用起來了,沒有閑置的磁盤。

     7:新服務器裝了2個SQL2008實例,一套用來數據同步,一套用來數據鏡像,這樣丟失數據的概率降低到極點、同時也不擔心發生硬件故障數據丟失了。

    

    其實說說復制訂閱很簡單一樣,一晚上折騰了5-6次,耗時4-5個小時才能成功同步,很多東西不是親自動手是不知道其中的痛苦,嘴巴說說也就幾句話,這就是為什么需要有工作經驗的開發人員,而不是理論知識夠能紙上談兵就可以了,實戰才是最鍛煉人的。

      第一次設置數據庫的發布訂閱,以前工作上也沒這個需要,設置成功了,進行了幾次測試都正常這時候已經是深夜2點了,新服務器正常開始運轉,又檢測了幾天復制訂閱的運行情況都良好,不管在業務高峰期還流量不大時,運行狀態都比較穩定,把主網站上的一些需要大量讀取數據的程序進行了調整,從新服務器讀取,讀寫分離成功了。

      耗費了巨資購買的新服務器,從2-3個月的接近閑置空閑狀態進入了忙碌的工作狀態了,舒服了很多心也不堵了,數據庫鏡像也做好了,數據庫同步讀寫分離也如願了,主服務器的磁盤I/O壓力接近降低了10倍以上最高時降低了100倍,對主機的磁盤壽命、整個網站的穩定高效性運行打了牢固的基礎,接着應該一年半年內不用優化也可以了,也不用購買新服務器,這2個服務器足夠用2-3年的甚至更長時間也沒關系。

      在主服務器優化前經常有超過2秒運行的SQL語句非常多,有時還有耗時20-30秒的SQL語句,經過一周的優化后,主服務器上幾乎看不到超過2秒的,絕大部分都能在0.5秒以內能運行完畢了。

      經過這次優化,有2個心得體會,一方面決策很重要、另一方面執行力也很重要;沒有強勁的執行力決策就是漂浮在空中的無法落地。遇到任何困難不能妥協、堅決想辦法克服各種困難,每次突破就是一次職業生涯上的一次升華。

     其實公司里有不少人想加薪、獲得更好的待遇;也總是抱怨自己的水平無法施展什么的;其實公司里需要做的事情很多,需要去主動承擔很多艱巨的任務、去做一些自己並不擅長的事情;例如我也不是專業DBA的工作崗位,以前也從來沒優化過這么大並發量的電子商務網站的核心數據庫,但是需要去突破,克服困難,把一個個難題解決掉,別人其實都能看到你做出貢獻了。

 

 

     其實寫文章比空想需要更強大的能力,能通順的寫出一篇文章讓別人有所收獲是一種貢獻;若這篇文章能對你有所幫助,請不要吝嗇點擊“推薦”,點一下推薦不收費、不費力、可以鼓勵讀者繼續寫出更好的文章分享給大家,不需要鈔票,只求一個推薦

 

     思想很關鍵、毛驢車很便宜也不需要加油、綠色環保、驢肉還可以吃、車還可以當柴火燒。當你最想要是什么?最想達到的目的是什么?

     

 


免責聲明!

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



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