天天看點

【沉澱】懵懂入行,但一做就沉心鑽研十年——記訪談阿裡雲SQL Server專家楊钊

<b></b>

【沉澱】懵懂入行,但一做就沉心鑽研十年——記訪談阿裡雲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健康檢查與性能方面,是每個資料庫管理者最重要的工作之一,我是這樣來思考這個問題的:

首先,健康檢查和性能監控是日常的例行工作,每時每刻都需要進行,我們不能等到資料庫出現問題的時候再去查找原因。絕大多數問題,都是需要有現場才可以找到原因的,那麼首先我們就應該保留足夠多的現場,比如我們的資料庫的性能計數器是需要采集,當時的執行SQL也是需要記錄下來的,這在解決突發問題是比較有用的。

性能方面,我想大家最喜歡的是每天分析TOP 10的SQL,當然如何分析是個大問題,需要學習掌握資料庫的基礎知識,這個可以不斷積累,重要的是保持耐心,能夠靜下心來,細緻地做診斷分析工作。沒有特殊途徑的,在某些領域必須要踏踏實實去做。

雲栖社群:在緻力于更優秀的資料庫服務上,SQL Server還将怎麼做?

楊钊:在長期與客戶深度接觸中,了解客戶的躁動和憤怒,傾聽客戶的心聲,為他們解決面臨的問題,與客戶建立起信任與友好的關系,為客戶創造最大的價值。同時将客戶的訴求轉化為産品需求,并逐漸積累需求建立起專家系統,通過自動化和智能化,為千百萬使用者迅速準确解決問題。

在産品方面,提供更豐富的産品,比如讀寫分離,比如盡快提供SQL Server 2014,SQL Server 2016等産品,充分利用新特性來幫助使用者完成需求。

雲栖社群:也請你總結下:相比其他類型資料庫,雲上的SQL Server有哪些優勢?

楊钊:這是一個很尴尬,也很難來回答的問題,阿裡雲資料庫提供了多種資料庫服務,比如關系型資料庫方面,有MySQL、SQL Server、PostgreSQL。我在很多場合都被問到,我每次回複也很簡單,開源的資料庫成本低,使用靈活,使用者自己可以把玩,但是必須有足夠的控制力,自己玩的話很容易被玩壞,阿裡雲提供的開源資料庫有頂尖的人才來保障的,是以可以保持持續穩定的服務。

雲栖社群:你平常比較喜歡“常反思失敗與成功,常學習和研究戰術戰略。能否深入談談?

楊钊:這個也算我們平時的一些感受和愛好,對工作,對生活也是這樣,簡單的事情可能失敗,複雜的事情反而成功,這裡面其實不是技術性問題,而是态度上的問題。

我覺得很多事情,隻要有目标和計劃,并且願意付出,都會成功的,我們常常講的理想,目标,行動就是這個意思。平時我個人喜歡看古代曆史正劇(非宮鬥劇)和二戰相關影視劇,研究曆史給我們很多啟示錄,反思戰争給人類帶來的災難,反思如何避免悲劇的發生,同時也領略将領的打法,如何獲得勝利,感觸很多,通過這些曆史事件,不僅可以看到人類發展史,更要看到曆史是多麼殘酷的,進而要感恩太平盛世,好好工作,開心生活,借用《士兵突擊》一句話,“做有意義的事,好好活”,無愧人生。

相關閱讀: