天天看點

【雙11背後的技術】永不停止的腳步——資料庫優化之路

本文作者:佳毅

前言

2016年雙11已經順利落下帷幕,在千億電商流量的沖擊下,集團資料庫整體表現完美。完美表現的背後,隐藏着資料庫團隊對技術的執着追求。這是一個什麼樣的團隊,他們究竟做了什麼,是什麼支援着雙11這一全民狂歡的數字一次次突破?筆者以一個親曆者的角度來給大家揭開雙11背後,阿裡巴巴資料庫團隊的神秘面紗。 

我們是阿裡巴巴集團基礎架構事業群-資料庫技術團隊,我們團隊維護着阿裡巴巴集團、螞蟻金服、菜鳥網絡所有的資料庫,是整個大阿裡系,堅強的存儲中台。

我們是阿裡巴巴集團神秘的mysql分支——alisql的開發者,傳說中的alisql擁有者遠超原生mysql的性能,并且有着為阿裡巴巴電商、金融業務場景量身定制的優化。

我們為整個阿裡巴巴集團的異地多活提供底層基礎架構——drc。drc提供超遠距離(中美超過10,000公裡),超低延時(中美同步延時小于500ms)的資料庫同步訂閱服務。

我們緻力于将阿裡巴巴的優秀技術和沉澱,通過雲産品的形式提供給廣大公有雲的使用者,如dts——資料傳輸,dms——資料管理,clouddba——使用者身邊的資料庫專家。

在2014年雙11時,交易的alisql秒級查詢量已經到了一個天量。雖然當天交易系統一切平穩,但交易的資料庫負責人深知這數字背後隐藏的風險。

為了保障交易系統下一年的穩定,資料庫團隊在2015年花了大量的時間,深入了解業務特點,分析每一次查詢sql,最終産出在優化器中注入pk_access的優化方案。

【雙11背後的技術】永不停止的腳步——資料庫優化之路

當2015年雙11來臨時,交易的秒級查詢量再次達到一個峰值,這一切都在掌握之中。pk_access優化方案讓交易庫的查詢能力提升了27%,rt下降48%。

光鮮資料的背後,不隻是一個資料庫優化方案的結果,更多的是交易業務系統一堆人花了大量的時間梳理接口并确定流控門檻值的結果。這裡有這麼一個資料,2015年交易系統的對外限流預案一共有125個。回想起交易同學的一句話,“如果明年還需要這樣,我肯定瘋了”。業務同學的話讓我們反思,系統能力的提升 不能建立在業務缺失的基礎上。

再次回到pk_access的方案,交易的查詢在目前的條件下,已經做到了最優,server層的sql_parse是瓶頸點,但是在sql的方式下,沒有辦法提高更多了。那麼能不能将sql_parse也省掉呢?這個時候我們想到了被人遺忘的mysql插件,innodb memcached plugin。

【雙11背後的技術】永不停止的腳步——資料庫優化之路

由于插件本身的使用場景偏少,且自身的功能缺失,一直并未廣泛使用。換句話說,這是一塊未被開發的沃土。從原理上證明這是一個有效方案之後,資料庫團隊馬上集中精力,說幹就幹。最終修複bug 15個,新功能開發6個,才滿足了交易的基本查詢。測試中發現,在完整交易場景下,memcached plugin和sql的對比結果來看,memcached plugin qps可以達到42萬,sql才能達到12萬,qps提升了接近4倍。在單sql場景下,交易單條查詢接口的rt下降約30%。在相同流量的引流測試中,通過memcached plugin查詢,應用load 4.8,cpu 45%;通過sql查詢,應用load 13,cpu 72%。通過各個次元的比較,memcached plugin帶來的收益遠遠超出每個人的預期。

就在剛剛落幕的2016年雙11,交易系統秒級查詢量突破千萬,再次重新整理秒級查詢量,也是資料庫團隊第一個秒級破千萬的系統。這一次的增長可謂是“爆炸式”的。

從今年交易資料庫運作情況來看:

資料庫不擴容,整體壓力翻翻,并且仍有一定的餘量。

業務降級預案大幅減少,做到對業務無損。

交易應用伺服器擴容大幅減少。業務通路資料庫從sql接口切換到memcached接口之後,還帶來的一個顯著優化就是應用伺服器的cpu開銷大幅降低,這也導緻最終需要擴容的應用伺服器數量大幅減少。

熱點庫存,相信無論是有多年雙11備戰經驗的技術同學,還是資深的剁手黨,對這個名詞都不會感到陌生。因為每年雙11,總有那麼些爆款商品特别熱銷,大家的搶購熱情異常高漲,這幾年雙11,小米/華為手機、優衣庫衣服等,都曾經加入過這個熱點商品的家族之中。其實,熱點商品是一直存在的,但是熱點商品帶來的問題,我們是2012年底2013年初才真正意識到的。

從那時起,2013、2014、2015、2016,每一年我們在alisql核心層面針對此問題都有優化,優化單key(單商品)的秒級扣減能力。但是,隻有今年,我們将此問題做到了技術上的極緻,未來可以預見的幾年内,庫存熱點問題,将從雙11備戰中消失。

2013年,2014年和2015年,庫存中心随着alisql版本更新和硬體更新,輕輕松松渡過了雙11的技術大考,alisql的單行扣減能力,從原生mysql的每秒500筆,提升到了2015年的每秒5000筆。

輕松并不等于放松,阿裡人絕對不會滿足現狀,如何才能繼續提升單行扣減性能?答案是批處理!我們認真思考了2013年做的優化,它們都有一個共同點,就是在串行的基礎上進行的,而且已經做到極緻。于是我們想到了是否可以通過批處理來提高吞吐。2016年經過半年的閉關開發測試,“史詩級怪獸”更新檔hotspot橫空出世;

【雙11背後的技術】永不停止的腳步——資料庫優化之路

通過添加兩條流水線輪流送出,并且使用group commit,在雙11來臨之前的一次測試,我們成功的将單行熱點扣減能力提升到了10萬,有20倍以上的提升,并且可實作自動的熱點識别,不影響非熱點商品的正常扣減。在跟庫存應用完成對接之後,幾次全鍊路壓測,alisql的熱點處理能力甚至遠高于下遊的處理能力。

2016年雙11,資料庫使用新版本的更新檔平穩運作。按照雙11實際的表現來看,未來幾年内,庫存熱點問題将徹底告别雙11的曆史舞台。

資料庫最重要的是資料和sql,資料表示結果,sql表示過程,兩者缺一不可。

在2011年初,資料庫第一代監控體系tianji成型,其中包含了基于定量收集網絡包的sql采集工具myawr,标志着第一代資料庫sql采集體系正式形成。這種方式是通過tcpdump抓取1萬個網絡包,然後将抓取到的網絡包解析成sql語句,最後算出機關時間内的sql數,反推出某時間段内的整體sql情況,用公式表達為:

每分鐘sql數 = 每萬個網絡包的sql數 * 60秒 / 每萬個網絡包的耗時

這種方式存在一個非常大的弊端,就是準确度的問題。but better than nothing。這種方式一直持續到2013年。

2014年至2015年,資料庫團隊自研mysql插件dam(database activity monitor),用于記錄資料庫的執行事件,從安全方面來對資料庫異常活動進行監測和審計。但後面由于資源和使用的問題,dam項目失敗,繼續沿用着myawr。

2016年,倔強的我們再次提出全量sql采集的目标,并且要求雙11當天也能采集,采集内容不僅隻是sql文本,還需要了每一條sql的運作時間、掃描行數等關鍵資訊。換句話描述,就是要求資料庫以info級别列印資料庫日志。這是一次史無前例的挑戰。設想一下,當一個資料庫在1萬/秒的請求壓力下,還要1萬/秒的輸出日志,這無論對磁盤和資料庫本身都是非常苛刻的要求。

這一次團隊内高度合作,有團隊保證高性能的全量sql輸出,有團隊保證高效的全量采集,有團隊保證海量存儲,有團隊保證精準分析和使用。最終完成了第二代全量sql采集系統。

【雙11背後的技術】永不停止的腳步——資料庫優化之路

在odps上,我們可以進行全面的sql分析計算,如10分鐘内有多少使用者連續下單等問題。在alirocks上,我們可以精準的給出sql直方圖,如top sql問題。

2016年雙11當天,我們打開了集團交易核心叢集的全量sql采集功能。當天全量sql輸出對資料庫僅有5%不到的影響,并且實時計算峰值處理速度為每秒千萬級别,平均處理速度每秒百萬級别,全天實時性能計算延遲平均在100ms以下。 全量sql流水目前都存入sls/odps中,實時性能計算資料存儲在alirocks中。這是我們第一次真正擷取到了雙11 100%的sql資訊,為今後留下了一筆寶貴的财富。

今天,基于全量采集的sql資訊,我們的clouddba不僅将全部sql流水存儲做離線分析,雙11當天我們還通過實時計算分析出sql實時性能資料。有了這些基礎資料隻是開始,後面我們會基于這些基礎資料借助資料挖掘和機器學習等手段,幫助使用者更多元度地了解業務資料趨勢,提供主動的異常發現/診斷,資源預估等更豐富的資料庫服務。 幫助使用者不僅能夠通過clouddba自助地診斷和優化自己的資料庫,還能夠通過clouddba更好地了解業務如何使用資料庫以及如何用好資料庫。

【雙11背後的技術】永不停止的腳步——資料庫優化之路

同樣在雙11負責傳輸海量資料的中台另一重要基礎設施,就是drc(data replication center)。drc負責解析增量資料庫日志,分發給大資料、搜尋和應用,同時負責異地多活資料同步。随着實時資料計算業務的增長,drc任務數增長迅速,今年drc叢集架構做了重大突破,能夠單叢集支撐數萬個資料同步程序,對外自動化接入api響應時間減半,通過akka架構使得叢集容災速度得到極大提升,通過合并一個region(地區)的叢集和自動負載均衡降低整體營運成本,以更低的成本和更高的穩定性支撐了更大的雙11峰值壓力。

在性能上,drc解析核心做了很大的技術優化,同時在同步鍊路上通過bucket沖突算法優化和熱點合并技術提升了峰值同步能力,在分發鍊路通過連接配接池化技術,使得單個解析存儲程序可以同時分發給上千個下遊使用者,對業務快速接入和低成本共享資料通道的能力打下堅實的基礎。drc支撐了異地多活下,多個異地機房間的資料亞秒級同步,在雙11這樣的峰值壓力下,依然保障了500ms以内的資料庫端到端同步延時。

2016年drc除了在性能和規模支撐能力得到提升,我們還在資料品質上精益求精,今年drc全面開啟了行校驗做資料同步,支援資料加密傳輸。對于上遊資料源的變化做到了自動化關聯,包括資料庫的遷移和拆分,使得訂閱實時資料的下遊業務完全無需感覺。drc在隊列存儲上開放了完整的sql查詢能力,使得下遊使用者可以通過sql很快查到1條記錄,在drc通道裡是否存在,快速定位資料品質問題。同時這個能力支援了部分使用者做資料對賬和靈活輕量的增量報表,拓展了drc的服務能力。可以預見,drc在未來将給業務帶來更多超越預期的價值。

 總結

以上幾個例子僅僅隻是阿裡巴巴資料庫團隊在今年雙11中衆多優化中的幾個,同樣還有很多優秀的内容無法一一為大家道來。正如開篇提到的一樣,資料庫團隊是一個有追求的團隊,面對技術,我們追求極緻,面對未知,我們勇于挑戰。

2016年雙11已經過去,但是資料庫團隊已經放下了過去取得種種成績,準備重新出發了,2017年,alisql5.7、alisql x-cluster (基于三副本paxos/raft協定的alisql)、alirocks (基于rocksdb存儲引擎的alisql分支)、ceph on alisql(存儲計算分離)、dbpaas,clouddba等等每一件事都已經在路上,而且樣樣極具挑戰。

海到無邊天作岸,山登絕頂我為峰,如果正在閱讀的你熱衷新事物,追求極緻,敢于挑戰,那麼就不要猶豫,趕快加入我們。