第一題:請問當用戶反饋網站訪問慢,您將如何處理?
答:
首先,有許多方面的因素會導致網站網站訪問慢,我大概列出常見的,如下
1)服務器出口帶寬不夠用
解釋:
* 本身服務器購買的出口帶寬比較小,一旦并發量大的話,就會造成分給每個用戶的出口帶寬就小咯,訪問速度自然就會慢咯
* 跨運營商網絡導致帶寬縮減。例如公司網站放在電信的網絡上,那么客戶這邊對接是長城寬帶或聯通,這也可能導致帶寬的縮減
2) 服務器負載過大,導致響應不過來。
解釋:
* 查看cpu和內存的使用情況,如果使用率比較高,就需要查看是否有惡意程序在運行,通過ps和top命令,看看有沒有異常進程,如果沒有,則需要申請升級服務器配置或者額外再加一臺web服務器,前端加負載均衡設備進行調度。
3)數據庫瓶頸
4)網站開發代碼沒有優化好,例如SQL語句沒有優化,導致數據庫讀寫相當耗時
針對網站訪問慢,有哪些工具去檢測:
1)首先要確定是用戶端還是服務端的問題;當接到用戶反饋訪問慢,那邊自己立即訪問網站看看,如果自己這邊訪問快,基本斷定是用戶端問題,就需要耐心跟客戶解釋咯,協助客戶解決問題
2)如果訪問也慢,那么可以利用瀏覽器的調試功能,看看加載那一項數據消耗時間過多,是圖片加載慢,還是某些數據加載慢
3)針對服務器負載情況。查看服務器硬件(網絡、cpu、內存)的消耗情況。如果是購買的云主機,比如阿里云,可以登錄阿里云平臺提供各方面的監控,比如cpu,內存,帶寬的使用情況
4)如果發現硬件資源消耗都不高,那么就需要通過查日志,比如看看mysql慢查詢的日志,看看是不是某條sql語句查詢慢,導致網站訪問慢
解決辦法:
1)如果是出口帶寬問題,那么久申請加大出口帶寬
2)如果慢查詢比較多,那么就要開發人員或DBA協助進行SQL語句的優化
3)如果數據庫響應慢,考慮可以加一個數據庫緩存,如redis等。然后也可以搭建mysql主從,一臺mysql服務器負責寫,其他幾臺從數據庫負責讀
4)申請購買CDN服務,加載用戶的訪問
5)如果訪問還比較慢,那就需要從整體架構上進行優化咯。做到專角色專用,多臺服務器提供同一個服務。
第二題:xtrabackup備份原理
答:
由于xtrabackup只能備份innodb表,由于目前環境中,有些系統表還是使用MyISAM存儲引擎,但是xtrabackup又不支持,因為我們會使用innobackupex這個命令來備份,其備份過程如下
1)innobackupex啟動備份后,被先fork一個進程,啟動xtrabackup進程
2)xtrabackup備份innodb存儲引擎的文件,在備份相關數據,會啟動2個線程
第一個是:redo拷貝線程,負責拷貝redo日志
第二個是:ibd拷貝線程,負責拷貝ibd文件
redo 拷貝線程只有一個,在 ibd 拷貝線程之前啟動,在 ibd 線程結束后結束
3)xtrabackup拷貝完ibd文件后,通知innobackupex(通過創建文件的方式),同時自己處于等待狀態(redo線程還在繼續拷貝)
4)innobackupex收到xtrabackup通知后,執行flush table with read lock,然后開始備份非innodb文件(如frm,MYI,MYD等)
5)當innodb拷貝完所有非innodb表文件后,通知xtrabackup(通過刪除文件),同時自己處于等待(等待另一個文件創建)
6) xtrabackup收到innobackupex備份完非innodb通知后,就停止redo拷貝線程,通知innobackupex(通過創建文件)
7)innobackupex收到redo備份完成通知后,執行unlock tables
8) 最后 innobackupex 和 xtrabackup 進程各自完成收尾工作,如資源的釋放、寫備份元數據信息等,innobackupex 等待 xtrabackup 子進程結束后退出。