海量的題庫、音視訊答題資料、使用者資料以及日誌,對猿輔導後臺資料儲存和處理能力都提出了嚴峻的要求。而由於教育輔導行業的業務特點,猿輔導也面臨著業務峰值對於資料庫能力的巨大挑戰。本文就為大家介紹阿里雲POLARDB如何幫助猿輔導打造“孩子喜歡老師好”的網課平臺。
猿輔導業務背景
猿輔導是國內知名線上教育機構,旗下有猿輔導、猿題庫、小猿搜題、小猿口算、斑馬英語五款核心線上教育APP,為學生和家長提供線上輔導、拍照答疑、智慧題庫、自動批改等相關的智慧教育服務。猿輔導擁有百億級的K-12學習行為資料庫,並率先將AI、大資料等前沿技術應用於教育場景。
猿輔導自建資料庫方案所面對的挑戰
猿輔導之前採用的是自建資料庫的解決方案,但是因為自身業務特點,在週末或者線上模考的時候,同時線上人數會瞬間激增,而原本的自建資料庫方案難以應對這樣的訪問峰值,因此會有大約三分之一的學生無法正常進入線上考試。而答題的延時也從正常情況下的1秒之內增長到平均5秒,使得學生使用者的答題體驗急劇下降。與此同時,猿輔導的使用者量每年飛速增長,自建MySQL資料庫的CPU利用率已經達到了70%以上。此外,猿輔導的DBA原本由運維人員兼職,但是面對這樣紛繁複雜的資料庫管理任務,兼職DBA力不從心,而招聘專職DBA卻預計會需要每年至少100萬的成本。總之,自建資料庫方案難以應對訪問峰值,難以滿足業務高速發展的需求,並且難以管理,且會增大人力成本等問題,這些都是擺在高速發展的猿輔導面前的巨大挑戰。
猿輔導基於POLARDB資料庫解決方案
面對上述的諸多挑戰,猿輔導基於阿里雲POLARDB實現了新的資料庫解決方案。猿輔導之所以選用阿里雲POLARDB資料庫,除了POLARDB資料庫具有較高的效能,並且能夠MySQL實現100%相容之外,更加看重POLARDB的彈性伸縮能力和容量最高可達100T的能力。因為猿輔導的業務特點,使用者訪問量在平時可以輕鬆應對,但是在週末以及考試期間達到業務訪問的高峰,因此應對資料庫問題的主要難點在於使用者的高併發訪問所造成的讀寫爭用,進而使得I/O較高,而如果一直購買高配置的MySQL資料庫,成本難以接受。而猿輔導通過使用阿里雲POLARDB,藉助其快速彈性的能力,在業務的高峰期臨時增加資料庫配置和叢集規模,與之前的方案相比整體成本大大降低。
猿輔導基於阿里雲POLARDB分鐘級彈性資料庫叢集
對於猿輔導這樣具有明顯業務峰值特徵的產品而言,最為看重的就是POLARDB的分鐘級彈效能力。而在其強大的彈效能力的背後其實是POLARDB儲存與計算分離設計。所謂分離就是計算節點(DB Engine)和儲存節點(DB Store)在不同的物理伺服器上,任何落地到儲存裝置的I/O操作均為網路I/O。而且,藉助PolarFS經過網路訪問PolarStore的測試效能效果基本能夠與本地單副本SSD持平。而POLARDB的儲存與計算分離的架構,除了可以降低儲存成本,保證主備資料強一致、不丟資料之外,還帶來了一個巨大的優勢,就是讓資料庫的彈性伸縮變得極為簡單、便捷。
阿里雲POLARDB分層架構圖正如上圖所示,POLARDB採用了分層架構,從上層的代理PolarProxy提供了讀寫分離、SQL加速等功能,到中間的資料庫引擎節點POLARDB構造了一寫多讀的資料庫叢集,再到底層的分散式儲存PolarStore為上層提供多節點掛載的資料共享,每一層各司其職,共同構建了POLARDB雲資料庫叢集。
從POLARDB產品定義上看,使用者購買的節點數和規格大小(比如4核16G)指的是中間這一層POLARDB的配置,上層PolarProxy可以根據POLARDB的配置自適應調整,使用者不需購買也不用關心效能和容量。底層PolarStore的容量是自動擴容,只須按照實際使用容量付費。
通常意義的擴充套件性,一般有縱向(Scale up)和橫向(Scale out)和兩種方式,縱向是指提升配置,橫向是指配置不變,但增加節點。對於資料庫來說,都是先縱向,比如4核不夠升到8核。但終歸會遇到瓶頸,一方面效能提升非線性,跟資料庫引擎自身的設計和應用訪問模型有關(比如MySQL的多執行緒設計,如果只有一個session,那麼很難體現出多核的優勢),另一方面,計算物理伺服器配置有上限,存在天花板。因此終極手段還是橫向擴充套件,增加節點數。
阿里雲控制檯POLARDB升降配操作示意圖對於POLARDB而言,其彈效能力可以概括為“橫向最多可以到16個節點,縱向最高可到88核,並且儲存容量動態擴充套件,毋須配置”。那麼,在這樣強大的彈效能力的背後,POLARDB的底層技術究竟是怎樣實現的呢?接下來就從縱向、橫向和儲存三個方面介紹。
縱向擴充套件(升級/降級配置):得益於儲存與計算分離,POLARDB資料庫節點的配置可以單獨升級或降級,如果當前伺服器資源不足,還可以快速地遷移到其他伺服器,整個過程目前只需要5-10分鐘,中間不需要任何的資料搬遷,只是如果涉及到跨機遷移,未來還可以通過PolarProxy消除升級對業務應用的影響。因為目前同一叢集內的所有節點必須繫結升級,因此POLARDB採用了Rolling Upgrade滾動升級的方式,通過控制升級的節奏、搭配主備切換來進一步減少不可用時間。
橫向擴充套件(增/減節點):由於儲存是共享的,因此可以快速增加節點,而不需要任何的資料COPY。整個過程也只需要5-10分鐘,如果是增加節點,對業務應用沒有任何影響,如果是減少節點,那麼僅對落到該節點執行的連線有影響,重新連線即可。當增加節點之後,PolarProxy可以動態感知並自動加入到讀寫分離後端的讀節點中,對於使用叢集訪問地址(讀寫分離地址)連線POLARDB的應用程式可以立馬享受到更好的效能和吞吐。
毋須管理的儲存空間:POLARDB的儲存空間不需要關心,按量付費,每小時自動結算。在目前的設計中,I/O能力與資料庫節點的規格有關,規格越大,IOPS和I/O吞吐量越高,在節點上對I/O有隔離和限制,能夠避免多個資料庫叢集之間的I/O爭搶。本質上,資料是被儲存在由大量伺服器構成的儲存池中,由於可靠性要求,每個資料塊複製出3個副本,儲存在不同機架的不同伺服器上。而儲存池能夠進行自我管理,動態擴容、平衡,避免儲存碎片和資料熱點。
使用POLARDB為猿輔導帶來的收益
猿輔導將資料庫遷移到阿里雲POLARDB之後,在業務平峰的時候,能夠同時支撐大體量學生線上進行課程學習,並且業務根本不會感覺到壓力。而當應對業務高峰的時候,只需要提前一小時進行準備,就能夠將業務能力臨時提升至足以應對100萬學生併發訪問的等級。而且,由於POLARDB資料庫資源可以按需彈性伸縮,因此在猿輔導從MySQL遷移到POLARDB之後節省了5個只讀庫的容量,節省了近70%的資料庫費用支出。此外,線上資料庫維護工作量能夠降低95%,無需資深的專業DBA坐鎮,因此大大降低了資料庫維護的人力成本。最後,如果從業務維度來看,猿輔導在遷移到POLARDB之後,大大提升了使用者體驗。