四個大型商城網(wǎng)站主要故障處理方法
大型商城網(wǎng)站建設(shè)運行后期比較常見的故障以及處理方法,深圳網(wǎng)站建設(shè)公司根據(jù)日常的工作經(jīng)驗總結(jié)出九大典型故障,本文與各位分享其中四種。我們先從一次工程師曾經(jīng)的一次面試經(jīng)歷聊起,有一次,博納網(wǎng)絡(luò)程序員某位朋友和幾個網(wǎng)站架構(gòu)師討論問題,期間,一位架構(gòu)師被他們部門總監(jiān)叫去面試位應(yīng)聘者。結(jié)果過了十幾分鐘,這位架構(gòu)師就回來了,我們都很奇怪:怎么這么快?他笑道:“這位老兄,工作十幾年,什么都不會,沒什么好問的”。我們問他都問了什么問題,結(jié)果都是一些如果沒有經(jīng)歷過,就永遠(yuǎn)不會想到的問題,而這些問題只要在大型網(wǎng)站技術(shù)線呆上兩三年,就一定會碰到。
一位網(wǎng)站資深架構(gòu)師曾經(jīng)說過:在互聯(lián)網(wǎng)公司呆一年,相當(dāng)于在傳統(tǒng)軟件公司呆三年。他的意思大概是在以開發(fā)為主的互聯(lián)網(wǎng)公司年遇到的問題比傳統(tǒng)軟件公司三年遇到的問題還多。而且隨著網(wǎng)站業(yè)務(wù)的快速發(fā)展,問題也層出不窮,每年遇到的問題都不同。遇到問題,解決問題,經(jīng)歷了這個過程,技術(shù)才能升華,人和技術(shù)才能融為一體,才知道什么技術(shù)是真正有用的,什么技術(shù)是花拳繡腿。
大型網(wǎng)站的技術(shù)本質(zhì)都很簡單,沒有很花哨的東西,掌握起來也不難。大型網(wǎng)站的架構(gòu)師最有價值的地方不在于他們掌握了多少技術(shù)而在于他們經(jīng)歷過多少故障。每次故障都會給公司帶來難以估計的利益損失,所以培養(yǎng)一個網(wǎng)站架構(gòu)師的成本不單要看付了他多少薪水給了他多少股票,還要看為他引起的故障買了多少次單。這里列舉一些網(wǎng)站的典型故障,我們會發(fā)觀,在高并發(fā)和海量數(shù)據(jù)的情況下,很多一般情況下不是問題的問題都會涌現(xiàn)出來
一、大型商城網(wǎng)站故障之寫日志也會引發(fā)故障
故障現(xiàn)象:某應(yīng)用服務(wù)器集群發(fā)布后不久就出現(xiàn)多臺服務(wù)器相繼報警,硬盤可用空間低干警戒值,并且很快有服務(wù)器宕機。登錄到線上服務(wù)器,發(fā)現(xiàn)log文件夾里的文件迅速增加,不斷消耗磁盤空?間。
原因分析:這是個普通的應(yīng)用服務(wù)器集群,不需要存儲數(shù)據(jù),因此服務(wù)器里配置的是塊100GB的小硬盤,安裝完操作系統(tǒng)、Web服務(wù)器、Java虛擬機、應(yīng)用程序后,空閑空間只有幾十GB了,正常情況下這些磁盤空間足夠了,但是該應(yīng)用的開發(fā)人員將log輸出的level全局配置為Debug。這樣次簡單的Web請求就會產(chǎn)生大量的log文件輸出,在高并發(fā)的用戶請求下很快就消耗完不多的磁盤空間。
處理以及經(jīng)驗教訓(xùn)
·應(yīng)用程序自己的日志輸出配置和第三方組件日志輸出要分別配置。
·檢查log配置文件,日志輸出級別至少為Warn,并且檢查log輸出代碼調(diào)用,調(diào)用級別要符合其真實日志級別。
·有些開源的第三方組件也會不恰當(dāng)?shù)剌敵鎏嗟腅rror日志,需要關(guān)閉這些第三方庫的日志輸出,至于哪些第三方庫有問題,只有在遇到問題時才知道。
二、大型電商網(wǎng)站故障之高并發(fā)訪問數(shù)據(jù)庫引發(fā)的故障
故障現(xiàn)象:某應(yīng)用發(fā)布后數(shù)據(jù)庫Load居高不下,遠(yuǎn)超過正常水平,持續(xù)報警。
原因分析:檢查數(shù)據(jù)庫,發(fā)現(xiàn)報警是因為某條SQL引起的,這條SQL是一條簡單的有索引的數(shù)據(jù)查詢,不應(yīng)該引發(fā)報警。繼續(xù)檢查,發(fā)現(xiàn)這條SQL執(zhí)行頻率非常高,遠(yuǎn)遠(yuǎn)超過正常水平。追查這條SQL,發(fā)現(xiàn)被網(wǎng)站首頁應(yīng)用調(diào)用首頁是被訪問最頻繁的網(wǎng)頁,這條SQL被首頁調(diào)用,也就被頻繁執(zhí)行了。
經(jīng)驗教訓(xùn):
·首頁不應(yīng)該訪問數(shù)據(jù)庫,首頁需要的數(shù)據(jù)可以從緩存服務(wù)器或者搜索引擎服務(wù)器獲取。
·首頁最好是靜態(tài)的。
三、高并發(fā)情況下鎖引發(fā)的故障
故障現(xiàn)象:某應(yīng)用服務(wù)器不定時地因為響應(yīng)超時而報警,但是很快又超時解除,快復(fù)正常,如此反復(fù),讓運維人員非??鄲馈?/span>
原因分析:程序中某個單例對象(singleton object)中多處使用了svnchronized (this),由于this對象只有一個,所有的開發(fā)請求都要排隊獲得這唯一的一把鎖。一般情況下,都是些簡單操作,獲得鎖,迅速完成操作,釋放鎖,不會引起線程排隊。但是某個需要遠(yuǎn)程調(diào)用的操作也被加了svnchronized (this),這個操作只是偶爾會破執(zhí)行,但是每次執(zhí)行都需要較長的時間才能完成,這段時間鎖被占用所有的用戶線程都要等待,響應(yīng)超時,這個操作執(zhí)行完后釋放鎖,其他線程迅速執(zhí)行,超時解除。
經(jīng)驗教訓(xùn):
·使用鎖操作需謹(jǐn)慎
四、緩存引發(fā)的故障
故障現(xiàn)象:沒有新應(yīng)用發(fā)布,但是數(shù)據(jù)庫服務(wù)器突然Loadaii升,并很快失去響應(yīng)。DBA將數(shù)據(jù)庫防問切換到備機,LoadW很快飆升,并失去響應(yīng)。最終引發(fā)網(wǎng)站全部癱瘓。
原因分析:緩存服務(wù)器在網(wǎng)站服務(wù)器集群中的地位一直比較低,服務(wù)器配置和管理級別都比其他服務(wù)器要低些。人們都認(rèn)為緩存是改善性能的手段,丟失些緩存也沒什么問題,有叫候關(guān)閉兩臺緩存服務(wù)器也確實對應(yīng)用沒有明顯影響,所以長期疏于管理緩存服務(wù)器。結(jié)果這次一個缺乏經(jīng)驗的工程師關(guān)閉了緩存服務(wù)器集群中全部的十幾臺Memcached服務(wù)器,導(dǎo)致了網(wǎng)站全部癱瘓的重大事故。
經(jīng)驗教訓(xùn):
·當(dāng)緩存已經(jīng)不僅僅是改善性能,而是成為網(wǎng)站架構(gòu)不可或缺的部分時,對緩存的管理就需要提高到和其他服務(wù)器一樣的級別。好了,網(wǎng)站建設(shè)公司本文關(guān)于大型電商網(wǎng)站易發(fā)的四個故障現(xiàn)象以及處理方法就分享到這里,謝謝關(guān)注,我們會在下期的文章中繼續(xù)就其他故障現(xiàn)象進行探討分享。博納網(wǎng)絡(luò)編輯整理。