1. 程式人生 > 資料庫 >DTCC 2020 | 阿里雲趙殿奎:PolarDB的Oracle平滑遷移之路

DTCC 2020 | 阿里雲趙殿奎:PolarDB的Oracle平滑遷移之路

簡介: Oracle相容性是業務客戶從Oracle生態遷移到PolarDB生態的第一步也是至關重要的一步,PolarDB通過不斷沉澱支援大量實際業務的真實Oracle相容性功能,確保客戶業務可以真正做到平滑遷移。同時PolarDB帶給Oracle生態客戶的不僅僅是上的來的問題,PolarDB在成本、效能、可用性、擴充套件性等雲能力方面也給使用者帶來更高的業務價值。在DTCC 2020大會分散式資料庫實踐專場上,阿里巴巴高階資料庫專家趙殿奎為大家介紹阿里巴巴電PolarDB的Oracle平滑遷移之路。

演講嘉賓簡介:趙殿奎,阿里巴巴高階資料庫專家,從事OLTP資料庫和OLAP資料庫產品的研發工作10餘年,現為阿里雲PolarDB資料庫核心北京研發負責人。

以下內容根據演講視訊以及PPT整理而成。

本次分享主要圍繞以下四個方面:
一、PolarDB架構
二、PolarDB相容性
三、PolarDB增強
四、PolarDB遷移

一、PolarDB架構

PolarDB架構元件 —— CM

PolarDB架構是基於共享儲存的架構,下圖是PolarDB整體架構檢視,其中CM主要負責的工作包括整個Polar叢集的管理,Top管理,高層管理、備份管理及審計管理。CM是一個管控鏈路的核心元件,這意味著CM元件本身對於PolarDB的整個資料的可用性沒有任何影響,PolarDB的可用性完全獨立於整個資料鏈路。由於PolarDB會面向大量的使用者來使用,因此對整個架構的設計中需要把可用性放在第一位,因此每一個元件的設計也都要滿足PolarDB高可用性要求。

PolarDB架構元件 —— Agent

下圖中另一個比較重要的元件是Agent,Agent主要做什麼?很多常見資料庫會將部分功能都整合到資料庫核心裡面。但PolarDB是將很多功能放在Agent中,例如審計、資料採集、監控、備份資料傳送等等。相當於將一部分輔助性功能獨立出來,做成一個核心的元件,同時放在資料管控鏈路裡面。

其餘的還有Proxy,是讀寫路由的元件。PFSD是阿里雲的分散式檔案系統。

PolarDB既可以執行在裸機上面,就是傳統的物理機,還可以跑在國產的晶片,國產的作業系統,以及原生的 k8s上。此外阿里雲基於 k8s做了很多的增強,PolarDB同樣可以執行。這幾種形態上PolarDB都是支援的。

二、PolarDB相容性

下圖列出了在阿里巴巴很多業務場景中,使用者的用例中使用較多的功能上的相容性,目前PolarDB的研發上也是在重點支援這些功能的相容性。

PolarDB相容性 —— 介面相容

驅動介面中使用比較多的是OIC,JDBC以及ProC,基本上可以佔據99%以上。Java的是JDBC,但是可能很少碰到ProC,尤其在公共雲上的使用者可能比較少見。但線下的傳統的客戶中,如金融類的客戶會大量的使用ProC進行開發的業務程式。PolarDB基本上都可以相容OCI裡面的介面。ECPG裡面包含Oracle的ProC程式碼的相容。ECPG相容最重要的並不是在於對ProC的支援,而在於C的程式碼的相容。為什麼?因為Oracle裡面ProC所支援的各種C語言的標準是無法獲取到的。大量的SQL92,SQL2008的標準,以及目前還在不停的更新的標準都在增加對C程式碼語法的支援。PolarDB投入了很多人力做這件事情。XA C介面與ECPG中的Proc介面是結合起來使用的。目前很多PolarDB線下的客戶大量使用了基於XA C、ProC、Oracle Tuxedo結合的方式。下圖羅列了XA C介面的一些功能,目前PolarDB基本上都可以支援。其中最難的是tpsuspend,目前已經解決了。

PolarDB相容性 —— 語法相容性

語法的相容性中包括資料型別、系統函式、偽列、PL/SQL、系統圖以及系統包是比較常用的。但使用者最常用的是空串,每一個使用Oracle資料庫的業務應用都會用到這個特點,但是這個特點往往是很多的資料庫產品並沒有支援到的,導致這些資料庫產品往往可能會在業務的執行的過程中出現很多資料性的問題。到目前為止,Oracle裡面的 PL/SQL,PolarDB大概已經接入了80%多。在Oracle整個的遷移的過程中,大量的業務對 PL/SQL的程式碼幾乎是一行都不需要更改。這意味著是PolarDB對於 Oracle PL/SQ的相容性已經非常精準,可以滿足大多數的業務場景。系統函式、檢視和系統包,PolarDB大概可以支援30多個,這基本上足夠了,下圖中還列出來比較常用的偽列。

PolarDB相容性 —— 功能相容性

功能相容性中分割槽非常常用。主要的一些分割槽功能PolarDB都是支援的。對於大規模使用者來說,較為常用的是多層次查詢,大家可能以為層次查詢支援起來比較簡單,但後來發現這往往是使用者非常關心的特性,因此對效能要求非常高。很多資料庫產品層次查詢的實踐方法基本一致,通過WITH語句的迭代,遞迴來實現,但這種方法的效能往往比較差。因此PolarDB在層次查詢功能的實現上從運算元層面做了大量的工作。表函式也是使用者使用的特別多的功能,類似於一個pipeline,一個表的輸出作為另一個表的輸入。使用者在DBLINK功能上的使用特別多。公有云產品和線下打通之後,發現反而在安全性的保障上難度難道非常大。線上和線下,公有云和混合雲之間能夠做到資料相互訪問,最大的一個困難就在於安全。資源管理,Oracle裡面有一個Resource Manager,PolarDB也在逐步的完善這個功能,PolarDB現在能夠做到CPU和記憶體的隔離,同時可以做到資料庫級別、甚至到使用者級別的資源的隔離和限制。DBLINK方面,現在可以支援與Oracle DBLINK, 與PG的DBLINK,與阿里雲 PolarDB DBLINK,以及公雲上的PolarDB和PolarDB之間的DBLINK,可以支援線上的PolarDB與線下的Oracle之間的DBLINK。

PolarDB相容性 —— 生態相容性

生態相容性 —— AWR

2020年上半年阿里雲花了很多人力在PolarDB生態相容性上。目前公有云的效能監控已經可以做到秒級,為什麼還需要做AWR?AWR其實相當於是兩次狀態之間的快照,使用者可以檢視中間的Workload是什麼樣子的。阿里雲在走訪了很多的客戶之後發現使用者在進行大量業務遷移的時候,很多的運維同學和DBA同學對AWR需求非常強烈。由於線下使用者對業務以及整個的遷移執行過程中穩定性要求非常高,因此他們很少會開細粒度的監控。而且也不允許監控的資料能夠對外展示。這時就需要利用AWR將兩個時間差之間負載資料拿到,根據整體負載情況判斷系統的健康情況。如果客戶的生產系統之前使用的是Oracle,那麼也會在Oracle上跑AWR上,與PolarDB上的AWR進行對比,分析資料庫效能在遷移之前和之後的差異。AWR中可以看到記憶體、CPU、IO的負載情況,甚至還有IO的吞吐、磁碟佔用、IOPS、網路等資源資料。資料收集上來之後進行分析,哪些負載較高,分析負載高的原因。基於負載情況分析SQL狀態,是否有慢查詢,連線狀態中是否有空載。目前大多數資料庫效能資料都可以通過AWR展示出來。之後,基於AWR資料,比如慢查詢,會給使用者提供優化的建議。目前這部分功能還在迭代,通過整個執行的過程中所發生的事件,展示到AWR,分析是否有HA切換,或者出現硬體故障,以及網路延遲。同時在AWR中展示硬體、主機的資訊。

生態相容 —— DataMax(ADG)

生態相容DataMax類似於Oracle的ADG。這個功能已經線上下的大量的公共雲上都發布完成。目前公有云的主備已經做得很好了,那PolarDB為什麼還要做DataMax?而且是類似於Oracle的ADG?事實上PolarDB關注的Oracle的ADG中的Far Sync能力,它可以極大地降低對主庫的讀寫負載。Far Sync可以首先將資料同步到 DataMax。因此可用性可以比原來的主備模式更高。DataMax這個節點變成了一個非常特殊的節點,DataMax節點只有日誌沒有資料,而且日誌只負責轉發。DataMax計算非常簡單,只需要將日誌進行解析,然後轉發出去,因此可以做到更高的可用性,DataMax工作非常輕量,因此延遲較低,可以做到更高的RTO,同時又可以提高效能。DataMax可以同時掛很多Replication節點。可以發現,目前PolarDB很多工作一直在圍繞幾件事情,一個是提高相容性,第二個是可用性,提高PolarDB整個系統的可用性,使得RPO接近零。

生態相容 —— DTS(OGG)

DTS是資料同步工具,DTS支援資料資料全量遷移、資料增量同步、資料訂閱SDK以及多種主流異構資料庫,如MySQL,SQL Server、雲上、雲下、自建資料庫。目前資料同步也支援雙向的資料同步。使用者生產系統同步的時候,並不是一次性同步過來的,而是一部分一次,一點一點同步。因此資料同步也是雙向的,可以將一部分業務資料寫到PolarDB,一部分業務寫到Oracle。使用者從Oracle資料同步到PolarDB,還有PolarDB的資料同步到Oracle上面,這類使用者非常多。他們的資料同步可以通過DTS來完成。

生態相容 —— DBS(RMAN)

DBS類似於Oracle RMAN,備份管理工具。DBS支援全量備份,增量備份,差異備份。基於DBS能力可以做到源端重刪、本地快取、儲存驅動。DBS具備自己的指紋庫,從而提升資料備份的安全性。備份的資料可以存到DBS支援的源端,包括NAS、磁帶庫,OSS。很多線下大b和大g的客戶經常使用磁帶庫,這是在做大量的線下客戶的支援的過程中發現的。

生態相容 —— PolarPlus(SQLPlus)

PolarPlus與SQL Plus非常相似。感興趣的同學可以參考PolarDB的官方文件。

生態相容 —— 開發工具(DBNavigator)

開發工具主要是通過DBNavigator做的。目前開發工具使用者使用的比較多,尤其是PG生態同學。當然還有很多其它的工具,但是DBNavigator好處在於集成了驅動之後,可以與DBMS_Debug的包連起來,支援 PL/SQL的Debug,使用起來非常方便。


上面總體上介紹了PolarDB在相容性方面做的工作,包括介面、語法、功能以及生態方面。尤其在生態相容方面PolarDB做了支援資料庫健康狀態監控的AWR工具、DataMax資料節點、DTS資料同步工具、DBS備份管理工具、DBNavigator開發工具等。那麼在Oracle的相容性之上,PolarDB還做了哪些增強?

三、PolarDB增強

1. PolarDB增強 —— 效能優化CSN

效能優化方面PolarDB做了CSN快照,對PG社群關注的比較多的話,會看到在2012年的時候,PG社群就提出要做CSN快照。什麼是快照?PolarDB快照獲取方式是比較特殊。與MySQL相似,叫做XID快照,既獲取當前系統的活躍事務連結串列,加上XMIN、XMAX,構造成一個快照,判斷哪些資料是可見的,哪些是不可見的。PolarDB CSN快照同理,CSN快照是在CSN上加了一個XMINXMAX。CSN快照可以提供更高的效能。在高併發情況下,活躍事務特別多,快照的動作非常慢,因為需要做記憶體拷貝。記憶體拷貝的動作有一個鎖,這會造成整個業務系統併發的衝突問題。通過測試發現,在沒有使用CSN快照之前,大概最多到40萬TPMC,再往上增加規格時,獲取事務的表的衝突非常嚴重。通過CSN快照,目前在32c之上,一直到128c,大概基本上可以做到線性。使用者在公有云上在業務系統變化越來越大的情況下,可以通過升級使用者業務的規格,為他們帶來效能上的收益。

那麼PG社群自從2012年提出來,到現在還沒做出來,技術上難點在什麼地方?其實在於CSN的設計非常複雜,它涉及到事務、儲存、日誌等。但阿里大概花費了一年的時間就做出來了,這是因為可以將CSN快照與差異快照結合起來,所有與生態相關、或影響生態的功能繼續保留,那麼最大的技術難點在於如何找到CSN快照與差異快照的對映關係。這是阿里做成CSN快照的主要原因。但之後再繼續設計的時候還是會遇到很多的問題,如做成外掛或者工具的話,外掛或者工具的相容問題如何解決,與生態的相容性問題如何解決,備份恢復如何處理?

PolarDB增強 —— DMA高可用

DMA高可用,既基於Raft三節點做的高可用的提升。Raft三節點可以做到RPO等於0,Follower副本只讀,支援容器化部署,相容主備高可用,CM一體化架構,同城三節點達到同城可能性。

PolarDB增強 —— Ganos

Ganos是一款包含管理,空間幾何資料、時空軌跡、專題柵格、遙感影像的時空大資料引擎系統。系統內建了高效的時空索引演算法、空間拓撲幾何演算法、遙感影像處理演算法等。廣泛應用於空間、時空、遙感大資料儲存。Ganos系統在很多的實際場景中被投入使用,如高德地圖。

PolarDB增強 —— Performance Insight

大家在公有云上使用PolarDB的時候會發現效能指標非常完整,大量的效能指標通過圖表的形式非常清晰的展示給使用者,包括連線Connections、CPU使用率、記憶體使用率、IOPS負載等資料。目前這些效能資料在線上和線下,公有云和混合雲上都是同步的。

四、PolarDB遷移

PolarDB遷移 —— ADAM

資料庫和應用遷移(Advanced Database & Application Migration, 以下簡稱ADAM)。目前PolarDB的遷移過程中,使用者幾乎不需要修改程式碼,遷移的時間越來越短的主要的原因是ADAM。ADAM是阿里雲結合阿里巴巴多年內部業務系統資料庫和應用異構遷移的經驗,自主研發的、遷移Oracle資料庫和應用上雲的企業級遷雲產品和解決方案,能幫助企業最大限度降低Oracle資料庫和應用遷移上雲的風險、技術難度和實施週期。ADAM可以做到線上,線下的使用者直接部署到自己的使用者端,通過對使用者端的程式碼進行掃描,採集使用者資料,分析使用者程式碼中Oracle的部分哪些是相容的,哪些是不相容的,分析如何改進。ADAM還可以自動的對不相容的程式碼進行改寫,包括SQL翻譯、資料庫改造、應用改造、PL/SQL改寫成JAVA。ADAM在使用者遷移到PolarDB的過程中,採集了大量的使用者的特徵,當然使用者已經授權了,分析使用者在遷移過程中哪些功能PolarDB不支援。通過近兩年的不斷的對Oracle功能的相容性迭代,PolarDB基本已經支援調研的Top 100以內的功能。這使得大多數業務系統遷移到PolarDB越來越快,越來越方便。

PolarDB遷移週期

下圖是使用者業務系統從開始準備遷移,到最後遷移完成會經歷的過程以及會使用到的PolarDB生態中的工具。最開始使用ADAM接入,在業務系統上執行,獲取到相容性指標、使用者資料庫中各項效能指標負載情況、評估技術可行性;然後在新的Polar上通過Benchmark做測試;滿足使用者效能要求之後,通過DTS資料全量和增量遷移,完成雙向的資料同步;再通過DMS&Console完成資料庫的管理,包括備份、審計等;使用Performance Insight監控使用者的在PolarDB上效能指標;隨著使用者業務量的增加,平滑的支援業務需求。整個過程可以確保客戶業務真正做到平滑遷移。

作者:stromal

本文為阿里雲原創內容,未經允許不得轉載