3年DBA之路

一、寫在開頭

    今年4月是我正式參與工作滿三年的句號,我覺得有必要回顧一下過去三年DBA生涯的工作經歷,幫助自己做好總結,並想清楚自己未來要走的路。同時也希望這些經歷能幫到別人。

    畢業時候參加過數據開發、遊戲研發以及DBA的實習,或許是因爲我當時感覺DBA的職業特性跟我性格比較匹配的緣故吧,最終我選擇了DBA作爲我第一份正式職業。

    當時的我對DBA的瞭解十分有限,甚至此前都沒有接觸過DBA,對數據庫的瞭解也僅限於使用。所以這3年我也是在工作中不斷地摸索和學習,接下來是從我的視角來了解一下DBA。

 

二、工作內容

    以前我覺得我並不算是一個傳統的DBA,因爲工作頭兩年參與的大部分工作是做監控、自動化運維開發以及NoSQL(Redis、SSDB、MongoDB)的運維及業務支持,對關係型數據庫更多是自動化運維開發支持。

    但是隨着後來參與了一些業務優化、數據模型設計、備份恢復建設、機房遷移方案設計與實施、集羣架構升級、高可用改造及跨機房容災及改造等工作,讓我對數據庫、業務、架構的理解更深入,對DBA的工作內容及DBA對業務帶來的影響有了更深刻的認識。

    根據我對DBA的瞭解,我把工作場景進行如下分類(各類工作也是互相關聯的):

  • 日常運維類:權限管理、資源需求審覈評估和交付、sql審覈、ddl、dml操作、報警內容分析及修復等常規運維支持
  • 特殊運維需求:數據遷移、實例遷移、虛機遷移、機房遷移、版本升級、架構升級、數據庫類型切換等等
  • 業務優化類:對存在性能、容量問題的業務進行業務優化,主要是表結構優化、sql優化、索引優化、Redis數據模型和操作模型優化等等
  • 業務模型設計類:針對某一系統、平臺、業務進行數據庫選項、架構選型、表結構設計、sql設計、索引設計、Redis數據模型和操作模型設計等等
  • 架構設計類:針對特殊業務場景或者當前無法支持的業務場景進行架構設計,持續建設高可用方案,提升服務可用性,持續建設,提高數據庫支持能力
  • 運維開發類:針對運維操作進行自動化開發,減少人爲操作數據庫的時間和風險,涵蓋監控、備份恢復、部署、數據遷移、架構變更、權限控制、ddl、dml操作、元信息建設等等

PS:這僅限於我當前的個人理解,後續可能會隨着我的工作經驗豐富,工作內容會有更多的擴展。此外,我也把工作中遇到的問題以及如何分析、定位和解決的過程沉澱下來,進行分享。

補充,根據這些工作,將DBA分爲三類:

  • 運維管理方向

  • 架構設計、性能優化等需要經驗積累的方向

  • 數據庫開發方向(分爲運維開發、業務開發支持、工具定製、組件研發、內核研發等等)

 

三、核心能力

    雖然不同數據庫類型所涉及的技術不一樣,但是根據上面分析的工作內容,我還是可以找出各個數據庫的通用技能類。

    我把DBA的核心能力劃分爲(重要程度不分先後,相互之間也有一些關聯):

  • 備份恢復:DBA必備技能,不同數據庫的備份恢復機制不同,但是業務對於數據的可恢復能力是剛需,而一個好的備份恢復方案能大幅度提升數據恢復的能力,所以在備份恢復方向上必須做到很高的水平
  • 高可用架構:DBA必備技能,相對重要的業務場景當然不希望你的數據庫一旦出現故障就使得業務癱瘓,所以數據庫的高可用在維持業務運行上是非常重要的。
  • 分佈式架構:在支持一些存儲需求高、併發高的業務,分佈式架構的能力能讓你面對這些需求得心應手。
  • 讀寫分離、異地多活等特殊場景架構:在一些特殊場景下,需要我們靈活運用數據庫的機制進行架構設計,以較小的代價承接特殊業務場景。
  • 性能優化和存儲優化:DBA必備技能,利用我們對數據庫機制、參數的理解,針對業務特性進行相關調整,讓提升性能和存儲空間利用率。
  • 數據同步、遷移:應對一些運維場景或業務變更,需要利用數據同步和遷移的能力去解決問題。
  • 數據庫選型與業務建模:DBA必備技能,利用我們對數據庫特性和運行機制的瞭解,結合業務進行設計,讓業務在性能、存儲、擴展性、穩定性等方面都有不錯的表現。
  • 開發規範、運維規範:需要我們對數據庫有一定的理解和經驗的累計,才能制定出優秀的開發規範和運維規範,這也是能讓我們更好地展開工作的能力。
  • 自動化運維的設計與開發:解放我們日常運維工作的特效藥。
  • 監控及監控分析:需要我們對關鍵指標有足夠的理解,才能從監控數據中發現異常,並快速分析定位。
  • 數據庫運行機制及重要參數的理解:是以上多個能力的基礎。

PS:我希望後面能夠針對這些能力如何提升,需要從哪些方面入手,做一個詳細的學習攻略。

 

四、基礎能力

    核心能力想要深入、牢固地掌握好,在一些基礎能力上的儲備是非常關鍵的,也是決定一個DBA上限的能力,我把這些能力分爲:

  • 數據結構與算法:無論是Redis五大數據結構的底層實現還是MySQL的索引機制以及數據庫的一些存儲和執行機制,想要掌握好,就需要我們具備足夠優秀的數據結構和算法功底,當然對於我們DBA來說,不需要利用算法和數據結構去開發,但是需要我們瞭解其時間、空間複雜度,以及各數據結構、算法的原理。
  • 計算機網絡:計算機網絡在計算機領域都是必備能力,對DBA尤其重要,尤其是在分析一些響應延遲等問題上以及架構設計方向上。
  • linux操作系統:數據庫多數是運行在linux系統之上,甚至很多的數據庫機制跟linux系統的底層關聯較大,掌握linux操作系統能更好地幫助我們進行性能優化、問題分析和處理。
  • C語言:我爲什麼單獨把C語言作爲核心能力呢,因爲C是相對來說比較底層的開發語言,掌握了C語言,其他語言能更快速地掌握,且目前大部分優秀的開源工具都是基於C語言開發的,掌握C語言更有助於我們去掌握開源工具,更快速地理解各工具的運行原理

PS:這些技能相對比較通用,我會把我的學習心得和總結也在博客中進行分享。

 

五、通用能力

    DBA想要在工作中更好地展開工作,有幾個通用能力能幫助我們提高效率、提升工作質量,我把這些能力分爲(可能有些能力會相互關聯):

  • 時間管理:DBA的工作內容可以看出非常的多,會把我們的時間打得非常零碎,這就需要我們做好時間管理,提高時間利用率;
  • 會議管理:DBA的日常工作會涉及非常多的會議,做好會議管理,能幫助我們更好地獲取會議重點信息,提高會議效率‘
  • 溝通與協作:DBA需要面對開發人員、業務人員、產品、系統運維、安全等各方人員,面對不同的人把相關事情講清楚,併合作做好,也是DBA的強大內功之一
  • 覆盤能力:覆盤能更好地讓我們積累經驗,調整前進路線,更好、更快地達成目標。
  • 分享與展示:做方案分享、技術推廣、方案落地等都需要我們具備較好的分享和展示能力。
  • 持續學習:數據庫是一個技術革新非常快的一個行業,需要通過持續學習來獲取更多更好的技術和方案。
  • 職業規劃:有了好的職業規劃纔能有方向和有目的地展開工作,提升工作效率,快速提升自我。
  • 目標管理:好的目標管理能力,能讓你日常工作有的放矢,目的性強,工作效率高,工作質量好。

PS:通用能力在很多課程、網站、分享中都能學習到,我這裏就不過多展開了,如果發現有好的學習途徑我會進行分享。

 

六、DBA對公司的影響和價值

    不瞭解DBA的人可能對DBA的影響力一無所知,可能有些人還認爲DBA無非就是個管理數據庫的,但是我希望通過下面的分析能改變你的看法。

    一個專業的DBA對公司的價值非常大,根據我的工作分析出有幾個方面:

  • 成本:DBA能根據業務進行合理的選型和建模,使用最少的硬件成本支撐業務,極端情況甚至能減少90%以上的硬件成本。
  • 性能:DBA能根據業務特性進行操作模型設計、優化,極大程度低提升服務效能,提高用戶體驗。
  • 容錯:DBA對故障做好了備案,一旦發生各種故障,都能夠快速進行恢復,使故障對公司帶來的影響降到最小。
  • 規範化:DBA能規範化公司的一些開發運、維行爲。
  • 成長/可持續發展:DBA提供了健壯性的數據庫方案,在公司快速發展的同時,也能同步進行擴展和支持。

    

七、給過去和未來

    過去三年,從小白到老鳥,努力沒有白費,做出很多有價值的東西,積累了很多經驗和技能,包括專業技能和通用能力,收穫了同事的認可和信任。但是成長速度還是不夠,學習不能夠長久持續,一些基礎能力掌握不夠牢固,參與的一部分項目成果一般。不要否定自己,也不要太過焦躁,靜下心來,走好每一步路。

    未來,需要繼續鞏固基礎能力,加強核心能力,在縱向需要深挖底層原理機制,在橫向也要擴展數據庫技術,掌握更多的數據庫類型,避免單一化,思考問題能更全面,在知識沉澱和建議積累上,要積累架構設計、架構優化能力,同時保持對行業前沿技術的瞭解,吸收身邊優秀前輩的經驗。要保持職業規劃與工作規劃相對一致,要保持個人目標與公司目標相對一致。持續學習,持續鍛鍊身體,持續分享。

    希望下一個三年通過努力能夠成爲超級高級的DBA。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章