懵懂入行,但一做就沉心鑽研十年——記訪談阿裏雲SQL Server專家楊釗

楊釗,花名石沫,阿裏雲SQL Server數據庫專家。在數據庫設計、開發與規範,數據高可用與容災,數據庫的優化,數據庫的自動化和智能化方向積累大量的經驗,處理過超大群集和超高並發場景的業務。
作為一個重度的數據庫領域相關的愛好者和實踐者,他已經在這個行業長達十年,“連我自己都難以置信會在這個領域堅持這麼長時間。”他談到。
回憶起入行,“偶然有一天在報紙上看到一家從事電子商務的外企在招聘數據庫相關的職位,也沒多想,並且也不知道數據庫相關工作要做什麼,就懵懂投遞了一份簡曆,經過麵試後,就幹上了數據庫。”在外人看來,這樣的選擇或許顯得很草率,但在執著的楊釗眼中,卻是深耕的開始。
“無論幹什麼工作,隻要堅持深耕下去,都會做的很好、很深入,也隻有這樣才會有競爭力。”在采訪中,楊釗說。
在Newegg,楊釗從零開始,不僅學到全麵的知識,也把數據庫技術應用做得非常好;而在凡客則是一種升華,“數據庫高可用性、高擴展和容災的方案做的非常好。”他說這是凡客那幾年最大的收獲。後來他加入阿裏雲,從事SQL Server產品建設和服務工作。
回顧過去,他感慨良多。“這些經曆,鍛煉了我的各種技能和思考方法,尤其是各種高強度壓力。”這種壓力抗住了,就是一種財富,他解釋到:“安逸的環境是鍛煉不出來過硬的實力和意誌的,人的本性容易懶惰。擁有熟練的技能和抗壓能力,往後的工作就相對較順利,路自然就寬了。”
他在SQL Server技術上也有不少認識和思考。他認為,優秀的SQL Server設計,應該先從數據庫的部署上著手,然後再回到數據庫設計本身。
除了這些,他也談了SQL Server開發中常見問題、健康檢查與性能方麵的心得,以及開發SQL Server的一些經曆。
雲棲社區:請介紹你以及所從事的工作。
楊釗:大家好,我叫楊釗,在阿裏巴巴的花名叫石沫。我是一個重度的數據庫領域相關的愛好者和實踐者。在數據庫領域主要從事SQL Server的相關工作,擁有10年的使用經驗,有時候我自己都難以置信這麼長的時間,依然還在這個領域堅持。前幾年時間在互聯網行業摸爬打滾,在數據庫設計、開發與規範,數據高可用與容災,數據庫的優化,數據庫的自動化和智能化方向積累大量的經驗,處理過超大群集和超高並發場景的業務。
最近兩年,在雲計算領域工作,接觸到各種各樣的用戶和需求,與我們在傳統行業工作體會不一樣,最大感受是簡化繁瑣的部署和後續的維護工作,以自動化與智能化為目標,將數據庫技術提升為一種優質的服務,為客戶創造價值。同時也解放傳統數據庫從業者的繁瑣工作,讓他們更集中在數據庫最核心的技術部分,更加方便和有效管理數據庫的數據。
雲棲社區:你是什麼時候和數據庫結緣的?眾多數據庫中,你為什麼選擇SQL Server?
楊釗:先講一段小經曆,在我們找工作那個時間段,正是高考擴招後的第一年,我們那撥人經常會說,什麼事都會趕上了,好的壞的。因此畢業找工作相對比較難,這對於有曆史感的同學可能會比較深有體會。
畢業前的一個冬天,正是找工作的時間,偶然有一天在報紙上看到一家從事電子商務的外企在招聘數據庫相關的職位,也沒多想,並且也不知道數據庫相關工作要做什麼,就懵懂投遞了一份簡曆,經過麵試後,就幹上了數據庫,這麼一幹就好多年。至於選擇SQL Server,實際也是沒有刻意去選擇,就是當時公司需要,因此結緣,我想無論幹什麼工作,隻要堅持深耕下去,都會做的很好、很深入,也隻有這樣才會有競爭力。
雲棲社區:在來到阿裏之前,你一共有幾段工作經曆?這些經曆,給你帶來哪些收獲?
楊釗:我是個相對安穩的人,按照我們最樸素的說法是不會經常選擇流動。因此工作這麼多年,也沒有呆幾個公司,在阿裏巴巴之前,隻有兩段工作經曆。
第一段工作經曆在Newegg,美資企業,做3C類的電子商務。在早期,比某東還知名,現在好多同事都聊起當時第一台電腦就在上麵買的。當然我們的主要工作在應對國外,而不是國內,這麼一待,就在這家公司接近6年,是不是很忠誠?在Newegg,基本上是從0開始,學到了最基本、最全麵和很實用的數據庫技術。在數據庫技術應用這塊做得非常好,特別是在大規模環境下保持穩定高效的運行。雖然短短幾個字,但這可不是一件簡單的事,要做的事情非常多,就像我們的雙11一樣,如何保持穩定,需要先進的技術來保障,所以在這家公司基本上將數據庫領域的各種知識都玩得較好。
第二階段,是為了升華。2012年有一家公司非常出彩,沒錯,就是凡客,在業務最火爆的時候加入到這家公司,因此挑戰也蠻大的,業務量也非常的大。最大的收獲——我想還是數據庫高可用性、高擴展和容災的方案做的非常好,因此也算是一份較大的收獲。
這兩段經曆,鍛煉了我的各種技能和思考方法,同時在互聯網行業夠感受到來自各種高強度的壓力。這種壓力抗住了,就是一種財富,安逸的環境是鍛煉不出來過硬的實力和意誌的,人的本性容易懶惰。擁有熟練的技能和抗壓能力,往後的工作就相對較順利,路自然就寬了。
雲棲社區:就你來看SQL Server開發中有哪些常見的問題?
楊釗:這類常見的問題我想各個同學遇到的不一樣,但在我的工作經曆中,從各個開發或者數據庫設計的同學的實踐中,可以看出有一個問題比較突出的——數據庫設計的基本規範。
比如,有個核心表和子表,是業務的主線,但是設計時不斷增加列,這樣導致後來一個核心表有上百列,導致問題嚴重。首先數據量會非常大,複雜查詢代價非常的高,會不斷增加索引解決性能問題,後期維護很困難,不易於擴展和處理。
我想這個問題的根本就是設計問題,反範式過度,同時主表和從表的列的類型不對齊,也是不一樣,導致在表與表之間連接時,有一個巨大的性能消耗,當然,對全局的性能影響深刻,範圍廣。有個例子,一個客戶服務的係統突然CPU很高,開發同學一直找不到原因,經過DBA分析後,發現是一個參數傳入的類型不一致導致,更改成一致後,立刻就正常了,這不是大的技術問題,而是需要深刻理解數據庫內部運行的原理,這類問題往往容易忽略,不容易發現,老司機的話就很快看到痛點。
另外,很多開發同學在設計與開發過程中,大多用看似最簡單的方式去完成功能,但簡單的方式不一定就是最佳的辦法,比如,有同學用慣性思維使用函數和OR條件,SQL語句確實簡單容易理解,但性能就差了,這類問題是非常突出的,特別是經驗不足的開發同學會遇到很多這類問題。
雲棲社區:你認為優秀的SQL Server設計應該包含哪些要素?
楊釗:我想應該從數據庫的部署開始來看,良好的基礎架構會給後麵的工作帶來便利。首先應該規劃好適當的硬件資源,數據庫的高可用和容災(比如你是熱備還是分布式數據庫、你的備份係統是否完備),安全問題是數據庫最重要的一環,絕大多數不能將數據庫在沒有任何安全防護之下直接暴露在外網,首先應該選擇在私網,這是基本常識,我看到國內很多ISP廠商有類似的問題,非常嚴重。
再回到數據庫設計本身,首先要遵守基本的數據庫設計理論,現代關係數據庫比較成熟,再往前看就是NOSQL的範疇。設計過程中,需要關注性能、容量、可擴展與可維護,你選擇任何一列的類型和長度都會對數據庫產生較大的影響,實際上,很多用戶在公司初始或者係統開始設計時,都會出現問題,改造會帶來較大麻煩。當數據庫設計沒有問題,還需要及時監控和跟蹤到數據庫性能或者健康狀態的情況,這就是我常說的自動化與智能化運維的一個重要方向,讓數據庫運行得可控可靠。數據永遠在變化,係統性能就會變化,我們遇到很多用戶會問,應用程序沒有變化,為啥性能變差了,這就是問題所在。
雲棲社區:SQL Server上雲之路,有沒有遇到什麼令你難忘的事和困難?都是如何解決的?
楊釗:阿裏雲提供了幾種解決方案,有數據庫官方的,也有我們自己開發的,工具很強大很好用,但是某些客戶的某些場景是無法滿足的,這個時候我們就犯難了,因為我們的數據庫服務不僅是一個數據庫係統軟件了,還是一種完全的解決方案,不能隻看數據庫係統軟件,還有控製鏈路,安全防護等組件,如何將用戶數據以最小的代價遷移到雲上,是用戶的最原始的需求,特別是金融客戶。
國內國外大多數雲服務商都不會提供類似的工具,我們在這方麵還走在業界的前麵。當用戶數據量巨大,要求在指定的時間完成時就很不容易,我們就需要人工介入去幫助完成,而這種介入是耗時又耗力的工作,關鍵還不能出現差錯。麵對這類問題,通常我們會與客戶進行有效的多次溝通,製定合理的操作方案,不斷地準備、預演和測試,優化各個細節,直到達到我們的要求。其次,用戶在上雲後,性能問題可能會有較大的變化,有些客戶會感覺反差很大,這類問題通常有幾個原因,原來的數據庫環境和現在的環境硬件資源差異大,精簡了太多資源,再次,可能是以前數據庫優化不夠到位,解決這類問題不是特別難,通常我們會提供數據庫專家服務,無論是通過彈性資源,還是深度優化,都是可以解決的,保持數據庫的穩定運行。
雲棲社區:為了應對用戶眾多的使用場景,你在穩定性方麵做了哪些改進?
楊釗:我們的SQL Server數據庫是基於微軟的SQL Server提供的雲服務,因此,在很多方麵都需要提供更加穩定的功能,但是作為雲服務,很多資源方麵的調度就要求控製得很好,比如如何彈性升降級,比如數據庫的操作。在限製資源時,也會遇到一些麻煩,比如內存,連接數,CPU的資源隔離,用戶購買多少我們就隻分配購買的資源,這些方麵都需要做得很好,我們在這些方麵都會下功夫去保障的。再次,SQL Server本身在某些場景下,在主備之間會出現一些BUG,我們也會想辦法去自動化實現修複,保障用戶的業務不收任何影響。同時,我們在監控方麵也做了很多細致的工作,用戶也可以通過這些報警及時得到數據庫的狀況,讓用戶隨時掌握實例的運行情況。這些都是從穩定性方麵去考慮和解決的。
雲棲社區:RDS SQL Server功能問題一直備受限製,但開放功能勢必會影響穩定性,你是如何在功能性上與穩定性上進行平衡的?
楊釗:SQL Server作為閉源的商業數據庫,在穩定性和可用性方麵給用戶帶來無與倫比的體驗,但在以雲計算為場景的情況下,傳統的數據庫使用方法不斷被挑戰,因為我們不僅是提供一種數據庫產品,更是提供一種數據庫服務,服務必然提供很多增值的東西。
用戶的使用場景很多,但產品又需要在穩定性方麵做妥協,這種妥協實際是對用戶的權限限製。因此我主要工作將是解決產品的穩定性和產品功能的開放,在穩定性方麵,主要是產品的性能問題和可用性方麵,比如連接限製帶來的性能,比如主備的自動化管理,比如自動化的監控與報警。
功能方麵,主要增強了數據庫的安全和權限開放,權限是用戶使用數據庫的主要痛點,很多功能都被限製,因此解除這些限製對用戶很必要,但解除勢必給產品帶來穩定性的負麵效應,因此基於SQL SERVER的接口,深度控製權限與穩定性的平衡,開放了用戶詬病的功能問題,為用戶的使用提供了極大的方便, 在SQL Server 2012版本上,可以使用到更加多的功能,我在雲棲社區有篇文章,專門講這個問題,請參看《RDS for SQL Server 2012 權限限製的提升與改善》。
雲棲社區:從某種意義上來說,傳統的數據庫可能僅僅是一款產品,而到了雲計算時代,它也更是一種服務,在服務上你都做了哪些東西?
楊釗:與傳統的數據庫相比較,我們首先要去購買硬件,評估硬件,然後再設計架構,考慮是否需要高可用性,考慮需要是否需要異地容災,接著再去安裝部署數據庫,創建監控,創建數據庫的性能監控……等等,一係列的繁瑣的基礎的並且重複的工作煩擾著數據庫管理員。
而雲計算中,我們把數據庫定義為一種服務,從硬件層麵到高可用性容災,再到部署,都是自動化、多任務化、流程化進行,所有有效的監控報警與性能監測都是有穩定的係統來保障的。是人都會犯錯,而合理的高可用係統可以得到最大的保障,人控製機器的運算邏輯,機器來管理我們的工作,因此始終能夠提供持續穩定的服務。我們提供像水電煤一樣的東西,買多少用多少,不再需要做一些基礎的工作。從成本和價值方麵更加有利於用戶。
雲棲社區:在SQL Server健康檢查與性能方麵,你是否有自己的一些心得?
楊釗:SQL Server健康檢查與性能方麵,是每個數據庫管理員最重要的工作之一,我是這樣來思考這個問題的:
首先,健康檢查和性能監控是日常的例行工作,每時每刻都需要進行,我們不能等到數據庫出現問題的時候再去查找原因。絕大多數問題,都是需要有現場才可以找到原因的,那麼首先我們就應該保留足夠多的現場,比如我們的數據庫的性能計數器是需要采集,當時的執行SQL也是需要記錄下來的,這在解決突發問題是比較有用的。
性能方麵,我想大家最喜歡的是每天分析TOP 10的SQL,當然如何分析是個大問題,需要學習掌握數據庫的基礎知識,這個可以不斷積累,重要的是保持耐心,能夠靜下心來,細致地做診斷分析工作。沒有特殊途徑的,在某些領域必須要踏踏實實去做。
雲棲社區:在致力於更優秀的數據庫服務上,SQL Server還將怎麼做?
楊釗:在長期與客戶深度接觸中,理解客戶的躁動和憤怒,傾聽客戶的心聲,為他們解決麵臨的問題,與客戶建立起信任與友好的關係,為客戶創造最大的價值。同時將客戶的訴求轉化為產品需求,並逐漸積累需求建立起專家係統,通過自動化和智能化,為千百萬用戶迅速準確解決問題。
在產品方麵,提供更豐富的產品,比如讀寫分離,比如盡快提供SQL Server 2014,SQL Server 2016等產品,充分利用新特性來幫助用戶完成需求。
雲棲社區:也請你總結下:相比其他類型數據庫,雲上的SQL Server有哪些優勢?
楊釗:這是一個很尷尬,也很難來回答的問題,阿裏雲數據庫提供了多種數據庫服務,比如關係型數據庫方麵,有MySQL、SQL Server、PostgreSQL。我在很多場合都被問到,我每次回複也很簡單,開源的數據庫成本低,使用靈活,用戶自己可以把玩,但是必須有足夠的控製力,自己玩的話很容易被玩壞,阿裏雲提供的開源數據庫有頂尖的人才來保障的,因此可以保持持續穩定的服務。
而商業數據庫相對穩定一些,隻是成本會高一點。每個公司或者業務,根據自己的場景選擇,適合自己的業務數據庫,才是最好的。沒有必要去爭個輸贏,我不會參與這類問題的討論(具體優勢,可以查看官網>>>點此進入)。
雲棲社區:你平常比較喜歡“常反思失敗與成功,常學習和研究戰術戰略。能否深入談談?
楊釗:這個也算我們平時的一些感受和愛好,對工作,對生活也是這樣,簡單的事情可能失敗,複雜的事情反而成功,這裏麵其實不是技術性問題,而是態度上的問題。
我覺得很多事情,隻要有目標和計劃,並且願意付出,都會成功的,我們常常講的理想,目標,行動就是這個意思。平時我個人喜歡看古代曆史正劇(非宮鬥劇)和二戰相關影視劇,研究曆史給我們很多啟示錄,反思戰爭給人類帶來的災難,反思如何避免悲劇的發生,同時也領略將領的打法,如何獲得勝利,感觸很多,通過這些曆史事件,不僅可以看到人類發展史,更要看到曆史是多麼殘酷的,進而要感恩太平盛世,好好工作,開心生活,借用《士兵突擊》一句話,“做有意義的事,好好活”,無愧人生。
相關閱讀:
楊釗此前所做的視頻幹貨分享:《SQL Server優化案例分享》
最後更新:2017-07-19 09:32:38