<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          云原生數(shù)據(jù)庫TDSQL-C PostgreSQL版內(nèi)核解密

          共 5488字,需瀏覽 11分鐘

           ·

          2021-09-25 03:48


          導(dǎo)語 TDSQL-C 原(CynosDB)是騰訊云數(shù)據(jù)庫團(tuán)隊(duì)自研的新一代云原生數(shù)據(jù)庫,融合了傳統(tǒng)數(shù)據(jù)庫、云計(jì)算與新硬件技術(shù)的優(yōu)勢(shì),采用計(jì)算和存儲(chǔ)分離的架構(gòu),100%兼容 PostgreSQL,提供具備極致彈性、高性能、海量存儲(chǔ)、安全可靠的數(shù)據(jù)庫服務(wù)。

          本文旨在從數(shù)據(jù)庫內(nèi)核的角度揭秘TDSQL-C PostgreSQL的核心架構(gòu)與關(guān)鍵技術(shù)。文適合讀者:騰訊云售后服務(wù)、TDSQL-C用戶、TDSQL-C開發(fā)者,需要有基本的數(shù)據(jù)庫與存儲(chǔ)知識(shí)。




          TDSQL-C 概述


          TDSQL-C采用計(jì)算和存儲(chǔ)分離的架構(gòu),所有計(jì)算節(jié)點(diǎn)共享一份數(shù)據(jù),存儲(chǔ)容量高達(dá)128TB,單庫最高可擴(kuò)展至16節(jié)點(diǎn),提供秒級(jí)的配置升降級(jí)、秒級(jí)的故障恢復(fù)和數(shù)據(jù)備份容災(zāi)服務(wù)。


          TDSQL-C既融合了商業(yè)數(shù)據(jù)庫穩(wěn)定可靠、高性能、可擴(kuò)展的特征,又具有開源云數(shù)據(jù)庫簡(jiǎn)單開放、自我迭代的優(yōu)勢(shì)。


          TDSQL-C不僅在性能、擴(kuò)展性和高可用方面有大幅提升,計(jì)算存儲(chǔ)的解耦使得計(jì)算層和存儲(chǔ)層都獲得了很大的獨(dú)立優(yōu)化空間,本文下面將介紹TDSQL-C架構(gòu)的實(shí)現(xiàn),以及在新架構(gòu)上的關(guān)鍵技術(shù)優(yōu)勢(shì)。



          TDSQL-C 架構(gòu)


          TDSQL-C PostgreSQL架構(gòu)



          Primary Instance是數(shù)據(jù)庫的讀寫實(shí)例(RW),負(fù)責(zé)接收數(shù)據(jù)庫的讀寫請(qǐng)求,Replica Instance是數(shù)據(jù)庫的只讀實(shí)例(RO),負(fù)責(zé)處理數(shù)據(jù)庫的只讀請(qǐng)求,目前可以支持?jǐn)U展最多15個(gè)Replica實(shí)例。



          CynosFileSystem是用戶態(tài)分布式文件系統(tǒng),主要提供分布式的文件管理,為TDSQL-C PostgreSQL實(shí)例提供文件存儲(chǔ)服務(wù)。CynosFS是專為云原生數(shù)據(jù)庫而打造的分布式用戶態(tài)文件系統(tǒng),將傳統(tǒng)分布式文件系統(tǒng)優(yōu)勢(shì)與云原生數(shù)據(jù)庫相關(guān)特征進(jìn)行融合,是TDSQL-C彈性擴(kuò)展、海量存儲(chǔ)、高性價(jià)比的基石。


          CynosStoreAgent、 CynosStoreMeta、CynosStoreNode 構(gòu)成分布式云存儲(chǔ)系統(tǒng)CynosStore(一個(gè)支持日志的、提供多版本讀的、分布式的塊設(shè)備存儲(chǔ))。其中CynosStoreNode存儲(chǔ)節(jié)點(diǎn)負(fù)責(zé)數(shù)據(jù)庫的實(shí)際數(shù)據(jù)存儲(chǔ)。同時(shí)CynosStore將日志實(shí)時(shí)同步到騰訊云冷存儲(chǔ)(COS)上,用于基于時(shí)間點(diǎn)的數(shù)據(jù)備份與恢復(fù)服務(wù)。


          Primary Instance和分布式存儲(chǔ)之間傳輸?shù)氖侨罩玖鳌rimary Instance將數(shù)據(jù)變更以日志的方式發(fā)送到CynosStore中,CynosStore會(huì)定期的將日志合并到數(shù)據(jù)頁面上,因此無需將臟頁寫到存儲(chǔ)中,這是與傳統(tǒng)數(shù)據(jù)庫很大不同的地方。


          Replica Instance沒有寫事務(wù),因此,不會(huì)向CynosStore發(fā)送日志信息,但是會(huì)請(qǐng)求讀取頁面。Primary Instance也會(huì)將日志同步到Replica Instance中,Replica Instance會(huì)使用收到的日志更新內(nèi)存中的數(shù)據(jù)頁面,當(dāng)Replica Instance切換成Primary Instance時(shí),可以直接使用這些最新的頁面對(duì)外提供服務(wù),無需再次從CynosStore中讀取頁面。      


          TDSQL-C實(shí)現(xiàn)原理:日志即數(shù)據(jù)庫。基于此實(shí)現(xiàn)的數(shù)據(jù)庫系統(tǒng)專為云原生而打造。數(shù)據(jù)庫的Primary Instance會(huì)產(chǎn)生日志,并保存到CynosStore中,因此我們從存儲(chǔ)上,針對(duì)于每一個(gè)數(shù)據(jù)頁面,均可以拿到基于日志回放的任何時(shí)間的頁面版本。也就是說,CynosStore提供了一個(gè)基于頁面的多版本存儲(chǔ)系統(tǒng),每一個(gè)版本都是基于一個(gè)或者多個(gè)MTR的回放(Mini-Transaction Record:多條日志的集合,用來保證數(shù)據(jù)庫中的頁面或者索引結(jié)構(gòu)從一個(gè)“一致性”狀態(tài),到另一個(gè)“一致性狀態(tài)”)。


          1.計(jì)算層

          數(shù)據(jù)庫引擎CynosPG基于PostgreSQL而來,PostgreSQL是世界上功能最強(qiáng)大最先進(jìn)的開源數(shù)據(jù)庫。經(jīng)過長(zhǎng)達(dá)30年以上的積極開發(fā)和不斷演進(jìn),PostgreSQL已在可靠性、穩(wěn)定性、數(shù)據(jù)一致性等獲得了業(yè)內(nèi)極高的聲譽(yù)。CynosPG主要對(duì)PostgreSQL日志系統(tǒng)和存儲(chǔ)系統(tǒng)進(jìn)行改造,進(jìn)行Oracle語法高度兼容,以及深度的內(nèi)核性能及功能優(yōu)化,對(duì)于PostgreSQL SQL引擎架構(gòu)改動(dòng)有限,因此CynosPG可以完全兼容PostgreSQL原生的功能。



          分布式用戶態(tài)文件系統(tǒng)CynosFileSystem,為實(shí)例提供分布式的文件管理,負(fù)責(zé)將文件的讀寫請(qǐng)求翻譯為對(duì)應(yīng)的BLOCK讀寫,CynosFileSystem為實(shí)例提供Pool維度的存儲(chǔ)訪問,如上圖所示。


          CynosStoreAgent為CynosFS提供SG維度的存儲(chǔ)訪問,提供SG的讀寫接口,對(duì)于讀寫請(qǐng)求有不同處理。 寫請(qǐng)求:將修改日志通過LOG API發(fā)送到CynosStoreNode,讀請(qǐng)求:直接通過BLOCK API讀取CynosStoreNode數(shù)據(jù)。CynosStoreAgent 除了承擔(dān)計(jì)算層與存儲(chǔ)層的讀寫交互,也負(fù)責(zé)主備間日志流同步,對(duì)于CynosPG主備實(shí)例間只通過CynosStoreAgent進(jìn)行交互。在工程實(shí)現(xiàn)上,由于現(xiàn)代多核和多插槽計(jì)算機(jī)對(duì)于跨核間的數(shù)據(jù)共享(atomic instruction、cache line bouncing、memory fences)代價(jià)非常大,CynosStoreAgent(無鎖實(shí)現(xiàn))工程實(shí)現(xiàn)上使用了創(chuàng)新的share-nothing編程異步框架,一種無需耗時(shí)鎖定即可在 CPU 內(nèi)核之間共享信息的設(shè)計(jì),面向現(xiàn)代新硬件技術(shù)的優(yōu)勢(shì)實(shí)現(xiàn)了極致性能。


          2.存儲(chǔ)層

          CynosStoreNode以Segment為維度進(jìn)行資源管理,Segment Group內(nèi)3個(gè)Segment實(shí)際存儲(chǔ)同一份數(shù)據(jù),通過一致性協(xié)議(Raft)進(jìn)行同步。CynosStoreNode負(fù)責(zé)Segment日志的處理、BLOCK數(shù)據(jù)的異步回放、讀請(qǐng)求的頁面多版本支持等。同時(shí)還負(fù)責(zé)將日志備份到Cold Backup Storage(COS),進(jìn)行增量備份,根據(jù)增量備份,可以靈活的生成全量備份和差異備份。


          相比于傳統(tǒng)的開源數(shù)據(jù)庫,云原生數(shù)據(jù)庫TDSQL-C計(jì)算層仍然包含傳統(tǒng)內(nèi)核的大部分組件(查詢處理器、事務(wù)管理、鎖、緩存實(shí)現(xiàn)以及MVCC),但有幾個(gè)重要核心功能(redo日志記錄、日志回放、持久存儲(chǔ)、崩潰恢復(fù)和備份/恢復(fù))均下沉到存儲(chǔ)層。在工程實(shí)現(xiàn)上,CynosStoreNode(無鎖實(shí)現(xiàn))與CynosStoreAgent一樣,使用了創(chuàng)新的share-nothing的編程異步框架,無共享模型的異步框架,結(jié)合現(xiàn)代新硬件技術(shù),實(shí)現(xiàn)存儲(chǔ)層的極致性能。


          CynosStoreMeta負(fù)責(zé)CynosStore Service資源的分配和調(diào)度,采用一主兩從架構(gòu),包括 Pool調(diào)度和 SG 調(diào)度、備份回檔調(diào)度,以及維護(hù)Pool和SG的對(duì)應(yīng)關(guān)系。CynosStoreMeta兩類調(diào)度一個(gè)是資源池Pool調(diào)度(自動(dòng)擴(kuò)縮容 Pool),一個(gè)是 SegmentGroup 調(diào)度(增減副本,leader切換,資源均衡等)。



          TDSQL-C 技術(shù)優(yōu)勢(shì)


          TDSQL-C PostgreSQL技術(shù)優(yōu)勢(shì)

          1.日志即數(shù)據(jù)庫

          TDSQL-C 引入計(jì)算存儲(chǔ)分離的設(shè)計(jì),存儲(chǔ)層使用共享的分布式存儲(chǔ),計(jì)算層則將傳統(tǒng)數(shù)據(jù)庫不必要的IO全部卸載,如上圖所示寫IO只有Redo日志流,Redo日志能表達(dá)數(shù)據(jù)庫的所有狀態(tài),實(shí)現(xiàn)計(jì)算與存儲(chǔ)基于日志傳輸?shù)男聰?shù)據(jù)庫架構(gòu),真正實(shí)現(xiàn)了將 Redo LOG 下沉到存儲(chǔ)層,將網(wǎng)絡(luò) IO 減少到最低。



          TDSQL-C計(jì)算層實(shí)現(xiàn)無狀態(tài),計(jì)算層本地?cái)?shù)據(jù)文件將不復(fù)存在,仍然包含傳統(tǒng)數(shù)據(jù)庫內(nèi)核的大部分組件:查詢處理器、事務(wù)管理、鎖、緩存實(shí)現(xiàn)以及MVCC多版本,移除了PostgreSQL中的FPW特性,臟頁面刷盤操作。


          TDSQL-C存儲(chǔ)層實(shí)現(xiàn)可計(jì)算智能存儲(chǔ),傳統(tǒng)內(nèi)核幾個(gè)重要核心功能:Redo日志記錄、日志回放、持久存儲(chǔ)、崩潰恢復(fù)和備份/恢復(fù),均下沉到存儲(chǔ)層,由分布式存儲(chǔ)系統(tǒng)自動(dòng)管理數(shù)據(jù)的多副本,實(shí)現(xiàn)自動(dòng)擴(kuò)縮容,自動(dòng)故障校驗(yàn)檢測(cè)和修復(fù),同時(shí)實(shí)現(xiàn)了存儲(chǔ)頁面多版本支持。


          2.計(jì)算與存儲(chǔ)分離,共享分布式存儲(chǔ)

          采用計(jì)算與存儲(chǔ)分離的設(shè)計(jì)理念,滿足業(yè)務(wù)彈性擴(kuò)展的需求。各計(jì)算節(jié)點(diǎn)通過用戶態(tài)分布式文件系統(tǒng)(CynosFileSystem)共享底層的存儲(chǔ)(CynosStore),極大降低了用戶的存儲(chǔ)成本。


          3.一寫多讀,讀寫分離

          TDSQL-C 采用多節(jié)點(diǎn)集群的架構(gòu),集群中有一個(gè)主節(jié)點(diǎn)(可讀可寫)和至少一個(gè)只讀節(jié)點(diǎn)。當(dāng)應(yīng)用程序使用集群地址時(shí),TDSQL-C通過內(nèi)部的代理層對(duì)外提供服務(wù),應(yīng)用程序的請(qǐng)求都先經(jīng)過代理,然后才訪問到數(shù)據(jù)庫節(jié)點(diǎn)。代理層不僅可以做安全認(rèn)證和保護(hù),還可以解析SQL,把寫操作發(fā)送到主節(jié)點(diǎn),把讀操作均衡地分發(fā)到多個(gè)只讀節(jié)點(diǎn),實(shí)現(xiàn)自動(dòng)的讀寫分離。對(duì)于應(yīng)用程序來說,就像使用一個(gè)單點(diǎn)的數(shù)據(jù)庫一樣簡(jiǎn)單。


          4.完全兼容

          TDSQL-C完全兼容PostgreSQL,代碼/應(yīng)用無需修改或只需少量修改,業(yè)務(wù)無需改造即可平滑遷移。同時(shí)TDSQL-C 會(huì)定期實(shí)現(xiàn)對(duì)PostgreSQL新版本的兼容性。可以使用PostgreSQL 導(dǎo)入/導(dǎo)出工具或者快照,將PostgreSQL 數(shù)據(jù)庫輕松遷移到TDSQL-C。


          5.極致性能

          深度定制的數(shù)據(jù)庫內(nèi)核,超高性能,可以滿足高并發(fā)高性能的場(chǎng)景,保證關(guān)鍵業(yè)務(wù)的連續(xù)性,并可進(jìn)一步提供讀寫分離以及讀寫擴(kuò)展性。如在CynosPG,CynosFileSystem大量使用的異步、流水線、批處理、Lock Free結(jié)構(gòu)等等。


          新硬件技術(shù)及零拷貝技術(shù),減少操作系統(tǒng)上下文切換以及數(shù)據(jù)在用戶態(tài)和內(nèi)核態(tài)之間拷貝引起的性能損耗,進(jìn)一步優(yōu)化關(guān)鍵路徑的系統(tǒng)性能。如RDMA、NVME、SPDK等等。


          CynosStore在工程實(shí)現(xiàn)上真正做到了無鎖實(shí)現(xiàn),創(chuàng)新的使用了share-nothing編程異步框架,無鎖實(shí)現(xiàn)即可在 CPU 內(nèi)核之間共享信息的設(shè)計(jì),面向現(xiàn)代新硬件技術(shù)的優(yōu)勢(shì)實(shí)現(xiàn)了極致性能。


          6.海量存儲(chǔ)

          最高128TB的海量存儲(chǔ),無服務(wù)器 Serverless 架構(gòu),自動(dòng)擴(kuò)縮容,自動(dòng)故障檢測(cè)修復(fù),并按實(shí)際使用量計(jì)費(fèi),不用不計(jì)費(fèi),輕松應(yīng)對(duì)業(yè)務(wù)數(shù)據(jù)量動(dòng)態(tài)變化和持續(xù)增長(zhǎng)。自動(dòng)維護(hù)數(shù)據(jù)多個(gè)副本通過Parallel-Raft協(xié)議保證數(shù)據(jù)的一致性,保障數(shù)據(jù)安全可靠。同時(shí)不再需要因?yàn)閱螜C(jī)容量的限制而去購(gòu)買多個(gè)實(shí)例做分片,由此簡(jiǎn)化應(yīng)用開發(fā),降低運(yùn)維負(fù)擔(dān)。


          7.秒級(jí)故障恢復(fù)、快速?gòu)椥宰兣洹⒖焖僦蛔x擴(kuò)展

          計(jì)算節(jié)點(diǎn)實(shí)現(xiàn)了無狀態(tài),支持秒級(jí)的故障切換和恢復(fù),即便計(jì)算節(jié)點(diǎn)所在的物理機(jī)宕機(jī)也可以在1分鐘之內(nèi)恢復(fù)。


          計(jì)算節(jié)點(diǎn)根據(jù)業(yè)務(wù)需要快速升降配,升降配不斷連接,根據(jù)內(nèi)存大小不同升降級(jí)時(shí)間最快可到秒級(jí),實(shí)現(xiàn)計(jì)算資源的成本最優(yōu)。


          計(jì)算節(jié)點(diǎn)根據(jù)業(yè)務(wù)需要快速添加只讀節(jié)點(diǎn),一個(gè)集群支持秒級(jí)添加刪除1個(gè) - 15個(gè)只讀節(jié)點(diǎn),快速應(yīng)對(duì)業(yè)務(wù)峰值和變化場(chǎng)景。利用日志流LSN確保讀取數(shù)據(jù)時(shí)的全局一致性,避免因?yàn)橹鱾溲舆t引起的不一致。利用基于Redo的物理復(fù)制代替邏輯復(fù)制,提升主備復(fù)制的效率和穩(wěn)定性。


          8.快照備份回檔

          基于數(shù)據(jù)多版本的秒級(jí)快照備份對(duì)用戶的數(shù)據(jù)進(jìn)行連續(xù)備份保護(hù),免去主從架構(gòu)備份回檔數(shù)據(jù)的同步和搬遷,最高以GB/秒的速度極速并行回檔,保證業(yè)務(wù)數(shù)據(jù)迅速恢復(fù)。整個(gè)備份回檔流程無鎖實(shí)現(xiàn),對(duì)實(shí)例存儲(chǔ)無任何影響。



          TDSQL-C 總結(jié)


          TDSQL-C PG版性能上均優(yōu)于其他競(jìng)品,性能數(shù)倍于社區(qū)原生PostgreSQL。由于篇幅有限,具體實(shí)現(xiàn)細(xì)節(jié)并沒有詳細(xì)地闡述,本文主要全局的介紹了TDSQL-C核心架構(gòu)與關(guān)鍵技術(shù),后續(xù)文章會(huì)詳細(xì)揭秘TDSQL-C各個(gè)內(nèi)核組件具體實(shí)現(xiàn)細(xì)節(jié)。


          騰訊云數(shù)據(jù)庫團(tuán)隊(duì)也在不斷的探索更多的功能與優(yōu)化,如在執(zhí)行器優(yōu)化器探索,向量化執(zhí)行引擎,XRDMA更低延遲IO棧,MTCP面向多核的用戶態(tài)網(wǎng)絡(luò)協(xié)議棧,DB語義下推與異構(gòu)計(jì)算加速,F(xiàn)PGA存儲(chǔ)引擎加速,Hybrid Storage(Optane/DRAM/AEP/ScaleFlux)等等軟硬一體化融合工作,去追求更佳的功能性能以及用戶體驗(yàn),后續(xù)我們也會(huì)盡量給大家分享這些細(xì)節(jié)的進(jìn)展與實(shí)現(xiàn)。如果在使用TDSQL-C中遇到疑惑,不要猶豫請(qǐng)立刻聯(lián)系我們,我們會(huì)努力地為大家答疑,感謝對(duì)TDSQL-C的支持。



          相關(guān)概念


          Segment(Seg):Storage Service管理數(shù)據(jù)BLOCK和日志的最小單元(10GB),也是數(shù)據(jù)復(fù)制的實(shí)體。圖中同樣顏色的3個(gè)Segment實(shí)際存儲(chǔ)同一份數(shù)據(jù),通過一致性協(xié)議(Raft)進(jìn)行同步,我們叫做Segment Group(SG)。


          Pool:多個(gè)Segment Group(SG)從邏輯上構(gòu)成一個(gè)連續(xù)的存儲(chǔ)數(shù)據(jù)BLOCK的塊設(shè)備,供上層的CynosFileSystem分配使用。Pool和Segment是一對(duì)多的關(guān)系。



          -- 更多精彩 --


          揭秘TDSQL-A分布式執(zhí)行框架:解放OLAP關(guān)聯(lián)分析查詢性能瓶頸


          再獲認(rèn)可!騰訊云TDSQL斬獲可信云技術(shù)最佳實(shí)踐獎(jiǎng)


          多次獲得MySQL官方認(rèn)可,騰訊云數(shù)據(jù)庫怎么做到的?


          ↓↓更多驚喜優(yōu)惠請(qǐng)點(diǎn)這兒~ 

          瀏覽 78
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美成人性爱在线播放 | 91国产乱伦| 久久这里只有 | AV官网| 三级片电影久久 |