前面不久,在京舉行的中國數(shù)據(jù)庫技術(shù)大會上择卦,來自阿里巴巴集團研究員張瑞發(fā)表了題為《面向未來的數(shù)據(jù)庫體系架構(gòu)的思考》的主題演講敲长。
主要介紹了阿里數(shù)據(jù)庫技術(shù)團隊正在建設(shè)阿里下一代數(shù)據(jù)庫技術(shù)體系的想法和經(jīng)驗郎嫁,希望能夠把阿里的成果、踩過的坑以及面向未來思考介紹給與會者祈噪,為中國數(shù)據(jù)庫技術(shù)的發(fā)展出一份力泽铛。
簡介:
張瑞,阿里巴巴研究員钳降,阿里集團數(shù)據(jù)庫技術(shù)團隊負責人厚宰,經(jīng)歷阿里數(shù)據(jù)庫技術(shù)變革歷程,連續(xù)六年作為數(shù)據(jù)庫總負責人參與雙11備戰(zhàn)工作遂填。
演講大致內(nèi)容:
我先介紹一下我自己铲觉,我2005年加入阿里一直在做數(shù)據(jù)庫方面的工作,今天這個主題是我最近在思考阿里巴巴下一代數(shù)據(jù)庫體系方面的一些想法吓坚,在這里分享給大家撵幽,希望能夠拋磚引玉。大家如果能夠在我今天分享后礁击,結(jié)合自己面對的實際場景盐杂,得到一些體會,有點想法的話哆窿,我今天分享的目的就達到了链烈。
今天我會講以下幾方面內(nèi)容:首先講一下我們在內(nèi)核上的一點創(chuàng)新、數(shù)據(jù)庫怎么實現(xiàn)彈性調(diào)度挚躯、關(guān)于智能化的思考强衡、最后是曾經(jīng)踩過的坑和看到未來的方向。
阿里場景下數(shù)據(jù)庫所面臨的問題
首先說一下,阿里巴巴最早一代使用的數(shù)據(jù)庫技術(shù)是Oracle漩勤,后面大家也知道一件事情就是去IOE,去IOE過程中我們邁向了使用開源數(shù)據(jù)庫的時代缩搅,這個時代今天已經(jīng)過去越败,這個過程大概持續(xù)了五六年,整個阿里巴巴有一個大家都知道的開源MYSQL分支--AliSQL硼瓣,我們在上面做了大量的改進究飞,所以我這里列了一下在AliSQL上的一些改進,但今天我實際上并不想講這個巨双,我想講一下面向未來的下一代數(shù)據(jù)庫技術(shù)噪猾、數(shù)據(jù)庫架構(gòu)會往哪個方向走。
我覺得是這樣的筑累,因為今天的阿里巴巴畢竟是一個技術(shù)的公司,所以很多時候我們會看比如說Google或者是一些互聯(lián)網(wǎng)的大的公司丝蹭,他們在技術(shù)上創(chuàng)新點來自于哪里慢宗?來自于問題。就是說今天在座的各位和我是一樣的,你所面對場景下的問題是什么镜沽、你看問題深度如何決定了你今天創(chuàng)造的創(chuàng)新有多大敏晤。
所以今天我們重新看一下阿里面臨的問題是什么,大家也能夠看到自己所面臨的問題是什么缅茉,你將如何思考嘴脾。
可以看到其實阿里巴巴的應用和Facebook、Google的還是有很大區(qū)別的蔬墩,我們也找他們做了交流译打,發(fā)現(xiàn)跟他們的業(yè)務場景真的不一樣,首先我們的主要應用是交易型的拇颅,這些應用會有些什么要求奏司,你會看到有這些點(見圖片),下面主要講一下我們的思考樟插。
第一:今天數(shù)據(jù)的高可用和強一致是非常重要的韵洋,數(shù)據(jù)不一致帶來的問題是非常非常巨大的,大家也用淘寶黄锤,也是阿里巴巴一些服務的用戶搪缨,數(shù)據(jù)不一致帶來的問題蒂阱,每一個用戶枉昏、甚至我的父母都會關(guān)注這些事情。
第二:今天存儲成本是非常高的忘晤,所有的數(shù)據(jù)中心已經(jīng)在用SSD旅赢,但數(shù)據(jù)的存儲成本依然是一個大型企業(yè)面臨的一個非常大的問題齿桃,這都是實實在在錢的問題。
另外剛才也提到了煮盼,數(shù)據(jù)都是有生命周期的短纵,那么數(shù)據(jù)尤其是交易數(shù)據(jù)是有非常明顯的冷和熱的狀態(tài),大家一定很少看自己一年前在淘寶的購買記錄僵控,但是當下的購買記錄會去看香到,那系統(tǒng)就需要經(jīng)常會去讀它、更新它报破。
還有一個特點是今天阿里的業(yè)務還是相對簡單的悠就,比如我們要在OLTP性能上做到極致性。還有一個阿里巴巴特有的點就是雙十一充易,雙十一本質(zhì)上是什么梗脾,本質(zhì)上就是制造了一個技術(shù)上非常大的熱點效應。這對我們提出什么樣的需求呢盹靴?需求就是一個極致彈性的能力炸茧,數(shù)據(jù)庫實際上在這個方向是非常欠缺的瑞妇,數(shù)據(jù)庫怎么樣去做到彈性伸縮是非常難的事情。
如何實現(xiàn)極致彈性能力梭冠?
雙11是一場技術(shù)大練兵辕狰,是互聯(lián)網(wǎng)界的超級工程。需要做到支撐盡可能高的零點峰值控漠,給用戶最好的體驗蔓倍;也要做到成本盡可能低,要求極致的彈性能力盐捷;還要做到整體系統(tǒng)的穩(wěn)定偶翅。
數(shù)據(jù)庫如何實現(xiàn)極致彈性能力?
數(shù)據(jù)庫上云
大家都知道毙驯,數(shù)據(jù)庫實現(xiàn)彈性能力是比較困難的倒堕,一方面是因為數(shù)據(jù)庫對性能要求非常高,另一方面是需要進行大量數(shù)據(jù)的搬遷爆价,成本很高垦巴。數(shù)據(jù)庫彈性的第一個方向是數(shù)據(jù)庫上云,通過云的彈性能力來解決數(shù)據(jù)庫的資源問題铭段。
數(shù)據(jù)庫上云面臨以下幾個難點:
1.數(shù)據(jù)庫如何快速上云骤宣,構(gòu)建混合云?
2.如何降低虛擬化帶來的性能損耗序愚?
3.公有云環(huán)境和內(nèi)部網(wǎng)絡的互通問題憔披。
經(jīng)過幾年的探索,這些難點都已得到解決爸吮。
第一芬膝,數(shù)據(jù)庫使用了高性能ECS,通過使用SPDK形娇、DPDK技術(shù)和NVMe存儲锰霜,可以讓虛擬化損耗非常小,接近物理機桐早;
第二癣缅,我們建設(shè)了一套數(shù)據(jù)庫混合云管理系統(tǒng),可以同時管理云上和云下環(huán)境哄酝,在雙11前快速把混合云構(gòu)建起來友存,支撐雙十一。
第三陶衅,我們通過VPC網(wǎng)絡連接阿里內(nèi)部和公有云的網(wǎng)絡屡立,解決了混合云場景下的網(wǎng)絡互聯(lián)問題。
——需要學習的加Qun號:671017482搀军,小白勿進
數(shù)據(jù)庫彈性調(diào)度
使用云的資源還不夠侠驯,為了實現(xiàn)更加極致的彈性能力抡秆,我們通過離在線混部技術(shù)奕巍,可以讓數(shù)據(jù)庫使用離線集群的計算資源吟策,最大程度的降低成本。為了實現(xiàn)離在線混部技術(shù)的止,有兩大基礎(chǔ)條件:第一是容器化檩坚,通過容器實現(xiàn)了計算節(jié)點的資源隔離和統(tǒng)一調(diào)度,第二是計算存儲分離诅福,它是數(shù)據(jù)庫彈性調(diào)度能力的基礎(chǔ)匾委。非常幸運的是,這幾年技術(shù)的發(fā)展讓存儲計算分離成為可能氓润,比如:25G高速網(wǎng)絡赂乐、RDMA技術(shù),高性能分布式存儲等咖气。
數(shù)據(jù)庫存儲計算分離架構(gòu)如圖挨措,包括存儲層、網(wǎng)絡層和計算層崩溪,存儲使用阿里自研分布式存儲系統(tǒng)-盤古浅役,數(shù)據(jù)庫計算節(jié)點則部署在阿里自研容器(Pouch)中,通過25G網(wǎng)絡與存儲節(jié)點連接伶唯。
為了實現(xiàn)數(shù)據(jù)庫存儲和計算分離觉既,我們在分布式存儲-盤古上做了非常多的優(yōu)化,比如:
響應延時:單路讀寫響應延時0.4ms乳幸,RDMA網(wǎng)絡響應延時小于0.2ms瞪讼;
二三異步:第三個數(shù)據(jù)副本異步完成,極大提升了延時的穩(wěn)定性粹断;
QoS流控:根據(jù)前臺業(yè)務負載情況控制后臺IO流量符欠,保證寫入性能;
快速Failover:存儲集群單機failover優(yōu)化為5秒姿染,達到業(yè)界領(lǐng)先水平背亥;
高可用部署:單集群四Rack部署,將數(shù)據(jù)可靠性提升到10個9悬赏。
同時狡汉,在數(shù)據(jù)庫方面我們也做了大量優(yōu)化,最重要的是降低計算節(jié)點和存儲節(jié)點的網(wǎng)絡傳輸量闽颇,以此來降低網(wǎng)絡延遲對于數(shù)據(jù)庫性能的影響盾戴。第一是redo log sync優(yōu)化,將數(shù)據(jù)庫吞吐提升了100%兵多。第二是由于盤古支持原子寫功能尖啡,所以我們關(guān)閉了數(shù)據(jù)庫的Double Write Buffer橄仆,高壓力下數(shù)據(jù)庫吞吐提升20%,網(wǎng)絡帶寬節(jié)省了100%衅斩。
雙11數(shù)據(jù)庫混部技術(shù)
容器化和存儲計算分離盆顾,使得數(shù)據(jù)庫無狀態(tài)化,具備調(diào)度能力畏梆。在雙11高峰您宪,通過將共享存儲掛載到不同的計算集群(離線集群),實現(xiàn)數(shù)據(jù)庫的快速彈性奠涌。
阿里新一代數(shù)據(jù)庫技術(shù)
阿里最早是商業(yè)數(shù)據(jù)庫宪巨,然后我們做去IOE,研發(fā)出阿里MySQL分支AliSQL和分布式中間件TDDL溜畅。2016年捏卓,我們開始研發(fā)阿里新一代數(shù)據(jù)庫技術(shù),我們把它命名為X-DB慈格,X代表追求極限性能怠晴,挑戰(zhàn)無限可能的含義。
阿里的業(yè)務場景對于數(shù)據(jù)庫有很高的要求:
數(shù)據(jù)要可擴展峦椰;
持續(xù)可用龄寞、數(shù)據(jù)要強一致;
數(shù)據(jù)量大汤功、重要程度高物邑;
數(shù)據(jù)有明顯的生命周期特性,冷熱數(shù)據(jù)特點鮮明滔金;
交易色解、庫存,支付等業(yè)務餐茵,操作邏輯簡單科阎,要求高性能。
因此忿族,定義新一代數(shù)據(jù)庫就要包含幾個重要特點:具備數(shù)據(jù)強一致锣笨、全球部署能力;內(nèi)置分布式道批、高性能错英、高可用能力;具備自動數(shù)據(jù)生命周期管理能力隆豹。
X-DB架構(gòu)圖
X-DB架構(gòu)如圖椭岩,引入Paxos分布式一致性協(xié)議解決問題;可異地部署,雖然網(wǎng)絡延時增加判哥,但能夠保持高性能(吞吐)献雅,在同城三節(jié)點部署模式下,性能與單機持平塌计,同時具備網(wǎng)絡抖動的高容忍性挺身。
X-DB核心技術(shù)之一:高性能Paxos基礎(chǔ)庫X-Paxos是實現(xiàn)三節(jié)點能力的核心,可實現(xiàn)跨AZ夺荒、Region的數(shù)據(jù)強一致能力瞒渠,實現(xiàn)5個9以上的持續(xù)可用率。
X-DB核心技術(shù)之二:Batching & Pipelining技扼。X-DB在事務提交時,必須保證日志在數(shù)據(jù)庫節(jié)點的多數(shù)派收到并提交嫩痰,這是保證數(shù)據(jù)強一致基礎(chǔ)剿吻,由于事務在提交時必須需要跨網(wǎng)絡,這一定會導致延時增加串纺,要保證高延時下的吞吐是非常困難的丽旅。Batching & Pipelining技術(shù)保證盡可能批量提交,數(shù)據(jù)可以亂序接收和確認纺棺,最終保證日志順序提交榄笙。可以在高延時的情況下祷蝌,保持很高的吞吐能力茅撞。
X-DB核心技術(shù)之三:異步化提交,數(shù)據(jù)庫線程池在提交時會等待巨朦,為了最大程度提升性能米丘,我們采用了異步化提交技術(shù),最大可能保證數(shù)據(jù)庫線程池可以高效工作糊啡。通過這些技術(shù)保證X-DB在三節(jié)點模式下的高吞吐量拄查。
X-DB與MySQL Group Replication對比測試
我們與Oracle官方的Group Replication作對比。在三節(jié)點同IDC部署模式下棚蓄,sysbench標準化測試堕扶。Insert場景,我們可以做到MySQL官方的2.4倍梭依,響應時間比官方低稍算。
在異地部署模式下,sysbench標準化測試睛挚。Insert場景邪蛔,X-DB(5.04萬)性能優(yōu)勢特別明顯,是MySQL GR(0.85萬)的5.94倍,響應延時X-DB(58ms)是MySQL GR(150ms)的38%侧到。
典型應用場景
同城跨AZ部署替代傳統(tǒng)主備模式勃教,我們把原來主備模式變成三節(jié)點,解決跨AZ數(shù)據(jù)質(zhì)量問題和高可用問題匠抗」试矗跨AZ數(shù)據(jù)強一致,單AZ不可用數(shù)據(jù)零丟失汞贸、單AZ不可用秒級切換绳军、切換自封閉,無第三方組件矢腻。相對主備模式零成本增加门驾。
跨Region部署,用更底層的數(shù)據(jù)庫技術(shù)解決異地多活問題多柑,三地六副本(主備模式)降低為三地五副本(三地五節(jié)點四數(shù)據(jù))奶是,對于業(yè)務來說,可以享受跨Region數(shù)據(jù)強一致竣灌,單個Region不可用零數(shù)據(jù)丟失聂沙;跨Region強同步下依然保持高性能;切換策略靈活初嘹,可以優(yōu)先切換同Region及汉,也可定制跨Region切換順序。
數(shù)據(jù)庫在雙11中的黑科技
X-KV在雙11中的應用
X-KV是基于官方MySQL Memcached plugin的增強屯烦,今年我們做了大幅度的改進坷随,支持更多數(shù)據(jù)類型,支持非唯一索引漫贞、組合索引甸箱,multi get功能,還支持Online Schema change迅脐。最大變化是通過TDDL支持SQL轉(zhuǎn)換芍殖。對于業(yè)務方,X-KV優(yōu)勢是超高讀取性能谴蔑,數(shù)據(jù)強一致豌骏,減少應用響應時間,降低了成本隐锭,同時因為支持SQL窃躲,應用可以透明遷移,使用成本大幅降低钦睡。
TDDLfor X-KV實現(xiàn)了如下功能:
獨立的連接池:SQL和KV連接池相互獨立蒂窒;變更時,兩套連接池保持協(xié)同一致;應用可以快速在兩套接口之間切換洒琢。
優(yōu)化的KV通信協(xié)議:不再需要分隔符秧秉,協(xié)議實現(xiàn)。
結(jié)果集自動類型轉(zhuǎn)換:字符串自動轉(zhuǎn)換為MySQL類型衰抑。
小編這里也收集了關(guān)于電商實戰(zhàn)方面的全套視頻教程象迎,自愿進群,因為是免費的呛踊,免費分享前五十份砾淌,Qun號:671017482,小白勿進谭网。
交易賣家?guī)斓男阅芷款i解決方案
隨著雙11交易量增長汪厨,近兩年交易買家?guī)旌唾u家?guī)斓耐窖訒r一直比較大,導致商戶不能及時處理雙11訂單蜻底;且賣家?guī)煊写罅繌碗s的查詢骄崩,性能差。我們曾經(jīng)通過為大賣家設(shè)置獨立隊列薄辅、同步鏈路合并操作和賣家?guī)煜蘖鞯冗M行優(yōu)化,但仍然沒有完全解決問題抠璃。
ESDB是基于ES打造的分布式文檔數(shù)據(jù)庫站楚,我們在ElasticSearch的基礎(chǔ)上,支持了SQL接口搏嗡,應用可以從MySQL無縫遷移到ESDB窿春;針對大賣家,提供動態(tài)二級散列功能采盒,徹底解決了數(shù)據(jù)同步的性能瓶頸旧乞,而且ESDB還可以提供復雜的查詢能力。
數(shù)據(jù)庫監(jiān)控系統(tǒng)演進
數(shù)據(jù)庫監(jiān)控系統(tǒng)的技術(shù)挑戰(zhàn)具體有以下四點:
1.海量數(shù)據(jù):平均每秒1000萬項監(jiān)控指標磅氨,峰值1400萬尺栖;
2.復雜的聚合邏輯:地域、機房烦租、單元延赌、業(yè)務集群、數(shù)據(jù)庫主備等多維度數(shù)據(jù)聚合叉橱;
3.實時性要求高:監(jiān)控盯屏需要立即看到上一秒的監(jiān)控數(shù)值挫以;
4.計算資源:占用盡可能少的資源進行采集和計算。
整個鏈路經(jīng)歷三代架構(gòu):第一代Agent + MySQL窃祝;第二代Agent + datahub + 分布式NoSQL掐松;第三代Agent + 實時計算引擎 + HiTSDB
HiTSDB是阿里自研的時序型數(shù)據(jù)庫,非常適合存儲海量的監(jiān)控類數(shù)據(jù)。通過實時計算引擎將秒級性能數(shù)據(jù)大磺、全量SQL運行狀況進行預先處理后抡句,存儲在HiTSDB中。通過第三代架構(gòu)量没,實現(xiàn)了雙11高峰不降低的秒級監(jiān)控能力玉转,這對我們了解系統(tǒng)運行狀況、診斷問題是非常有幫助的殴蹄。
CloudDBA在雙11中的應用
阿里擁有業(yè)界最富有經(jīng)驗的DBA究抓,海量的性能診斷數(shù)據(jù)。我們的目標是把阿里DBA的經(jīng)驗袭灯、大數(shù)據(jù)和機器智能技術(shù)結(jié)合起來刺下,目標是三年后不再需要DBA做數(shù)據(jù)庫診斷、優(yōu)化等工作稽荧,而是讓機器來完成數(shù)據(jù)庫的智能化管理橘茉。我們認為自診斷、自優(yōu)化姨丈、自運維是未來數(shù)據(jù)庫技術(shù)發(fā)展的重要方向畅卓。
CloudDBA在今年雙11也做了一些探索,通過對全量SQL以及監(jiān)控數(shù)據(jù)的分析蟋恬,我們實現(xiàn)了SQL自動優(yōu)化(慢SQL調(diào)優(yōu))翁潘、空間優(yōu)化(無用表無用索引分析)、訪問模型優(yōu)化(SQL和KV)和存儲空間增長預測等功能歼争。
最后我用大白話講一下我對整個數(shù)據(jù)庫體系的一些理解拜马。
今天在一個公司里邊沒有一個存儲或者是數(shù)據(jù)庫可以解決所有問題,今天越來越多的趨勢看到沐绒,數(shù)據(jù)存儲的多樣性是必然會存在的俩莽,因為行存有行存的優(yōu)勢、列存有列存的優(yōu)勢乔遮、做計算有計算的優(yōu)勢扮超、做分析有做分析的優(yōu)勢、做OLTP有OLTP的優(yōu)勢申眼,不要指望瞒津,或者很難指望一個系統(tǒng)干所有的事情很,這個話我說了可能不太好括尸,但是確實比較難巷蚪,但是我們看到的一點是什么?
————就是每個技術(shù)或產(chǎn)品在生產(chǎn)中干一件事情可以干到最好濒翻,你就用它做的最好的那件事解你的問題就好了屁柏。