2017年10月10日,世界權威資料庫管理系統之一的MariaDB的 10.3.2 Alpha版本釋出,在版本更新介紹裡,出現了這麼兩行字:

其實,早在去年釋出的MariaDB 10.2.3版本中,騰訊互娛營運部DBA團隊送出的兩個新特性第一次被被內建到新版本中,被點名感謝了!
時隔半年,MariaDB在更新版本的時候再一次特别感謝了騰訊。據了解,新的版本裡增加了騰訊互娛營運部DBA團隊輸出的功能特性,這個新的版本裡,新增了我們從2013年就開始在騰訊遊戲場景中大規模使用的TenDB(aka TMySQL)兩大核心特性:InnoDB快速加字段以及大字段壓縮。
看到這裡,身在這個生态圈外的你可能想問:
對于圈外人來說,DBA和MariaDB是個抽象的存在。但是對圈内的人來說,置身在MySQL的生态圈是所有DBA的人生幸事。說到MariaDB就不得不提MySQL,它原本是一個開放源代碼的關系資料庫管理系統,在過去由于性能高、成本低、可靠性好,成為最流行的開源資料庫,後來被甲骨文公司收購了。然而,MySQL原創始人麥克爾·維德紐斯(Monty)認為oracle的收購,有将MySQL閉源的潛在風險。是以Monty以MySQL為基礎,成立分支計劃MariaDB。由于MariaDB具有衆多領先MySQL的新特性,原先很多使用MySQL的開源軟體現在逐漸轉向MariaDB,短短幾年過去,MariaDB已成為全球排名前20的資料庫,并且使用人數和影響力都在穩步提升。
騰訊互娛營運部的DBA(Database administrator)團隊,一直都是MySQL等開源軟體的使用者,緻力于為遊戲提供穩定、高效的線上資料存取服務,根據騰訊遊戲的業務需求,不斷改進資料庫和提升性能,提供高性能、可擴充、穩定可靠的資料庫解決方案。團隊發現,每次遊戲停機維護,花在資料庫的變更上的時間最長,這對使用者體驗和收入都有影響。“每次半夜資料庫更新,每台機器都要花費數小時,我們也必須盯着等着,生怕出錯導緻更新延遲,太不智能。我們團隊就想尋求突破,改變以往隻從外圍做修改的方式,而是從核心上做出改動,實作質的突破。這是之前不曾有過的。”互動娛樂營運部存儲與計算資源中心的Robincui說。
通過大半年的努力,DBA團隊基于MySQL官方版本的定制了TMySQL(後來改名為TenDB),提供業界領先的線上加字段功能——使用MySQL作為存儲的業務執行個體中,TMySQL占比97.78%。
“這個版本出了之後,我們在一些遊戲上進行了測試,效果明顯。先前,某遊戲在資料更新的時候對日志DB中一個約74G的分區表執行加字段操作,當時這個機器的配置比較低,結果耗時約12個小時,還導緻正常入庫操作延遲數小時。而将該DB更新成我們的版本後,執行類似的加字段操作,僅需0.04秒就完成了!”互動娛樂營運部存儲與計算資源中心的Vinchen舉了個例子。
從43200秒(12小時)到0.04秒,該遊戲在資料庫更新加字段的操作上,效率提高了1080000倍!這隻是一個舉例,但是據DBA團隊介紹,資料量越大,該特性帶來的效果越明顯。
一直以來,騰訊遊戲的DBA團隊都是MySQL等開源軟體的使用者,也通過對MySQL的管理和維護工作,逐漸積累了豐富的MySQL運維經驗技術和源碼能力,TMySQL和TSpider版本也是基于MySQL的系統定制的。“我們從MySQL受益這麼多,也很想為開源社群做一點貢獻。我們夢想着有一天,我們能與MySQL的開源社群共同成長。”互動娛樂營運部存儲與計算資源中心的Felixliang說起了DBA團隊的開源夢。“我們知道,這做起來很難,但卻價值最大:從開源社群中來,再把我們的經驗和成果回饋到社群去,讓廣大MySQL使用者和愛好者可以更加放心地使用我們的功能特性。”
2015年8月,團隊将Replication的兩個功能送出給MySQL的複制團隊及MySQL郵件組,得到了MySQL官方團隊的積極認可。但可惜的是,鑒于Oracle公司或流程或制度上過于嚴謹的考慮,這些功能迄今還未能落地。
轉機出現在2016年7月,在開源社群愛好者聯盟的幫助下,團隊見到了MySQL和MariaDB的創始人Monty先生。
這是一位有傳奇色彩的程式員,他是MySQL第一行代碼的作者,已經54歲了,白發蒼蒼,依舊親自參與寫代碼,先後創立了MySQL,MaxDB和MariaDB(這三個項目分别是老爺子用自己的三個孩子名字命名的)。
在見到Monty之後,團隊抓住機會将騰訊遊戲的業務場景及定制化的兩個産品TenDB和TenDB Cluster的設計和功能特性做了詳細地闡述。“那天下午,一位業界泰鬥,認真聆聽我們給他講feature,表述不清的時候,大家在白闆上邊寫邊畫。能身處其中,我真的覺得特别幸運。”Vinchen回憶。
(圖說:DBA團隊在向Mysql之父介紹我們的feature并進行交流)
最後團隊表達回饋開源社群的願望,希望把TenDB和TenDB Cluster的部分功能特性送出給MariaDB,內建到MariaDB的主幹代碼。而這個想法也得到了Monty的大力支援,而且這些feature正是MairaDB所需要的。尤其是快速加字段特性,是整個MySQL生态都急迫需要的特性。“他對我們産品的功能表示了認可,他說我們的Idea是他們之前沒想過的。能得到創始人的認可,讓我們看到了圓夢的曙光,備受鼓舞!”Robincui說。
(當天團隊和Monty的合照)
作别Monty之後,團隊開始按照MariaDB的代碼規範,在github上送出了我們的pull request,經過各種PK和比較,團隊送出的2個pull request都得到了認可。
(Vinchen與MariaDB的Marko、Monty等讨論快速加字段的設計及實作)
2016年10月,團隊第一次參加了MariaDB的開發者大會,确定了TMySQL Replication優化的兩個特性內建到MariaDB 10.2.3的測試版本。
這是騰訊遊戲的DBA團隊第一次出現在了MariaDB的感謝名單裡!今年的10月10日,MariaDB10.3.2 Alpha版本釋出,新增了TenDB的兩個核心功能:快速加字段和大字段壓縮。這兩個功能分别解決了超級大業務加字段導緻的停機時間太長的問題,及業務大字段壓縮問題,提升DB伺服器的IO吞吐和磁盤空間使用率;這兩個功能可以應用到包括遊戲在内的其他場景中!
這個版本釋出之後,Innodb第一個全職員工、最資深的開發專家之一Marko還專門寫了一篇部落格給新增加快速加字段功能點贊:
“Perhaps one of the most important InnoDB changes coming in MariaDB Server 10.3 is Instant ADD COLUMN for InnoDB tables. ”
快速加字段功能是mariadb 10.3最重要的特性之一。
“A prototype was developed by Vin Chen from the Tencent Game DBA Team.”
這個設計是來自騰訊遊戲DBA團隊的Vinchen。
“不管是版本更新資訊的緻謝,還是Marko的認可,都是對我們團隊最大的肯定。尤其是我們使用了多年的特性,能合并到主流的MySQL分支中,對社群做貢獻,讓更多使用者受益,這才是最值得高興的事情。”Vinchen笑稱。
“自己有産出并被大量使用才是對開源社群最大的貢獻和回饋。”這一直是團隊的夢想,這句話也一直激勵了DBA團隊一路向前。隻要有利于開源和社群發展,團隊都願意嘗試。最終,騰訊互娛營運部的DBA團隊也做到了。
我們能為開源社群做點啥?DBA團隊用行動已經給出了答案。
這樣的DBA才有意思,不是麼?
更多騰訊遊戲DBA團隊對外開源進展請進入《 社群初鳴,夢想始興 – 騰訊遊戲DBA攜手MariaDB開源起航 》檢視!