云原生数据库POLARDB专场“硬核”解析
POLARDB是阿里巴巴自主研發(fā)的云原生關(guān)系型數(shù)據(jù)庫(kù),目前兼容三種數(shù)據(jù)庫(kù)引擎:MySQL、PostgreSQL、Oracle。POLARDB的計(jì)算能力最高可擴(kuò)展至1000核以上,存儲(chǔ)容量可達(dá)100TB。?
POLARDB融合了商業(yè)數(shù)據(jù)庫(kù)穩(wěn)定、可靠、高性能的特征,同時(shí)具有開源數(shù)據(jù)庫(kù)簡(jiǎn)單、可擴(kuò)展、高速迭代的優(yōu)勢(shì),適合各個(gè)行業(yè)公司的創(chuàng)新業(yè)務(wù)使用。本專場(chǎng)中,來自阿里云、江娛互動(dòng)以及猿輔導(dǎo)的各位技術(shù)大咖一起共同探討了下一代云原生數(shù)據(jù)庫(kù)POLARDB。
1、云原生數(shù)據(jù)庫(kù)的演進(jìn)方向和客戶價(jià)值
阿里云智能數(shù)據(jù)庫(kù)總經(jīng)理曹偉為大家介紹了云原生數(shù)據(jù)庫(kù)的演進(jìn)方向以及阿里云POLARDB數(shù)據(jù)庫(kù)的產(chǎn)品能力。
阿里云RDS和POLARDB都屬于OLTP的關(guān)系性數(shù)據(jù)庫(kù),那就讓我們先看下全球關(guān)系型數(shù)據(jù)庫(kù)的市場(chǎng)情況。
如今,關(guān)系型數(shù)據(jù)庫(kù)依舊是“老大哥”,但是過去的十年中關(guān)系型數(shù)據(jù)庫(kù)領(lǐng)域也發(fā)生了一些微妙的變化。伴隨著開源運(yùn)動(dòng)的興起和MySQL、PostgreSQL等數(shù)據(jù)庫(kù)的出現(xiàn),很多用戶開始在生產(chǎn)系統(tǒng)中大量使用開源數(shù)據(jù)庫(kù),因此商業(yè)數(shù)據(jù)庫(kù)的市場(chǎng)受到了一定的擠壓。
開源數(shù)據(jù)庫(kù)的出現(xiàn)影響了整個(gè)數(shù)據(jù)庫(kù)市場(chǎng)的格局和版圖,也為阿里巴巴在數(shù)據(jù)庫(kù)市場(chǎng)提供了一個(gè)重大的機(jī)會(huì)。經(jīng)過十年的時(shí)間,阿里云數(shù)據(jù)庫(kù)做到了“全國(guó)第一,全球領(lǐng)先”。當(dāng)然,影響數(shù)據(jù)庫(kù)格局的重要因素除了開源之外,還有云計(jì)算的興起。
在云時(shí)代,數(shù)據(jù)庫(kù)的演化經(jīng)歷了從采購(gòu)License自建到云上托管數(shù)據(jù)庫(kù)再到云原生數(shù)據(jù)庫(kù)的轉(zhuǎn)變。過去云是云,數(shù)據(jù)庫(kù)是數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)只是部署在云上。但在云原生時(shí)代,數(shù)據(jù)庫(kù)和云是合二為一的,云就是數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)就是云。
云原生數(shù)據(jù)庫(kù)具有以下的幾個(gè)發(fā)展趨勢(shì):
彈性:彈性不僅僅是規(guī)格的彈性,而是未來CPU、容量等計(jì)算資源都可以按量付費(fèi)。?
HTAP:之前TP和AP是分開處理的,TP使用關(guān)系型數(shù)據(jù)庫(kù),而AP使用大數(shù)據(jù)存儲(chǔ)。未來則會(huì)融合兩者,提供一個(gè)入口跑事務(wù),一個(gè)入口跑報(bào)表和BI。?
智能:智能讓數(shù)據(jù)庫(kù)更加實(shí)用,未來數(shù)據(jù)庫(kù)的磁盤備份、內(nèi)存調(diào)度等都不需要DBA來操作,而是全部由數(shù)據(jù)庫(kù)自己來完成。此外,數(shù)據(jù)庫(kù)還能夠自動(dòng)完成診斷和修復(fù)。?
混合云:因?yàn)橐恍┖弦?guī)的要求,并不是所有數(shù)據(jù)都能跑在云上,因此還需要使用這種云上云下互聯(lián)的生態(tài)。
云原生數(shù)據(jù)庫(kù)已經(jīng)成為了一種趨勢(shì),智能和混合負(fù)載成為了用戶使用數(shù)據(jù)庫(kù)必須依賴的特性。而由于這些特性具有非常高的技術(shù)門檻,因此在未來的兩到三年內(nèi),云原生技術(shù)落后的數(shù)據(jù)庫(kù)廠商必將會(huì)被淘汰。
對(duì)于很多企業(yè)而言,如果采用自建數(shù)據(jù)庫(kù)方案,那么無論是對(duì)于研發(fā)還是運(yùn)維而言,都會(huì)帶來很多痛點(diǎn),比如:
活動(dòng)上線時(shí)造成壓力突增,而數(shù)據(jù)庫(kù)卻來不及升級(jí);?
業(yè)務(wù)發(fā)展很快,來不及進(jìn)行拆庫(kù),也來不及分庫(kù)分表;?
應(yīng)用擴(kuò)容之后,上百臺(tái)ECS連接一臺(tái)數(shù)據(jù)庫(kù),因此在高并發(fā)下性能很差;?
使用讀寫分離,但是剛更新的數(shù)據(jù)卻查詢不到;?
主從復(fù)制經(jīng)常中斷;?
一次全量數(shù)據(jù)備份需要大量時(shí)間,并且必須鎖表等。
這些都是互聯(lián)網(wǎng)公司在使用自建數(shù)據(jù)庫(kù)時(shí)會(huì)遇到的問題。那么,如何解決這些問題呢?答案就是需要一個(gè)強(qiáng)大的云原生數(shù)據(jù)庫(kù)。
因此,阿里云提供了POLARDB數(shù)據(jù)庫(kù)。POLARDB基于業(yè)界先進(jìn)的Shared-Everything架構(gòu),簡(jiǎn)單而言,就是借助高速的RDMA網(wǎng)絡(luò)將所有數(shù)據(jù)庫(kù)節(jié)點(diǎn)連接在同一網(wǎng)絡(luò)下。POLARDB采用計(jì)算與存儲(chǔ)分離的架構(gòu),數(shù)據(jù)節(jié)點(diǎn)是無狀態(tài)的,因此一旦發(fā)生宕機(jī)可以隨時(shí)進(jìn)行遷移。
對(duì)于企業(yè)級(jí)數(shù)據(jù)庫(kù)而言,一般會(huì)從可靠性、可用性、性能、彈性、成本和易用性這六個(gè)方面進(jìn)行評(píng)價(jià)。
在可靠性方面,POLARDB基于Parallel Raft協(xié)議并借助RDMA能夠做到RPO=0。此外,POLARDB基于TCP的遠(yuǎn)程物理復(fù)制技術(shù)實(shí)現(xiàn)了跨AZ的容災(zāi)。
在可用性方面,POLARDB借助Parallel Raft復(fù)制技術(shù)使得單節(jié)點(diǎn)存儲(chǔ)切換RTO控制在10毫秒以內(nèi),基于Warm Buffer Pool技術(shù)使得讀寫節(jié)點(diǎn)重啟速度加快4倍以上,并且基于跨節(jié)點(diǎn)物理復(fù)制技術(shù)使得日志并發(fā)應(yīng)用的節(jié)點(diǎn)間延遲控制在100毫秒以內(nèi)。
在性能方面,POLARDB使用了高速硬件和用戶態(tài)I/O協(xié)議棧,使得計(jì)算節(jié)點(diǎn)的寫延遲小于100us,而讀帶寬大于4GB/s。除此之外,還在I/O上進(jìn)行了優(yōu)化,借助Parallel Query技術(shù)使得TPC-H性能提升超過25倍。
在成本方面,POLARDB這樣的云原生數(shù)據(jù)庫(kù)的成本往往低于傳統(tǒng)的托管數(shù)據(jù)庫(kù)。這是因?yàn)槠髽I(yè)在使用POLARDB時(shí)可以按需擴(kuò)容,彈性伸縮,而這是在實(shí)現(xiàn)存儲(chǔ)與計(jì)算分離的云原生架構(gòu)誕生之前無法實(shí)現(xiàn)的。目前來看,相較于RDS,使用POLARDB將會(huì)使得成本降低約44%,這就是技術(shù)釋放的紅利。
在易用性方面,POLARDB可以100%兼容RDS,并且可以在阿里云上一鍵將RDS替換為POLARDB,此外還提供了智能讀寫分離、性能洞察以及SQL審計(jì)等優(yōu)秀的功能。
此外,POLARDB在2019年也實(shí)現(xiàn)了技術(shù)的全面升級(jí)。首先,POLARDB MySQL 8.0兼容版于9月12日正式發(fā)布,這是全球第一個(gè)兼容MySQL 8.0版本的云原生數(shù)據(jù)庫(kù)。其次,POLARDB分布式數(shù)據(jù)庫(kù)服務(wù)也正式發(fā)布,其存儲(chǔ)容量支持最多超過100TB。再次,POLARDB的高性能存儲(chǔ)引擎X-Engine即將發(fā)布,X-Engine存儲(chǔ)引擎具有高性能和高壓縮率,并且經(jīng)歷了2018年雙11的實(shí)戰(zhàn)考驗(yàn)。此外,POLARDB對(duì)于Oracle的語法兼容性特性也即將實(shí)現(xiàn)商業(yè)化,能夠?yàn)橛脩魩韺⒔?倍的成本降低。此外,本次的云棲大會(huì)上還正式發(fā)布了POLARDB一體機(jī),它能夠更好地幫助用戶在私有云上使用POLARDB數(shù)據(jù)庫(kù)。
目前,阿里云POLARDB數(shù)據(jù)庫(kù)已經(jīng)成了增長(zhǎng)最快的云數(shù)據(jù)庫(kù)產(chǎn)品,未來也將會(huì)提供更多的特性,為客戶帶來更多的價(jià)值。
2、POLARDB MySQL存儲(chǔ)引擎優(yōu)化實(shí)踐
楊辛軍(Jimmy Yang) 阿里云智能資深技術(shù)專家為大家介紹了阿里云POLARDB 8.0基于MySQL 8.0所做的存儲(chǔ)引擎優(yōu)化實(shí)踐。
POLARDB實(shí)現(xiàn)了快速高效的物理復(fù)制,使得IO操作減少了50%,同時(shí)能夠達(dá)到100T的存儲(chǔ)容量。與此同時(shí),相比于原本的邏輯復(fù)制,POLARDB的物理復(fù)制更加可靠、高效,并且對(duì)于性能影響幾乎不可見。傳統(tǒng)的邏輯復(fù)制比物理復(fù)制延遲大很多,而且可能會(huì)出現(xiàn)系統(tǒng)堵塞,對(duì)業(yè)務(wù)造成影響,物理復(fù)制則不會(huì)產(chǎn)生這樣的影響。此外,POLARDB基于共享存儲(chǔ)還實(shí)現(xiàn)了非堵塞、低延遲的DDL復(fù)制,并且支持快速動(dòng)態(tài)的讀擴(kuò)展,最高支持?jǐn)U展到16個(gè)只讀節(jié)點(diǎn)。
POLARDB是全球第一個(gè)具有高效物理復(fù)制的,共享存儲(chǔ)并兼容MySQL 8.0的云數(shù)據(jù)庫(kù)。POLARDB不僅包含了MySQL 8.0的所有重要功能,還在MySQL內(nèi)核引擎的基礎(chǔ)之上進(jìn)行了大量的優(yōu)化。
雖然POLARDB使用了物理復(fù)制,但是基于客戶對(duì)于數(shù)據(jù)進(jìn)行數(shù)據(jù)分析和傳輸需要Binlog的考慮,POLARDB也支持了Binlog。在性能優(yōu)化方面,POLARDB最新的“Copy Page”功能減少了主節(jié)點(diǎn)Flush Constraint。POLARDB對(duì)于邏輯鎖系統(tǒng)進(jìn)行了分區(qū),減少了mutex的沖突,并且將死鎖檢測(cè)實(shí)現(xiàn)了并行化。POLARDB對(duì)于Transaction System也進(jìn)行了優(yōu)化,使用Lock Free數(shù)據(jù)結(jié)構(gòu)來管理Transaction System的Lists。
相比于POLARDB 5.6版本,POLARDB 8.0版本在性能表現(xiàn)上有了顯著提升,在關(guān)鍵情況下都有了數(shù)倍的改進(jìn)。相比于MySQL 8.0的官方版本,POLARDB 8.0的優(yōu)化改進(jìn)所帶來的效果也非常明顯,尤其是物理復(fù)制方面具有顯著的優(yōu)勢(shì),在Insert情況下POLARDB性能可達(dá)到MySQL的約6倍。
官方MySQL向8.0版本演進(jìn)時(shí)過于重視高配機(jī)型的適配,而忽略了小型機(jī)的性能。而云上用戶大部分還是用的8核、16核的小型機(jī),因此使用MySQL8.0的性能會(huì)發(fā)生退化。因此,阿里云POLARDB數(shù)據(jù)庫(kù)針對(duì)于這個(gè)問題進(jìn)行了一系列優(yōu)化。
相較于MySQL 8.0,阿里云POLARDB 8.0版本提供了更多的內(nèi)核引擎功能,比如獨(dú)立可擴(kuò)展的共享Buffer Pool、行級(jí)壓縮、全球?qū)嵗С帧⒉⑿蠨DL、分區(qū)表自建索引以及自建分區(qū)表等。
3、POLARDB MySQL并行查詢優(yōu)化詳解
阿里云智能資深技術(shù)專家封仲淹為大家詳細(xì)介紹了POLARDB基于MySQL 8.0內(nèi)核所做的并行查詢優(yōu)化。
并行查詢是POLARDB 8.0版本重磅推出的一個(gè)特性,阿里云POLARDB團(tuán)隊(duì)投入了大量人力和物力來開發(fā)這個(gè)特性,并且從目前來看,客戶對(duì)于并行查詢的反饋非常好。
首先思考一個(gè)問題:為什么需要并行查詢?阿里使用MySQL的歷史已經(jīng)過了十余年,在MySQL使用中遇到的所有問題,阿里基本都遇到過。其中最令人頭痛的問題就是當(dāng)MySQL表的數(shù)據(jù)量特別大時(shí),查詢會(huì)非常的慢。大部分方案都是通過拆庫(kù)將數(shù)據(jù)量縮小。
此外,業(yè)界的一個(gè)趨勢(shì)CPU單核頻率達(dá)到了瓶頸,增長(zhǎng)放緩。而我們對(duì)于計(jì)算能力的訴求是永無止境的,因此CPU只能向著多核演進(jìn)。而MySQL屬于傳統(tǒng)事務(wù)型數(shù)據(jù)庫(kù),其無法并行執(zhí)行單條Query,因此無法充分利用多核的作用。業(yè)界的通用做法就是并行查詢,如今幾乎所有商業(yè)數(shù)據(jù)庫(kù)都提供并行查詢的能力,將任務(wù)分?jǐn)偨o多個(gè)線程并行計(jì)算,大幅度縮短計(jì)算時(shí)間。
那么,如何實(shí)現(xiàn)并行查詢呢?并行查詢首要關(guān)注的就是數(shù)據(jù)分區(qū),這樣才能使得每個(gè)Worker同時(shí)工作,互不干擾。由優(yōu)化器決定分區(qū)的數(shù)量,并且讓 Worker與分區(qū)動(dòng)態(tài)綁定,實(shí)現(xiàn)“能者多勞”,防止熱點(diǎn)問題的出現(xiàn),使得計(jì)算更加均勻,保障了并行查詢的線性性能提升。在并行計(jì)算里面,將單線程Plan Tree改為了多線程,劃分Worker和Leader兩個(gè)角色,盡可能將所有算子下推到Worker中,利用Worker并行能力加速,而讓Leader做匯總和反饋。
那么,并行查詢的效果如何呢?在TPCH 100G數(shù)據(jù)量的情況下,使用POLARDB并行查詢時(shí)發(fā)現(xiàn)70%的查詢可以被加速,40%的加速比超過10倍,幾乎能夠?qū)PU能力完全發(fā)揮出來。
與此同時(shí),并行查詢還具有線性增長(zhǎng)的能力,這意味著當(dāng)數(shù)據(jù)量大的時(shí)候,只需要給與足夠多的CPU和內(nèi)存,處理能力就能夠?qū)崿F(xiàn)線性增長(zhǎng)。在TPCH 5G、10G、20G以及40G四種數(shù)據(jù)量維度下,不斷調(diào)整并發(fā)度,而性能曲線基本上出現(xiàn)線性增長(zhǎng)趨勢(shì)。
使用并行查詢也比較簡(jiǎn)單,用戶可以在控制臺(tái)、Session或者SQL中進(jìn)行設(shè)置自己需要的并發(fā)度。在未來,POLARDB會(huì)實(shí)現(xiàn)自動(dòng)的DOP以及ResourceManager,并將支持Subquery、GIS和Blob以及Procedure等。
4、POLARDB 兼容Oracle能力解密與遷移
阿里云智能資深技術(shù)專家蔡松露為大家深度了揭秘POLARDB是如何實(shí)現(xiàn)兼容Oracle能力的。
之前POLARDB主要兼容MySQL、PostgreSQL等開源數(shù)據(jù)庫(kù),而現(xiàn)在POLARDB也已經(jīng)兼容了Oracle,這和之前兼容開源數(shù)據(jù)庫(kù)是不同的。之所以要兼容Oracle主要有幾個(gè)方面的原因,首先目前公有云已經(jīng)進(jìn)入了深水區(qū),因此需要更多地深入線下的存儲(chǔ)和計(jì)算場(chǎng)景;其次在如今的政治環(huán)境中,國(guó)家層面對(duì)于“去O”有了新的要求,而目前國(guó)內(nèi)市場(chǎng)還屬于真空?;谝陨媳尘?、機(jī)遇和挑戰(zhàn),阿里云推出了POLARDB兼容Oracle的產(chǎn)品。而如何實(shí)現(xiàn)真正的兼容,以及如何將數(shù)據(jù)從Oracle遷移到POLARDB都存在很多挑戰(zhàn)。
POLARDB目前100%兼容了MySQL 5.6、MySQL 8.0以及PostgreSQL 11,此外還高度兼容了Oracle,因?yàn)镺racle語法本身非常復(fù)雜,因此整體兼容度可以達(dá)到95%左右。除了兼容Oracle之外,基于POLARDB本身的能力可以在Proxy層實(shí)現(xiàn)自定義讀寫分離和自動(dòng)負(fù)載均衡。Oracle在引擎層能夠提供多寫能力,但是POLARDB提供的是一寫多讀能力。存儲(chǔ)層的Polar Store類似于Oracle的ASM。POLARDB本身的能力基本都被其兼容Oracle的產(chǎn)品復(fù)用了。
POLARDB Oracle版本從幾個(gè)層次做了兼容,首先是操作界面能夠完全兼容,對(duì)于DBA而言遷移成本基本為0。其次,對(duì)于應(yīng)用開發(fā)而言,目前POLARDB使用的PG開源的SDK。而對(duì)于引擎架構(gòu)而言,POLARDB的架構(gòu)基本和Oracle類似。目前使用的存儲(chǔ)也是和ASM對(duì)標(biāo)的。
兼容只是起點(diǎn),使用POLARDB不只是獲得了對(duì)于Oracle的兼容性,還提供了更強(qiáng)大的能力。不僅能夠獲得云原生能力,兼容更多的數(shù)據(jù)生態(tài),并且還提供了更多的數(shù)據(jù)增值服務(wù)以及業(yè)界的解決方案,其背后是整個(gè)阿里巴巴生態(tài)的技術(shù)能力。
本次云棲大會(huì)上發(fā)布的POLARDB一體機(jī)使用了云原生的管控系統(tǒng),沉淀了阿里巴巴之前在公有云上積累的管控經(jīng)驗(yàn)。一體機(jī)使用了軟硬一體化設(shè)計(jì),實(shí)現(xiàn)了整機(jī)柜交付,并且集成了大量的成熟新硬件。主要面向政企行業(yè),能夠?qū)崿F(xiàn)從Oracle一鍵遷移。一體機(jī)使用K8S底座,能夠方便與自有系統(tǒng)集成。
Oracle數(shù)據(jù)庫(kù)遷移需要經(jīng)過評(píng)估、測(cè)試、遷移、管理、分析診斷以及付費(fèi)等諸多環(huán)節(jié),而阿里云為用戶在各個(gè)階段提供了非常完善的功能。
總結(jié)而言,對(duì)于Oracle的兼容性可以分為五個(gè)維度:
? 工具和生態(tài):兼容DBA、開發(fā)者等相關(guān)人員的使用習(xí)慣;
? SQL語法:對(duì)應(yīng)用而言需要改造成本接近于零;
? 性能:避免性能退化;
? 成本:可以將成本做到極低;
? 部署:線上線下實(shí)現(xiàn)混合云架構(gòu)。
那么,如何做遷移呢?阿里云提供了數(shù)據(jù)庫(kù)和應(yīng)用遷移(ADAM),其包含了采集、畫像、評(píng)估、改造以及遷移系統(tǒng),能夠幫助企業(yè)最大限度降低ORACLE數(shù)據(jù)庫(kù)和應(yīng)用遷移上云的風(fēng)險(xiǎn)、技術(shù)難度和實(shí)施周期。ADAM脫胎于阿里巴巴內(nèi)部“去O”的實(shí)踐,能夠幫助用戶做到一鍵上云。
5、使用云原生技術(shù)構(gòu)建可擴(kuò)展的游戲數(shù)據(jù)庫(kù)架構(gòu)
江娛互動(dòng)CTO羅田唯為大家介紹了如何使用云原生技術(shù)構(gòu)建可擴(kuò)展的游戲數(shù)據(jù)庫(kù)架構(gòu)。
江娛互動(dòng)是一家專注于小游戲公司,頭部產(chǎn)品是“世界爭(zhēng)霸”小游戲。 “世界爭(zhēng)霸”小游戲首先算是一個(gè)大型社交系統(tǒng),目前的服務(wù)數(shù)量達(dá)到了200多個(gè),超過1百萬日活,每天5億次用戶請(qǐng)求。其次是大型數(shù)據(jù)庫(kù)系統(tǒng),目前有200多個(gè)數(shù)據(jù)庫(kù)實(shí)例,總數(shù)據(jù)量在10TB之上。最后,游戲還是大型日志系統(tǒng),這對(duì)于分析玩家很重要,“世界爭(zhēng)霸”每天日志量在50TB之上。
對(duì)于游戲產(chǎn)業(yè)而言,面對(duì)著低延遲、重支付和全球同服的挑戰(zhàn)。面對(duì)海量的請(qǐng)求、數(shù)據(jù)和日志,服務(wù)器數(shù)量多、架構(gòu)復(fù)雜以及帶來運(yùn)維壓力大,還有研發(fā)團(tuán)隊(duì)能力不足、研發(fā)周期短以及要求高的挑戰(zhàn),完全由自己團(tuán)隊(duì)負(fù)責(zé)是無法搞定的。
“世界爭(zhēng)霸”小游戲數(shù)據(jù)總量很大,單表數(shù)據(jù)量也大,并且QPS也很高。如果使用自建數(shù)據(jù)庫(kù)方案,使用MySQL數(shù)據(jù)庫(kù),并且使用Cobar中間件做分庫(kù)分表。自建數(shù)據(jù)庫(kù)的方案缺點(diǎn)很明顯,架構(gòu)比較復(fù)雜,搭建和維護(hù)的成本都非常高,并且穩(wěn)定性難以保障。如果采用上云的傳統(tǒng)方案就是使用阿里云RDS來替代MySQL,這樣的缺點(diǎn)也是這種方案不夠靈活,這樣的方案對(duì)于傳統(tǒng)電商而言可能夠用,但是對(duì)于游戲而言是不足夠的,雖然搭建和維護(hù)比較方便,但是穩(wěn)定性卻不夠好。
從2019年5月使用POLARDB以來,江娛互動(dòng)目前已經(jīng)成為了POLARDB華北區(qū)最大客戶。POLARDB的優(yōu)點(diǎn)在于存儲(chǔ)和計(jì)算分離,擴(kuò)展性強(qiáng),并且單表容量大,小表性能平穩(wěn),同等規(guī)格下是RDS性能的7倍,并且相較于RDS能夠節(jié)省一半成本。POLARDB穩(wěn)定性也非常高,SLA接近于100%。
6、大規(guī)模實(shí)時(shí)互動(dòng)課堂下的POLARDB實(shí)踐
猿輔導(dǎo)資深研發(fā)架構(gòu)師李陽明為大家介紹了在線教育公司猿輔導(dǎo)的大規(guī)模實(shí)時(shí)互動(dòng)課堂下的POLARDB實(shí)踐。
猿輔導(dǎo)是一家在線教育公司,正在為超過2.5億的中小學(xué)生和家長(zhǎng)提供多元化的智能教育服務(wù),主營(yíng)業(yè)務(wù)為在線題庫(kù)、拍照搜題、實(shí)時(shí)互動(dòng)課堂、直播云輔導(dǎo)等。
猿輔導(dǎo)對(duì)于實(shí)時(shí)互動(dòng)課堂的定義包含三個(gè)要素:實(shí)時(shí)可互動(dòng)、活動(dòng)類型豐富以及用戶體驗(yàn)穩(wěn)定一致。對(duì)于在線課程測(cè)驗(yàn)這個(gè)典型場(chǎng)景主要面對(duì)的挑戰(zhàn)有三條,即流量規(guī)模比較大,業(yè)務(wù)需求多樣和業(yè)務(wù)變更頻繁。首先,對(duì)于猿輔導(dǎo)這樣的面向K12在線教育而言,流量會(huì)有明顯的周期差異,存在明顯的波峰和波谷,中小學(xué)生往往會(huì)在工作日的晚上或者周末才有時(shí)間上課。此外,房間規(guī)模也不同,猿輔導(dǎo)有上千個(gè)千人班級(jí),還有若干十萬人的班級(jí),而這兩種班級(jí)的流量是不同的。其次,猿輔導(dǎo)的業(yè)務(wù)需求比較多樣,不同年級(jí)的功能側(cè)重點(diǎn)不同,不同角色關(guān)心的內(nèi)容也不同。
猿輔導(dǎo)最初使用MySQL + Redis方案,MySQL落盤核心數(shù)據(jù)并提供回放服務(wù),Redis則實(shí)現(xiàn)各種榜單供直播使用。這種方案的問題是Redis數(shù)據(jù)無法復(fù)用,導(dǎo)致寫多份,并且單機(jī)MySQL存在性能瓶頸無法支持更高的QPS。后來猿輔導(dǎo)就引入了POLARDB數(shù)據(jù)庫(kù),并將統(tǒng)計(jì)功能進(jìn)行了微服務(wù)化,去掉了Redis。
這樣的方案運(yùn)行了半年,也遇到了三點(diǎn)主要的問題:處理能力被高估、缺乏隔離和缺乏擴(kuò)展性。于是猿輔導(dǎo)借助POLARDB實(shí)現(xiàn)的數(shù)據(jù)庫(kù)架構(gòu)的再次演進(jìn),實(shí)現(xiàn)了數(shù)據(jù)庫(kù)的垂直拆分、水平拆分、讀寫分離和提交異步化。
猿輔導(dǎo)現(xiàn)在的數(shù)據(jù)庫(kù)架構(gòu)還存在著一些遺留的問題,比如負(fù)載均衡策略不可配、永久回放帶來數(shù)據(jù)負(fù)擔(dān)以及課堂外數(shù)據(jù)統(tǒng)計(jì)也是一個(gè)負(fù)擔(dān)。因此,猿輔導(dǎo)也進(jìn)行了一些負(fù)載均衡方面的優(yōu)化,比如支持按照負(fù)載進(jìn)行Shard調(diào)度,也支持手工指定房間的Shard,而且使得基礎(chǔ)組件支持動(dòng)態(tài)下發(fā)分片信息。
原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的云原生数据库POLARDB专场“硬核”解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何使用confd+ACM管理Nginx
- 下一篇: 深度 | 带领国产数据库走向世界,POL