閱讀408 返回首頁    go 技術社區[雲棲]


行成於思:從Oracle到MySQL

640?wx_fmt=jpeg&wxfrom=5

這篇文章來自於微信群的問答,我和周彥偉互相配合,彥偉回答了我的四個關於MySQL和Oracle的問題,對於來自兩個不同領域的人,這些問題我想對很多人具備參考價值。整理收錄於此,供參考。


1.用戶該選擇怎樣的MySQL?

蓋國強問:隨著Oracle囊括MySQL而去,用戶對於MySQL命運的擔憂從未停止,然而官方版本的各種特性確實在不斷增強,從GTID到MTS,Oracle解決了MySQL的很多曆史問題,同時諸如MariaDB等新的分支又激活了開源的引擎,Oracle官方分支與其他分支相比,是否具備明確的更新優勢,用戶該怎樣去進行選擇?進一步的,周總認為MySQL最吸引用戶的地方是什麼,比如和Oracle數據庫對比(不談成本)?


周彥偉答

MySQL的版本,個人認為比較靠譜的有三,MySQL官方版本,Percona版本,MariaDB版本

MySQL官方版本當然是正統,不管是代碼開發人員,還是各種測試,文檔,社區維護都是最強大,最全麵的。我估計(官方版本)也是目前使用量最大的版本。它對bug的修改和功能性代碼補丁的merge都很專業,謹慎,可靠性比較高。它的缺點,龐大的機構和冗長的流程,會導致代碼更新緩慢,一些熱點功能不能很快的反應到官方GA版本上,如果希望用到比較實用的社區開發人員提供的補丁,可能需要等待很長時間。MySQL官方在企業版和社區版之間徘徊,感覺他們還沒想好到底怎麼發展MySQL,很好的工具不能免費提供給使用者,要走收費的道路,然後又等著開源社區來革命。

反之,MariaDB在這方麵比較接地氣,很多最新的功能都能快速的加入和實現,很多人選擇它就是因為這點。Monty本人感覺比較激進,比較從諫如流。但是MariaDB還是太年輕,各個環節還不夠成熟,專職的開發者也少,並且很重要的是,很可能上了道之後就回不來了,慢慢的會偏離MySQL。


Percona版本是官方版的超集,它在官方版本的基礎之上又加入了很多補丁,同時Percona已經修成一個基於MySQL的生態圈了,各種工具,方案,文檔都很齊全。對MySQL用戶來說是一個不錯的選擇。但是令人堪憂的事情是,Percona自身的開發能力,特別是對InnoDB的開發和修改能力慢慢趨於弱勢,真正有實力的人,應該還在官方。不過,鑒於Percona完全兼容官方版本,我目前還是選擇了它。


我認為自由是開源數據庫的興起之源,特別是在互聯網行業,自由之風盛行,所以開源數據庫可以大行其道。作為使用者來說,知其然並知其所以然的狀態是最好,並且,在開源麵前不僅僅如此,知其所以然而後對其拆骨動筋,使其為我所用,聽我所囑,這也隻有開源可以辦得到。

另外,開源社區的氛圍,也是大家學習和進步之源,不僅能直接吸收其編碼的精華,也可以借鑒他人之經驗,整體欣欣向榮,互相促進,共同進步,如此藍圖,豈不樂乎。


2.從代碼到運維,MySQL的DBA何去何從?

蓋國強問:有人說玩開源產品就要玩源碼,MySQL DBA中有一類獨特的群體是代碼開發者,和Oracle DBA比較起來,單純的MySQL的運維似乎可以騰挪的空間更小,作為MySQL DBA,應該如何選擇MySQL入行的方向,不同方向的關係又是如何的?我也非常想知道周總在MySQL的職業生涯中,是從哪個角度入行,對於源碼的認識是怎樣的,從人人網到去哪兒,角色和技術上又有哪些轉變?


周彥偉答

我個人是抱著讀源碼的信心入行運維DBA的。當時改行做DBA,我已經做開發超過5年有餘,陡然換一個新的職業的信心來自於自己編程的經驗,當時要決定做DBA時,我對自己說了一句話:MySQL不就是一個程序麼,代碼都在那裏,還有啥搞不定的?

但造化弄人,我並沒有對源碼有過很多深入的研究,甚至沒有通讀過一遍。在當時的工作,研發和DBA比例超過200:1。工作壓力巨大,早期的MySQL知識恰恰都是從運維中獲得的。從這點可以說,運維也可以幹得很不錯。我也相信,到目前為止還是有很多人沒有看過源碼,但在DBA的崗位上非常優秀和成功的。

同時,我也注意到,很多從源碼起步的人,並不一定能把運維這個事兒搞得很好,甚至會一團糟,各種理論的書麵經驗並不能有效轉化為生產力,有時候甚至會捅大婁子。認真總結可以發現,源碼和運維是兩種完全不同的思維模式和做事方式,相對而言,源碼需要的是更為抽象的算法,編程能力,思維能力,而運維更側重於經驗的總結,行為的準則,人性的展示,運維往往更能反映人性。我之前在人人上發狀態有過這樣的表達:DBA是一種生活方式。DBA是一種態度。


我個人比較幸運的是,在經曆了大規模,高強度,超負荷的運維DBA的過程中,不斷接觸到了數據庫源碼和研究數據庫源碼的人,他們給我糾正了很多我在運維過程中猜到的一些經驗,這些經驗在源碼麵前被揭露的一覽無餘,讓我改變看法,積累正確的知識,不斷進步。在此,我要謝謝這些好朋友,竹峰,立勳,丁奇,古雷,利兵,登博,禇霸等等。當然,獲取數據庫的知識也來自從運維入手的一批朋友,諸如炳錫,金榮,啟榮,發明,李淩,應鋼等等,這些都是良師益友。


關於源碼和運維,我的周圍還有這樣的奇才,從源碼轉而運維,從運維轉而源碼,總而言之,二者如果能很好的結合起來,在運維過程中參照源碼來指導工作,把運維的需求變成源碼沉澱,這才是MySQL DBA最好的工作方式,這些人的成就,我已經望塵莫及了。


MySQL DBA或者DBA的發展,除了更深入的鑽研源碼以達到MySQL屆掃地僧的造詣之外,可發展的空間還有兩條路:

一是對底層架構的把握和設計,MySQL是需要架構的,而且需要功力很深的設計,不管是擴展性還是可用性,它自身都沒有很好得解決方案,這需要從上層角度,根據自己業務的需求和特點,選擇不能的架構思路,甚至在一個公司內部,根據公司的業務不同,也需要選擇不同的方案,物盡其用,物有所值才是持家之道。

二是對業務邏輯和架構的深入。我記得這是在跟童家旺大師聊天時候他提到的一個觀點,我對此非常認同。數據庫跟業務再也不是路人甲乙的身份了,數據庫的優化需要了解業務的真實需求和特點,業務技術架構和方案的設定也需要深入了解數據庫的特點,把二者結合起來考慮,各自揚長避短,才能和諧工作,提升效率。DBA就是這其中的橋梁,DBA要上得廳堂,下得廚房,做到深入了解每一個分表,每個sql的真正意義,才能更好得去優化和設計。這樣的DBA才是有價值的DBA,才是業務和企業最離不開的人,這其中的空間無比的寬廣,非常非常值得探究。目前來看,MySQL DBA在逐漸往這條路上(深入業務)前行,但是Oracle方麵,由於傳統的習慣和Oracle數據庫大包大攬的特點,反而數據庫和業務離得比較遠一些。目前的Oracle DBA沒有MySQL DBA那麼搶手,這是不是也是一個原因?


我個人從之前的人人網到去哪兒網之後,擔任了數據庫總監的職務,在短期內把DBA團隊發展壯大到超過原來的3倍,同時擴大了DBA的業務,從原來狹義的DBA隻顧MySQL這一項內容擴展到MySQL,HBase,redis,甚至SQL Server。這其中有公司的需求,也有個人以及團隊發展的考慮。在MySQL上的主要工作是作為架構師的角色,帶領和夥同兄弟們一起做了不少底層的革新。從製定MySQL開發規範,到架構PXC,從開拓redis業務到目前的HBase的初見成效,從帶動公司硬件的革命,到推出開源審核產品InceptionSQL,也算做了一些事情。


3.MySQL的版本更新?

蓋國強問:在我的職業生涯裏,Oracle從8i、9i、10g、11g進化到現在的12c,而MySQL已經在5版上徘徊了超過10年,MySQL是如何規劃版本的,開源產品在活躍的社區下為何反而不如商業產品迭代和擴展得快?那麼是否意味著在Oracle的支持下,MySQL官方分支會加快MySQL的演進更新?


周彥偉答

我對商業產品的市場行為不是太了解,不過從周圍的手機,電器,醫藥等產品的更新換代來看,我覺得這種大版本的不斷更新換代絕對有商業的意圖在裏麵,至於細節,就不知道,也不好評說了。


相反,我對MySQL還是比較了解的,我是從5.0.27開始使用MySQL的,到現在的MySQL5.7.8。MySQL看似讓人失望了,MySQL 5版本徘徊了已經很久很久了,久得讓人覺得MySQL5是一個產品的名稱了,而不是MySQL,連MariaDB都10了。但是回過頭來看,MySQL每一個最小版本的升級,都走得踏踏實實,細看Release Notes你會發現,MySQL真是解決了很多很多的問題啊。並且幾次大的升級,5.0到5.1,5.1到5.5,5.5到5.6以及5.7,每次升級都有亮點,都讓人欣喜。當然我上麵也吐槽過,MySQL還是不夠激進,效率也不夠高,很多好用的特點沒有被官方接納,官方的官僚冗長的作風,也值得批評。

MySQL一直是5還有一個原因是,上麵的開發框架這幾個版本Server框架沒動,都是基於Server+引擎的Plugin的方式,最近幾年主要是針對引擎上做各種工作了,例如InnoDB的變動,實際上是不表現在MySQL Server的大版本上的。MySQL版本選擇方麵很重要一點是是針對引擎的選擇或是針對業務解決方案來選擇,這是和Oracle差別很大的地方


另外,MySQL產品升級的曆史,也可以看做是互聯網發展的一個縮影。從最初的簡單的Myisam存儲,到InnoDB的大規模推廣,從replication受到熱捧到各種集群方案的推出,從數據庫訪問的效率,到對數據庫一致性,安全性的追求,反映到互聯網上,難道不是web1.0,2.0,搜索引擎,社交產品,電子商務,金融服務的寫照麼?現在在電子商務產品上使用MySQL已經不是什麼稀奇的事情了,進而,包括阿裏在內的大廠們都在考慮如何提高一致性和安全性,要把MySQL用在金融上,這也包括我從去年開始認真研究的PXC,也是應此需求而來得。這就是MySQL的進步。


4.MySQL在國內的發展會否“成也阿裏,敗也阿裏”?

蓋老師問:在我的視野裏,最近幾年MySQL在國內的快速發展,一部分得益於阿裏在去“IOE”中,使用MySQL替代了Oracle數據庫,進而不斷推動國內關於MySQL的技術討論,但是隨著阿裏自有OB的使用,包括最近熱議的PG,以及在雲上全麵的數據庫產品布局,會否使得MySQL沉寂下來,MySQL和PG的競爭該如何判定?


周彥偉答:

首先,我認為國內的MySQL“成也阿裏”是不準確的,據我所知,阿裏在MySQL方麵有比較好的成果和公開的分享,怎麼也得是2009年之後了吧。那麼在此之前,事實上國內的MySQL已經如火如荼了,例如我的摯友吳炳錫,葉金榮,在那個時候已經是多年的MySQL DBA了。我當時供職的人人網,已經是數百台實體機器,數千個實例的規模了。還有更多的一些專家,一些公司,其實在很早很早就開始用MySQL了。我相信騰訊的使用MySQL的曆史和規模應該都大於當時的阿裏。這也是開源社區的特點,真真的藏龍臥虎,高人輩出。

事實上,互聯網一直有MySQL的身影和基因,去IOE隻不過是把MySQL推到了一些傳統的企業和政府麵前,看似一下子火起來了而已,其實,火,一直在那裏燒,隻是關注者的側重點不同而已


“敗也阿裏”也值得商榷,正是這幾年以阿裏的一些數據庫愛好者的推動,MySQL技術得到了長足的發展,不管是MySQL的社區,還是MySQL自身的性能,安全性,都在廣大MySQL DBA和源碼貢獻者的推動下不斷得到優化,MySQL的使用範圍也越來越廣,據我所知,不僅僅是大家知道的阿裏淘寶,連QQ的財付通,QQ的遊戲支付,大家平時玩的微信紅包,都是在用MySQL。上麵提到,MySQL馬上要走入到正統的金融領域了。我之所以說是正統,是指的銀行或者類銀行的權威機構,是要處理賬務的,不僅僅是上麵提到的這些電子商務的流水賬目。因為我知道很多金融網站,P2P金融服務在用MySQL,但是他們的技術人員並沒有認識到MySQL的不足,直接上來就用,真可謂初生之犢不懼虎,我個人是不會買這類網站的金融產品的。支付環境是安全性和一致性主導的,這方麵如果新型的P2P公司要使用MySQL最好找人谘詢一下。


另外,現在傳統企業的跟進,必然也會從互聯網公司挖一批從事的老兵,這些老兵也會把互聯網的經驗帶到傳統企業,所以MySQL的使用,已經不隻看阿裏或者互聯網了。 另外我看到各種MySQL培訓,例如炳錫的泰嶽學院,恩墨的恩墨學院做的也挺火的,可以說現在市場需求真的不到是阿裏了。 也許阿裏會向更高的層麵發展,如同google推出Spanner這種東東,一般企業也不需要,也不容易部署起來。 再反觀,MySQL做為一個成熟的成品在一般企業在搞定千萬或是上億用戶的規模係統裏,互聯網現在的技術也可以頂一段時間了。


至於有類似OB和PG競爭,我一直覺得這是一件非常好的事情,我所在的公司是有PG的,並且PG不在我的控製之下。但這一點也不影響我對PG的喜愛和支持。好東西為什麼要刻意回避?競爭才能意味著進步,如果MySQL過不了這一關,那麼它的死掉也不足惜了。按照曆史的發展經驗和MySQL活躍程度,我認為敗隻是臆斷,隻是擔心,這個發生的可能性很小。


當然,我也再次唿籲,大家一起努力,把社區做好,把產品最好,把數據庫用好。


本文出自數據和雲公眾號,原文鏈接


最後更新:2017-07-18 11:03:05

  上一篇:go  軟件大會分享PPT:麵向開發和DBA的Oracle 12c新特性
  下一篇:go  盤點中國第四次工業革命物聯網的數字亮點