故障自愈是不是應該儘可能讓資料庫自己來做

碼農談IT發表於2023-03-15

前陣子和一個朋友談到系統故障自愈的事情,因為朋友的企業屬於傳統行業企業,IT系統雖然做了大量的微服務化的改造,不過總體來說還是偏傳統生產管理類業務。對於他們的一些故障自愈需求,實際上有些問題是系統故障自愈的問題,有些問題透過應用架構方面的最佳化,都是不難實現的。比較困難的大多數問題依然是資料庫的故障自愈。他說他們做了幾年資料庫的故障自愈,真正做的比較好的也就是儲存空間的自動擴容了。以前用Oracle的RAC和RAC ONENODE,透過FAN實現RAC節點故障的客戶端無感自動切換做的也還可以,不過現在切換到開源和國產資料庫上後,這部分也不太好做了。
故障自愈確實是資料庫運維自動化系統中最難做的功能,去年和一個客戶交流DBAIOPS的時候,客戶問我你們的智慧診斷準確率有多高?我說受限於演演算法和知識圖譜目前的規模,我們的DBAIOPS系統的智慧診斷的能力目只能能大致指向幾個可能的方向,而無法直接定位到根因。他聽了以後有點失望,說能不能提高演演算法的能力,直接定位根因呢?我問他為什麼非要直接定位根因,他說他們做了幾年資料庫故障自愈,但是稍微複雜一些的場景都無法實現,主要是因為根因定位不清,導致自愈採取的措施不當。因此他們一直在努力提高根因定位的能力,想找到好的演演算法來提高故障自愈的能力。
實際上我覺得他們在做的工作是被網際網路公司在這方面的成功給忽悠了,網際網路公司是針對自己的業務對系統架構和資料架構都做了十分精細的設計,首先把資料庫的功能簡化了,大量的功能都已經拆分到應用系統中去了,因此故障自愈完全不是依賴於資料庫來做的。資料庫的故障自愈只剩下重啟、切換、擴容等少量的十分容易實現的場景。
傳統企業的應用系統對資料庫功能而依賴十分強,資料庫高可用、高併發等都是圍繞著資料庫來做的,因此做故障自愈的時候,往往剛開始做應用系統的時候還比較容易,做到資料庫上面,就做不動了。像Oracle這樣複雜的大型資料庫系統,出現各式各樣的故障,不可能重啟一下就能解決問題了。
實際上我還是傾向於故障自愈主要還是要從應用架構上去做,如果要考慮資料庫的故障自愈問題,那麼我們就應該選擇更適合自己的系統故障自愈場景的資料庫系統,充分利用資料庫的故障自愈能力來實現系統的故障自愈目標。依靠演演算法去自動發現資料庫內部存在的複雜問題,並且透過自愈手段來修復故障,做起來往往很難落地。
資料庫故障自愈的事情最好還是由資料庫產品自身來完成是我一直的觀點,因為在大多數情況下,資料庫核心應該最先發現資料庫自身存在的問題。實際上資料庫自身就有很多故障自愈的能力,比如說死鎖的自動檢測與解決,早期的資料庫是沒有這個能力的,必須應用自己發現死鎖,這個演演算法很複雜,自從資料庫有了死鎖自動解鎖的能力,應用開發就簡單多了。Oracle的 TAF、FCF(FAN)等也是故障自愈很好的例子,也都是值得我們資料庫廠商去學習的。包括在Oracle 11g之後,對某些HANG場景的自動發現與自動解除能力也越來越強,這些資料庫產品上的故障自愈能力,都為我們系統級的故障自愈提供了極好的功能。這些實際上是廣大使用者除了最佳化器能力之外,最為關注的資料庫功能,值得國產資料庫廠商認真研究,這也是自治資料庫最關鍵的能力之一。
要提高資料庫的故障自愈能力,0資料丟失備機或者共享儲存RAC叢集是十分關鍵的能力。要想實現複雜場景中的故障自愈,重啟或者切換依然是應用系統最容易實現的手段。但是在應用系統中切換主資料庫並不是一件容易的事情,因為資料丟失可能會導致業務資料的不一致,如果能夠做到無論何時都是0資料丟失的,那麼應用系統切主資料庫就可以變成一個十分常規的操作,完全可以不需要人為幹預了。這也是我覺得集中式資料庫需要去參考AWS AURORA的最主要原因。日誌即資料庫的方案不僅僅可以實現近實時複製的備機,透過在主資料庫例項與只讀備庫例項之間實現CACHE FUSION,還可以實現強一致性讀。這種架構的最大好處是能實現真正的0資料丟失,這讓應用系統的切主資料庫操作變得更為順暢。
國產資料庫產品除了提升核心的穩定性,提升CBO最佳化器的能力之外,實際上還是有很多事情可做的。Oracle因為有獨步天下的RAC技術,因此沒有在資料庫上發展類似AURORA的技術,不過其MAA架構的發展也值得我們的國產資料庫廠商參考。當我們還在大力學習MAA的時候,Oracle實際上已經在大力發展GDS計算框架了,我們的廠商完全可以跳過MAA,直接去學習GDS。前幾天和一個資料庫廠商交流的時候,他們說很快會在自己的資料庫中推出類似ORACLE TAF的故障切換功能,我建議他們在發展TAF的時候,同時也應該學習一下FAN/FCF,FCF才能更好的讓應用系統做故障切換。
應用系統做故障自愈的時候,我覺得還是儘可能放在應用系統本身,而資料庫的故障自愈,還是儘可能交給資料庫來做。系統設計者要做的是儘可能簡化應用對資料庫的使用方式,從而讓資料庫的故障自愈更簡單一些,另外就是根據自己應用的特點,選擇一個更適合你的應用故障自愈的資料庫產品,這樣做故障自愈,可能成功的機會更大一些。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024924/viewspace-2939703/,如需轉載,請註明出處,否則將追究法律責任。

相關文章