120萬人同時在線考試,10分鐘內即出分,這麼大的流量如何支撐?


二月中下旬原本是全國各地春季學期開學的日子,但這場突如其來的疫情使得1.8億中小學生只能紛紛在家開啟“停課不停學”的學習生活,而線上教育也順勢成為了這一特殊時期首選的學習方式。

但突如其來的流量洪峰,卻讓許多線上教育平臺力不從心。開學第一天,包括學習通、慕課網等在內的多家在線教育平臺都出現了“卡頓”和“死機”的情況,“學習通崩了”這一詞條一度登上了微博熱搜。


120萬人同時在線考試,10分鐘內即出分,這麼大的流量如何支撐?

120萬人同時在線考試,10分鐘內即出分,這麼大的流量如何支撐?

與此同時,阿里雲教育領域客戶的擴容需求也在飛速增長,其中數據庫擴容需求更是十分強烈,阿里雲數據庫通過分鐘級擴容,保障了滬江教育、猿輔導、VIPKID、洋蔥學院等多家教育平臺的平穩,為學生們構建起了線上戰“疫”的防火牆。

猿輔導是國內知名在線教育機構,旗下有猿輔導、猿題庫、小猿搜題、小猿口算、斑馬英語五款核心在線教育APP,為學生和家長提供在線輔導、拍照答疑、智能題庫、自動批改等相關的智能教育服務。

作為K-12在線教育領域的首個獨角獸公司,猿輔導在疫情期間非但沒有出現卡頓、延遲等問題,反而發起了一場120萬學生同時在線的英語模擬考試,系統10分鐘內直接出分,並生成智能診斷分析報告

“為了提升百萬人的答題體驗,猿輔導對使用的阿里雲Polar DB雲數據庫進行了臨時彈性擴容。”猿輔導運維負責人張文治說,他們評估過很多數據庫產品,Polar DB性能好,能夠通過快速擴容為用戶體驗提供支持與保障。

01、延時、卡頓、高成本,自建方案打不贏這場仗

在線教育行業面臨著海量的題庫、音視頻答題資料、用戶數據以及日誌等巨大的數據存儲需求,這些都對猿輔導後臺數據存儲和處理能力都提出了嚴峻的要求。

猿輔導之前採用的是自建數據庫的解決方案,在週末或者在線模考的時候,同時在線人數會瞬間激增,原本的自建數據庫方案難以應對這樣的訪問峰值,導致大約三分之一的學生無法正常進入在線考試。而答題的延時也從正常情況下的1秒之內增長到平均5秒,使得學生用戶的答題體驗急劇下降。

與此同時,猿輔導的用戶量每年飛速增長,自建MySQL數據庫的CPU利用率已經達到了70%以上。此外,猿輔導的DBA原本由運維人員兼職,但是面對這樣紛繁複雜的數據庫管理任務,兼職DBA力不從心,而招聘專職DBA卻預計會需要每年至少100萬的成本。總之,自建數據庫方案難以應對訪問峰值,難以滿足業務高速發展的需求,並且難以管理,且會增大人力成本等問題,這些都是擺在高速發展的猿輔導面前的巨大挑戰。

02、技術戰“疫”,PolarDB助力猿輔導應對業務高峰

面對上述的諸多挑戰,猿輔導基於阿里雲PolarDB實現了新的數據庫解決方案。猿輔導之所以選用阿里雲PolarDB數據庫,除了PolarDB數據庫具有較高的性能,並且能夠與MySQL實現100%兼容之外,更加看重PolarDB的彈性伸縮能力和容量最高可達100T的能力。


l PolarDB分鐘級彈性能力輕鬆應對各種業務場景

因為猿輔導的業務特點,用戶訪問量在平時可以輕鬆應對,但是在週末以及考試期間達到業務訪問的高峰,因此應對數據庫問題的主要難點在於用戶的高併發訪問所造成的讀寫爭用,進而使得I/O較高,而如果一直購買高配置的MySQL數據庫,成本難以接受。而猿輔導通過使用阿里雲PolarDB,藉助其快速彈性的能力,在業務的高峰期臨時增加數據庫配置和集群規模,與之前的方案相比整體成本大大降低。

120萬人同時在線考試,10分鐘內即出分,這麼大的流量如何支撐?


對於猿輔導這樣具有明顯業務峰值特徵的產品而言,最為看重的就是PolarDB的分鐘級彈性能力。而在其強大的彈性能力的背後其實是PolarDB存儲與計算分離設計。所謂分離就是計算節點(DB Engine)和存儲節點(DB Store)在不同的物理服務器上,任何落地到存儲設備的I/O操作均為網絡I/O。而且,藉助PolarFS經過網絡訪問PolarStore的測試性能效果基本能夠與本地單副本SSD持平。而PolarDB的存儲與計算分離的架構,除了可以降低存儲成本,保證主備數據強一致、不丟數據之外,還帶來了一個巨大的優勢,就是讓數據庫的彈性伸縮變得極為簡單、便捷。


120萬人同時在線考試,10分鐘內即出分,這麼大的流量如何支撐?

阿里雲PolarDB分層架構圖


正如上圖所示,PolarDB採用了分層架構,從上層的代理PolarProxy提供了讀寫分離、SQL加速等功能,到中間的數據庫引擎節點PolarDB構造了一寫多讀的數據庫集群,再到底層的分佈式存儲PolarStore為上層提供多節點掛載的數據共享,每一層各司其職,共同構建了PolarDB雲數據庫集群。

從PolarDB產品定義上看,用戶購買的節點數和規格大小(比如4核16G)指的是中間這一層PolarDB的配置,上層PolarProxy可以根據PolarDB的配置自適應調整,用戶不需購買也不用關心性能和容量。底層PolarStore的容量是自動擴容,只須按照實際使用容量付費。

通常意義的擴展性,一般有縱向(Scale up)和橫向(Scale out)和兩種方式,縱向是指提升配置,橫向是指配置不變,但增加節點。對於數據庫來說,都是先縱向,比如4核不夠升到8核。但終歸會遇到瓶頸,一方面性能提升非線性,跟數據庫引擎自身的設計和應用訪問模型有關(比如MySQL的多線程設計,如果只有一個session,那麼很難體現出多核的優勢),另一方面,計算物理服務器配置有上限,存在天花板。因此終極手段還是橫向擴展,增加節點數。


120萬人同時在線考試,10分鐘內即出分,這麼大的流量如何支撐?

阿里雲控制檯PolarDB升降配操作示意圖


l PolarDB的底層技術實現

對於PolarDB而言,其彈性能力可以概括為“橫向最多可以到16個節點,縱向最高可到88核,並且存儲容量動態擴展,毋須配置”。那麼,在這樣強大的彈性能力的背後,PolarDB的底層技術究竟是怎樣實現的呢?接下來就從縱向、橫向兩個方面介紹。

縱向擴展(升級/降級配置):得益於存儲與計算分離,PolarDB數據庫節點的配置可以單獨升級或降級,如果當前服務器資源不足,還可以快速地遷移到其他服務器,整個過程目前只需要5-10分鐘,中間不需要任何的數據搬遷,只是如果涉及到跨機遷移,未來還可以通過PolarProxy消除升級對業務應用的影響。

因為目前同一集群內的所有節點必須綁定升級,因此PolarDB採用了Rolling Upgrade滾動升級的方式,通過控制升級的節奏、搭配主備切換來進一步減少不可用時間。 同時目前PolarDB新版本將會支持warm buffer pool 功能, 也就是說升級以後, 不需要重新加載buffer pool 的數據, 避免升級重啟導致的性能抖動, 是整個升配流程更加的順滑.橫向擴展(增/減節點):由於存儲是共享的,因此可以快速增加節點,而不需要任何的數據COPY。整個過程也只需要5-10分鐘,如果是增加節點,對業務應用沒有任何影響,如果是減少節點,那麼僅對落到該節點執行的連接有影響,重新連接即可。目前在Polar DB 新版本支持warm buffer pool 功能後, 新加入的節點能夠迅速提供跟老節點一樣的性能, 無需從存儲中讀取數據就可以有用戶最常用的page 的內容, 可以提供更順滑的體驗. 當增加節點之後,PolarProxy可以動態感知並自動加入到讀寫分離後端的讀節點中,對於使用集群訪問地址(讀寫分離地址)連接PolarDB的應用程序可以立馬享受到更好的性能和吞吐。在猿輔導的應用場景中, 答題場景類似於雙十一的搶購場景, 老師發佈題目, 這個時候, 所有的學生需要同時對一個數據庫進行修改. 通過PolarDB 的秒殺場景plugin, 能夠增強PolarDB 在大壓力情況下的併發能力, 有效解決了突增場景帶來寫入壓力.

03、小結

猿輔導將數據庫遷移到阿里雲PolarDB之後,在業務平峰的時候,能夠同時支撐大體量學生在線進行課程學習,並且業務根本不會感覺到壓力。而當應對業務高峰的時候,只需要提前一小時進行準備,就能夠將業務能力臨時提升至足以應對100萬學生併發訪問的等級。

而且,由於PolarDB數據庫資源可以按需彈性伸縮,因此在猿輔導從MySQL遷移到PolarDB之後節省了5個只讀庫的容量,節省了近70%的數據庫費用支出。此外,在線數據庫維護工作量能夠降低95%,無需資深的專業DBA坐鎮,因此大大降低了數據庫維護的人力成本。最後,如果從業務維度來看,猿輔導在遷移到PolarDB之後,大大提升了用戶體驗。

疫情以來,阿里雲通過支撐釘釘、優酷、國家中小學網絡雲平臺以及各類社會化教學機構,服務全國近1.8億中小學生在家上課,成為最大的在線教育類技術服務平臺。


分享到:


相關文章: