受疫情影響,全國各學校的開學均被延期。為避免耽誤學生的課業(yè),教育部推出了“停課不停學”政策,鼓勵師生積極開展線上教學模式。
趕考狀元(上海億山睦教育科技有限公司)為此積極響應政府號召,向湖北全省一年級到高三的學子免費開放教材的同步在線教學課程,后來進一步擴大至全國范圍。這一公益活動獲得了很大反響,網(wǎng)站用戶注冊量和瀏覽量超過平時數(shù)倍。
雖然活動從策劃到上線總共只有4天時間,趕考網(wǎng)技術(shù)團隊通過科學決策,及時精密的實施,完成了業(yè)務代碼改造、架構(gòu)評估、擴容升級、SQL優(yōu)化等工作,期間也和UCloud UDB團隊緊密合作,在其協(xié)助下實現(xiàn)了數(shù)據(jù)庫的架構(gòu)改造和擴容,很好地承接了QPS暴漲20倍的訪問壓力,圓滿完成技術(shù)保障任務。
下面分享一些我們在此過程中的細節(jié)和思考,供有快速擴容需要的企業(yè)參考。
公司自2005年成立一直專注于K12在線教育,此次疫情公益活動構(gòu)想階段,業(yè)務側(cè)運用此前超過十年的互聯(lián)網(wǎng)及線下教育經(jīng)驗,快速設計了有效可行的方案,在不少細節(jié)上下了功夫,例如加速審核通道,只需兩步即可學習的易用性,面向家長推廣的二維碼等。
技術(shù)團隊的任務則是提前預判后臺流量的迅猛增長,未雨綢繆設計行之有效的預案,查漏補缺,切實保障活動順利流暢運行。為此我們細致梳理了現(xiàn)有架構(gòu)的薄弱點,并相應制定了精準有效的擴容方案。
由于我們原先的擴容是穩(wěn)定慢節(jié)奏的,這次預見到了大量訪問需求,首要工作是分析現(xiàn)有架構(gòu)的能力和不足。
此前業(yè)務的主應用架構(gòu)為ULB負載+雙UHost單體架構(gòu)+分布式緩存+單實例高可用UDB,用了大量UCloud的云組件。我們?nèi)媸崂砹思軜?gòu)各層模塊,對每一層的能力做了評估。ULB有扛大流量的能力,主要關注后端。UHost上是應用服務,我們測算了一個部署于8核16GB UHost上的主站模塊能夠扛住多大并發(fā)請求、應用模塊垂直擴容和平行擴容兩個方案的優(yōu)劣對比,最終決定水平擴展??紤]到外圍的單體服務接口受主應用流量的帶動,也進行了擴容承壓的調(diào)整。緩存的做法是加大分布式緩存、優(yōu)化訪問緩存。壓力最大的是數(shù)據(jù)庫,可能帶來性能上的嚴重瓶頸。
不管是MySQL、PostgreSQL還是MongoDB,我們都采用了UCloud 的 UDB 托管服務,其中包括核心數(shù)據(jù)庫。相比自建數(shù)據(jù)庫,UDB提供的高健壯高可用以及免維護的服務,可以讓我們更安心專注于上層業(yè)務邏輯的構(gòu)建上。且在數(shù)據(jù)的安全問題上,UDB提供了完善的備份和恢復機制,避免數(shù)據(jù)意外丟失。
最初我們的業(yè)務核心數(shù)據(jù)庫選用了高可用UDB部署。在業(yè)務平穩(wěn)期,從性價比角度考慮,最開始UDB實例配置不高,預估QPS最大負載在3000以內(nèi)。業(yè)務爆發(fā)前夜,首先對UDB實例做了垂直升級,大幅度提升了數(shù)據(jù)庫的內(nèi)存和磁盤配置。這個操作很快,幾乎不影響業(yè)務訪問(只在磁盤升級時有秒級訪問中斷), 實例的處理性能迅速得到提升。
但高速增長的業(yè)務,給數(shù)據(jù)庫帶來的壓力預計很快便超過單個UDB實例所能承受的極限,因此數(shù)據(jù)庫從單機升級為集群勢在必行。
我們設計方案時,獲得了UDB團隊的協(xié)助。分析業(yè)務的SQL請求后,發(fā)現(xiàn)讀寫比例在50 : 1左右,屬于典型的讀多寫少業(yè)務,于是向我們推薦了一主多從 + 讀寫分離Proxy 的數(shù)據(jù)庫集群架構(gòu)。
在該架構(gòu)下,主(高可用UDB)和從(單節(jié)點UDB)之間通過異步復制保持數(shù)據(jù)同步,業(yè)務數(shù)據(jù)庫IP改指向讀寫分離Proxy的IP,由讀寫分離Proxy識別業(yè)務SQL的讀寫類型,將寫SQL、事務讀SQL轉(zhuǎn)發(fā)到主, 普通讀SQL按比例轉(zhuǎn)發(fā)到從,轉(zhuǎn)發(fā)比例控制臺可自由配置。同時,讀寫分離Proxy幾乎100%兼容MySQL語法和協(xié)議,業(yè)務無需改造即可順暢接入。
通過該架構(gòu),似乎可完美解決讀多寫少業(yè)務對數(shù)據(jù)庫的大流量壓力問題,但實際上仍有一些至關重要的技術(shù)細節(jié)需要把握。
其中之一就是讀寫分離中間件的轉(zhuǎn)發(fā)性能問題。從理論上看,可以通過橫向添加從節(jié)點的辦法線性提升數(shù)據(jù)庫集群的讀性能,但如果底層從節(jié)點數(shù)量加上去了,讀寫分離中間件又是否會成為新的瓶頸?
我們十分重視這個問題,為此首先做了一系列的數(shù)據(jù)指標估算,包括現(xiàn)有UDB實例的性能上限、UDB在垂直升級后根據(jù)現(xiàn)有訪問模型估算性能上限、UDB升級為讀寫分離主從集群后對讀寫請求的處理性能和從節(jié)點數(shù)量的關系等。
第二步則是和UDB團隊配合做了讀寫分離Proxy的壓測。
上述壓測實驗采用Sysbench程序,在兩臺物理機上模擬了底層UDB節(jié)點從1主線性增長到1主6從的情況下,整個讀寫分離集群的讀處理性能。從結(jié)果可以看出,得益于讀寫分離Proxy對多核CPU的充分利用,以及代碼層面的多個性能調(diào)優(yōu), 讀寫分離Proxy具備可靠的轉(zhuǎn)發(fā)性能,不構(gòu)成集群的性能瓶頸。從而保證集群的讀性能,能夠隨著從節(jié)點的線性增長,呈現(xiàn)幾乎完美的線性增長。
實測數(shù)據(jù)令人放心,UDB團隊繼而幫助制定了整套UDB擴容計劃,我們的業(yè)務代碼也相應做了調(diào)整,整個方案可以在網(wǎng)站用戶幾乎零感知的情況下實施。此后,我們后端服務的擴容有條不紊地開始,每天凌晨在業(yè)務低谷時執(zhí)行擴容,先擴容主站應用集群,將數(shù)據(jù)庫升級到讀寫分離集群,然后逐層向外擴容外圍單體服務,整個擴容工作設計合理,快馬加鞭實施到位。
公益項目開始后,2月1號到2月10號短短10天內(nèi),趕考狀元平均日注冊用戶量由0.83萬上升到3萬,最大單日注冊用戶達5.8萬。平穩(wěn)承壓了單日20萬用戶的web/App訪問,順利地為全國各地區(qū)超過100萬學生免費贈送了在線微課學習、題庫練習、作業(yè)組等線上服務,為停課不停學“添磚加瓦”,貢獻了優(yōu)質(zhì)的公益教育資源。
在此期間,我們業(yè)務數(shù)據(jù)庫的吞吐量(QPS)暴漲了近20倍,目前線上讀寫分離Proxy單實例最高QPS已達到20萬以上,升級到讀寫分離集群后,通過1主6從加2節(jié)點雙活讀寫分離Proxy的集群配置,平穩(wěn)扛住了業(yè)務流量的高速增長。我們的技術(shù)架構(gòu),也成長為一個具有相當規(guī)模的中型互聯(lián)網(wǎng)服務。
在渡過2月10號這個線上開學高峰后,業(yè)務依然在高速發(fā)展,雖然主從讀寫分離集群在應對業(yè)務高QPS訪問上不成問題,但隨著業(yè)務模塊的增多,在2月12號上午高峰期業(yè)務向數(shù)據(jù)庫發(fā)起的連接數(shù),已經(jīng)達到高可用版UDB產(chǎn)品6000的上限。
為了從根本上解決這個問題,UDB研發(fā)團隊建議,將高可用UDB的后臺架構(gòu),從傳統(tǒng)的VIP+代理+DB 的架構(gòu)升級為其最新開發(fā)的漂移 VIP+DB 雙主新架構(gòu)。為此他們連夜制定了透明升級的方案,能夠不遷數(shù)據(jù)在2分鐘內(nèi)從舊架構(gòu)原地升級為新架構(gòu),獲得我們認可并在凌晨實施,確保第二天業(yè)務的正常運行。
新的高可用UDB架構(gòu),利用穩(wěn)定的UCloud虛擬網(wǎng)絡VIP管理服務,將架構(gòu)簡化為更樸素的漂移 VIP+DB 雙主的實現(xiàn),在數(shù)據(jù)鏈路上減少一次轉(zhuǎn)發(fā),消除一個潛在性能瓶頸,并且簡化控制模塊,減少不可控因素。同時新架構(gòu)對數(shù)據(jù)庫(MySQL 和 PG)原生的兼容度更高。
提前規(guī)劃和快速擴容,給了我們更多的余裕,能去快速應對和解決大流量突發(fā)時暴露的其它隱藏問題,最典型的例子是數(shù)據(jù)庫慢查詢。
我們后臺代碼采用了ORM框架連接MySQL,由于ORM層屏蔽了底層MySQL庫表的細節(jié),小部分訪問MySQL的代碼沒有考慮到底層MySQL的執(zhí)行邏輯,存在慢查詢過多的問題。慢查詢的問題,在平時小流量慢增長的情況下影響并不明顯,但是疫情期間大流量壓力下就變得不容忽視。
UCloud DBA團隊期間提供了諸多幫助,他們在慢查詢問題的定位和解決上有豐富的經(jīng)驗。疫情期間,他們克服在家辦公干擾多,遠程溝通不便等不利因素,通過微信、遠程會議等方法隨時和我們保持聯(lián)系,結(jié)合我們對業(yè)務邏輯的理解,協(xié)同定位問題,一起梳理了業(yè)務近半年所有新增數(shù)據(jù)庫表并增加索引,最終慢查詢的問題得到有效解決。
【留言互動】面對各種突發(fā)緊急的業(yè)務擴容需求
你有什么想法和故事?
歡迎文章底部留言,點贊數(shù)排第一即可獲得技術(shù)書籍
《計算機程序的構(gòu)造與解釋》一本,截止時間3月19日18:00