閱讀121 返回首頁    go 阿裏雲 go 技術社區[雲棲]


關於Oracle Sharding,你想知道的都在這裏

編輯手記:隨著Oracle12.2的發布,Sharding技術也逐漸變得越來越強大,關於Sharding,你所關心的問題的答案,可能都在這裏。

注:本文來自Oracle FAQ文檔翻譯


相關閱讀:

1、Oracle 12.2 Sharding技術揭秘

2、Oracle 12.2新特性-Sharding 的增強

3、針對Sharding單點故障的HA架構

4、Oracle 12.2的Sharding基礎概念解讀


什麼是Oracle Sharding

Oracle Sharding是為OLTP應用程序定製設計的一種可擴展、支持高可用功能的架構,能夠在不具有共享硬件或軟件的Oracle數據庫池中分發和複製數據。 數據庫池作為單個邏輯數據庫呈現給應用程序,應用程序通過在池中添加額外的數據庫(分片),可以在任何平台上彈性擴展(數據,事務和用戶)到任何級別, 使用Oracle數據庫12.2.0.1的第一個版本支持擴展到1000個分片。


1、Oracle Sharding 的優勢

與使用類似的可伸縮性方法的本地部署相比,Oracle Sharding提供了卓越的運行時性能和更簡單的生命周期管理;還提供了企業DBMS的優勢,包括:關係模式,SQL和其他編程接口,支持複雜數據類型,在線模式更改,多核可擴展性,高級安全性,壓縮,高可用性,ACID屬性,一致性 閱讀,使用JSON的開發人員敏捷性等等。


Oracle分片使用水平分區在分片之間分布數據,通過分片分割數據庫表,以便每個分片包含具有相同列但行的不同子集的表。


  • 從數據庫管理員的角度來看,SDB由可以集中或單獨管理的多個數據庫組成。

  • 從應用程序開發人員的角度來看,SDB看起來像一個單一的數據庫:分片的數量和跨越它們的數據的分布對數據庫應用程序是完全透明的。 應用程序發出的SQL語句不引用分片,也不取決於分片數及其配置。


2、Oracle Sharding 架構設計上的考慮

OLTP應用程序必須明確地為Sharding架構設計,以便實現可擴展性和可用性的好處。 這不同於基於Oracle RAC的HA架構,RAC中可擴展性和可用性對應用程序是透明的。 使用分片數據庫的應用程序必須具有明確定義的數據模型和數據分發策略(一致的哈希,範圍,列表或組合),主要通過分片鍵訪問數據。 分片鍵的示例包括customer_id,account_no,country_id等。Oracle Sharding還支持數據放置策略(機架和地理位置感知)以及所有部署模型:內部部署模式和公共雲或混合雲。


對性能要求較高的事務必須是通常訪問10行或100行的單分片事務。例如,查找和更新客戶的記帳記錄,查找和更新訂戶的文檔等。在用於高性能事務的分片之間沒有通信或協調。


當然還支持多分片操作和非分片鍵訪問,但可能會對性能產生影響。這種交易包括簡單的聚合,報告等 - 通常小於總工作量的10%。


3、Oracle Sharding 高可用、可擴展性的實現

在上述的設計考慮的基礎上,在分片數據庫架構上運行的應用程序可以實現更高級別的可伸縮性和可用性。Sharding 數據庫的性能會隨著池中分片的增加而線性增長,因為每個分片之間是彼此獨立的。每個分片通常使用本地存儲、閃存和內存,為客戶進行性能優化提供了相對低的成本。第一個版本的Oracle Sharding旨在擴展到1,000個分片。分片之間彼此獨立意味著一個分片的中斷或性能較差不會影響在其他分片上執行的事務的可用性或性能。


單個分片的高可用性(HA)由數據庫複製的自動部署提供。默認配置是具有自動數據庫故障轉移的單向Data Guard物理複製,其實現起來非常簡單。還可以自動部署Active Data Guard(複製打開隻讀)或Oracle GoldenGate(雙向複製,所有副本均為打開讀寫)。碎片可以在數據中心內和跨數據中心進行複製,複製是使用Oracle Sharding支持的數據放置策略的數據中心和機架感知實現的,當然也可以手動配置Oracle RAC以提供Shard HA。


碎片是由一組稱為Shard Director的複製偵聽器作為路由器的前端。 Oracle客戶端(JDBC,OCI和ODP.net)和Oracle通用連接池(UCP)已得到增強,可識別連接字符串中指定的分片鍵,並通過控製每個分片允許的最大連接數確保可用性。連接層中的分片路由緩存(由分片的初始請求填充)用於將請求直接路由到數據所在的分片,以實現最佳運行時性能。如果對分片數據庫進行任何更改(例如自動重新平衡或添加/刪除分片),則會自動刷新分片路由緩存。


為什麼Oracle Sharding受到廣泛關注

Oracle Sharding是響應客戶對數據庫架構的需求,可以提供線性可擴展性和完全故障隔離的組合,而無需共享存儲或損害Oracle數據庫的企業質量:嚴格的一致性,SQL的全部功能,開發人員敏捷性 具有JSON,安全性,高可用性,備份和恢複,生命周期管理等。


Oracle Sharding不僅僅將Oracle的企業質量擴展到分片式數據庫架構, 並且通過使用自動化來簡化生命周期管理,高級分區方法來解決各種各樣的場景案例以及數據相關的路由,以實現卓越的運行時性能。 與競爭性分片解決方案或定製部署相比,這些功能為客戶提供了顯著的優勢。


1、Oracle Sharding 在12.2版本中的新特性

Oracle 12.2在Sharding方麵增加了許多新的優勢:

  1. 具有完全故障隔離的線性可擴展性。用於Oracle分區的OLTP應用程序可以在任何平台上彈性擴展(數據,事務和用戶)到任何級別,隻需在額外的獨立服務器上部署新的分片。由於計劃外中斷或計劃維護而導致的碎片不可用或減速隻影響該碎片的用戶,但不會影響其他碎片用戶的應用程序的可用性或性能。每個分片可以運行不同版本的Oracle數據庫,隻要應用程序與最早運行的版本向後兼容即可 - 從而在執行數據庫維護時輕鬆維護應用程序的可用性。

  2. 全球數據分布,為消費者帶來數據和數據主權,以滿足數據隱私法規。

  3. 多生命周期管理任務的自動化簡化,這些任務包括:自動創建分片和複製,係統管理分區,單一命令部署和細粒度重新平衡。

  4. 使用智能、數據相關的路由,實現卓越的運行時性能。

  5. 在不犧牲企業RDBMS功能的情況下實現分片的所有優點。包括:關係模式,SQL和其他編程接口,複雜數據類型,在線模式更改,多核可擴展性,高級安全性,壓縮,高可用性, ACID屬性,一致性讀取,開發人員與JSON的敏捷性等。


2、設計Oracle Sharding 的意義

Oracle Sharding使用用於部署和管理分片式數據庫架構的全麵解決方案來替代本地的分片方法。 Oracle分片提供了跨分片分布表分區的新自動化,自動部署分片式數據庫,包括HA和數據保護的複製,高性能路由,負載平衡和完整的生命周期管理。


Oracle Sharding還針對分片用例顯式優化了Oracle數據庫經過時間驗證的企業功能。 包括Oracle分區、Data Guard、Active Data Guard、GoldenGate、JDBC / OCI / ODP.NET連接池、DBCA、OEM、Oracle RAC等。


應用程序使用Oracle Sharding需要什麼條件?

並非所有應用程序都可以利用分片數據庫。 Oracle Sharding適用於為分片式數據庫架構顯式設計的OLTP應用程序。需滿足以下條件:

  • 應用程序必須有一個明確定義的數據模型和數據分布策略(散列,範圍,列表或複合),主要通過某個鍵訪問數據。 密鑰的示例包括客戶ID,帳戶號,country_id等。

  • 所有需要高性能的事務必須是單分片事務。 這些事務為高性能路由提供了一個分片鍵,通常訪問10或100行。 例如,查找和更新客戶的記帳記錄,查找和更新訂戶的文檔等

  • 支持多分片操作或非分片鍵訪問,但性能會降低。 這種交易包括簡單的聚合,報告等 - 通常小於總工作量的10%。


Oracle Sharding與其他高可用架構的對比

1、Oracle Sharding 與RAC

  • Oracle RAC和Active Data Guard的組合為OLTP和分析應用程序提供了透明的橫向擴展和可用性,並且可以滿足99 +%的用例需求。 使用Oracle RAC,所有事務可以對數據庫中的任何數據起作用,沒有必要分區數據或關注多分片操作的性能,所有RAC實例共享對同一物理數據庫的直接訪問。


  • Oracle Sharding犧牲了透明性,為定製設計的OLTP應用程序提供了巨大的可擴展性和高可用性。 使用Oracle Sharding,應用程序被設計為使更新事務對單個分片中的數據起作用。 跨越多個分片的事務不會受益於與單分片事務相同的性能和可伸縮性。


Q:在什麼場景下使用Oracle Sharding 而不是RAC?

有以下兩種情況:

1、當Oracle Enterprise Architect或客戶決定Oracle RAC無法解決當前或未來的可擴展性和可用性要求時,Oracle Sharding會成為首選解決方案;

2、當應用程序被明確地設計用於分片數據庫時。


注意,分片和Oracle RAC不是互斥的。分片可以使用Oracle RAC或RAC One節點代替複製HA。第一個版本的Oracle Sharding的唯一注意事項是RAC必須手動配置; Oracle Sharding不提供使用DEPLOY命令自動部署RAC配置,就像Data Guard / Active Data Guard和Oracle GoldenGate一樣。正在考慮在將來的版本中自動部署RAC配置。


2、Oracle Sharding 與多租戶

Oracle多租戶是SaaS和其他數據庫應用程序的整合解決方案; Oracle Sharding是高容量OLTP係統的可擴展性和高可用性解決方案。


Oracle Multitenant支持用於SaaS應用程序的DBaaS以及私有、公共和開發/測試雲。它提供了將數據庫聯合在一起成為邏輯數據庫的基礎設施,以實現對應用程序透明的所有數據的高性能查詢。 Oracle Multitenant通過為Oracle數據庫提供最高的整合密度以及將多個集成為一體的簡單性,為降低資本和運營成本提供了獨特的優勢。


Oracle Sharding為定製設計的OLTP應用程序提供了巨大的可擴展性和高可用性。更新事務必須指定分片密鑰,並對單個分片中的數據執行操作,以便受益於分片式數據庫架構承諾的高性能和可用性。支持多分片操作或非分片鍵訪問,但性能降低。這樣的事務包括簡單的聚合,報告等 - 理想地小於分片數據庫的總工作負載的10%。


Q:Oracle Sharding是否支持多租戶?

Oracle Sharding(12.2.0.1)的初始版本不支持Oracle Multitenant。 計劃在將來的版本中支持單租戶容器數據庫,支持多租戶容器數據庫。


有同時包含Oracle Sharding和多租戶的場景案例嗎?

有, 當提供對Oracle Multitenant的分區支持時,每個分片將是一個PDB,並且將受益於Multitenant提供任何其他PDB的敏捷性的相同優勢。 示例包括:

  • 簡單地通過從其當前CDB拔出並將其插入到更高版本的CDB中來簡化多租戶架構中的分片。

  • 遷移到Oracle Cloud和從Oracle Cloud遷移的簡單性。 可以拔除作為PDB的內部部署分片,然後插入Oracle雲。

  • 碎片的PDB克隆。


3、Oracle Sharding 與Oracle MAA

Oracle Sharding是Oracle MAA的自然演進,旨在解決針對定製開發的OLTP應用程序的大規模可擴展性和完全故障隔離的特殊用例。 適用於Oracle數據庫的所有Oracle MAA原則也適用於包含SDB的各個分片。 將擴展Oracle MAA最佳實踐,以解決SDB配置和管理的任何獨特注意事項。


4、Oracle Sharding 如何與Oracle集成係統相關?

Oracle Sharding是與大多數其他功能一樣的硬件平台,屬於Oracle MAA可擴展性和可用性解決方案的保護範圍。


Oracle Sharding將受益於底層硬件平台提供的數據庫工作負載的任何優勢。 這意味著Oracle集成係統提供的數據庫性能,可用性和可管理性的所有常見優點也會使在此類係統上運行的分片數據庫受益。


Oracle Sharding背後的技術實現

1、數據在分片之間如何分配?

Oracle Sharding使用水平分區來跨分片(離散物理數據庫)分割數據庫表,以便每個分片包含具有相同列但行的不同子集的表。


跨分片的分區的分布在表空間級別完成。分片表的每個分區駐留在單獨的表空間中,每個表空間與特定分片相關聯。每個分片上的表分區與非分片Oracle數據庫中使用的常規分區沒有區別。即使表的分區駐留在多個數據庫中,對應用程序開發人員來說,表的外觀和行為與單個數據庫中的常規分區表完全相同。應用程序發出的SQL語句從不引用分片,也不依賴於分片數及其配置。


Oracle Sharding提供了幾種可選的分區方法,可以自動或由用戶確定數據的分布,或兩者的組合。


2、Oracle支持哪些類型的分片方法?

Oracle Sharding支持三種分片方法:係統管理,用戶定義和複合分片。

  1. 係統管理的分片不要求用戶指定數據到分片的映射。使用按照一致性哈希分區,自動在分片中分布數據。分區算法均勻且隨機地在分片之間分布數據。這種分布旨在消除熱點並在整個碎片上提供均勻的性能。當向SDB添加或從SDB中刪除分片時,Oracle Sharding會自動維護平衡的數據分布。係統管理的分片使用為Oracle Sharding優化的一致性哈希分區策略。係統管理的分片是最常用的分片形式。

  2. 用戶定義的分片允許用戶明確指定數據到各個分片的映射。當由於性能,法規或其他原因,某些數據需要存儲在特定分片上,並且用戶需要對分片之間的數據移動進行完全控製時使用。用戶定義的分片的另一個優點是,在分片的計劃或計劃外中斷的情況下,用戶準確地知道什麼數據不可用。用戶定義的分片的缺點是用戶需要監視和維護跨分片的數據和工作負載的平衡分布。用戶定義的分片使用範圍或列表分區策略。

  3. 複合分片是用戶定義和係統管理的分片的組合,在需要時提供這兩種方法的優點。使用複合分片,數據首先按列表或範圍分區,然後通過一致的散列進一步分區。這兩個級別的分片使得可以將數據映射到一組分片,然後自動保持該組分片上的數據的平衡分布。


3、如何在單個分片上包含多個事務?

對於許多應用程序,可以通過將水平分區與跨所有分片的少量隻讀或讀取主表的複製結合來實現高百分比的單分片操作。對於通常與分片表一起訪問的相對較小的表,完整表的複製是一個不錯的選擇。在每個分片中具有相同內容的表稱為重複表。


Oracle Sharding使用物化視圖複製來同步重複表的內容。每個分片上的重複表由隻讀物化視圖表示。物化視圖的主表位於稱為碎片目錄的特殊數據庫中。所有分片上的物化視圖都將以可配置的頻率自動刷新。 CREATE DUPLICATED TABLE自動創建主表,物化視圖和物化視圖複製所需的其他對象。


4、應用程序如何知道它在運行時必須連接到哪個分片?

應用程序必須指定一個分片鍵,以使用分片式數據庫架構實現高性能。例如,網上銀行應用程序可以設計為使用當用戶作為分片鍵登錄時生成的customer_id。


當處理數據庫事務時,應用程序將分片鍵傳遞到連接層:

  • Oracle JDBC,OCI和ODP.net客戶端能夠識別連接字符串中指定的分段鍵,以實現高性能數據相關的路由。連接層中的分片路由緩存用於將請求直接路由到數據所在的分片。

  • 用於JDBC客戶端的Oracle通用連接池(UCP)還能夠識別連接URL中指定的分片鍵。分片路由緩存用於將連接直接路由到數據所在的分片。 Oracle UCP還支持非Oracle應用程序客戶端(如Apache Tomcat,WebSphere等)與Oracle Sharding一起使用。


例如,UCP分片路由緩存包含分片鍵範圍到分片的映射。當應用程序通過分片鍵檢出連接時,UCP從其路由緩存中查找其上存在此鍵的相應分片。如果池中有匹配的連接可用,則UCP通過應用其內部連接選擇算法來返回到這些分片中的一個的連接。如果沒有匹配的連接,則通過將具有分片關鍵字的請求轉發到Shard Director來創建新的連接。在第一次連接到分片時,連接池檢索分片中的所有鍵範圍,並將它們添加到其路由緩存中,以便後續連接直接轉到分片(即繞過Shard Director)。


如果分片不可用,客戶端連接將自動重定向到HA的分片副本。


5、如果重新平衡數據或添加/刪除碎片,則路由緩存如何更新?

所有重新平衡和添加/刪除分片操作都由SDB管理層(Shard Catalog和Shard Director)執行。在所有這些操作期間,SDB保持可用並在線。一旦重新平衡完成,分片路由高速緩存將失效,並在下次將連接路由到分片時自動刷新。


6、如何在多個shard之間重新平衡工作負載?

在以下情況下需要跨分片的數據遷移:

  • 當一個或多個分片添加到SDB或從SDB中刪除時

  • 當跨分片的數據或工作負載分布存在偏差時


在由分片數量變化觸發的分片之間重新分布數據的過程稱為重新分片。自動重新分片可以在SDB上提供統一的數據分布。要理解這是如何完成的,有必要了解如何在碎片上物理分區數據。


跨分片的分區分布通過在駐留在不同分片上的表空間中創建分區來實現。為了最小化多分片連接的數量,表族中所有表的相應分區總是存儲在同一分片中。分片表的每個分區存儲在單獨的表空間中。因此,表空間是SDB中的數據分布的物理單位。


分片之間的數據遷移單位是塊。塊是一組表空間,用於存儲表係列中所有表的相應分區。塊包含來自表係列的每個表的單個分區。這保證來自不同分片表的相關數據一起移動。在創建SDB時指定每個分片中的塊數。圖1顯示了一個具有3個塊的碎片。每個塊都包含一組包含來自多個分片表的相關數據的分區。還顯示了駐留在所有分片上存在的非分片表空間(Stockitems)中的重複表。


當向SDB添加或從SDB中刪除分片時,會遷移多個塊以保持跨分片的數據和工作負載的均衡分布。 根據分片方法,重新分片自動發生或由用戶指示。


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

當發生數據或工作負載傾斜時,特定塊也可以從一個碎片移動到另一個碎片,而碎片數量沒有任何變化。在這種情況下,塊遷移由DBA啟動以消除熱點。或者,Oracle Sharding也支持在線拆分一個塊。當塊變得太大時,或者隻有一部分塊必須遷移到另一個塊時,需要拆分。


RMAN增量備份,可傳輸表空間和Oracle Notification Service技術用於將塊遷移對應用程序可用性的影響降至最低。塊在塊遷移期間保持聯機。當存儲在塊中的數據僅可用於隻讀訪問時,有一段很短的時間(幾秒鍾)。遷移組塊的過程由管理員自動啟動。


啟用FAN的客戶端在塊即將在源分片中變為隻讀時,以及在完成塊遷移時在目標分片中完全可用時接收通知。當客戶端接收到“chunk read-only”事件時,它們可以重複連接嚐試,直到塊移動完成,或訪問源塊中的隻讀塊。在後一種情況下,嚐試寫入塊將導致運行時錯誤。


7、分片如何提供線性可伸縮性?

線性可擴展性通過消除碎片之間的任何依賴性來實現。 每個分片是獨立的Oracle數據庫,不共享任何硬件或軟件。 需要高性能和可擴展性的事務隻訪問單個分片中包含的數據。 設計用於Oracle分區的OLTP應用程序可以在任何平台上彈性擴展(數據,事務和用戶)到任何級別,隻需在額外的獨立服務器上部署新的分片。 每個分片通常使用本地存儲器,閃存和存儲器,提供以相對低的成本進一步優化性能的機會。


通過應用程序提供的分片鍵和Oracle客戶端(JDBC,OCI和ODP.net)及Oracle通用連接池(UCP)支持的高性能數據相關路由,將工作負載定向到相應的分片。 分片鍵的示例包括:customer_id,account_no,country_id等。


8、分片如何實現故障隔離?

根據定義,每個分片是獨立的Oracle數據庫,不與其他分片共享硬件或軟件。一個或多個碎片的中斷或減速不會影響其他碎片上應用程序的可用性。在分片級別用於HA的複製在分片經曆中斷時快速恢複可用性。同樣,一個分片的計劃維護不會影響其他分片的可用性。


另外,分片導向器和分片目錄數據庫的其他組件也有助於消除單點故障。碎片導向器是一個非常輕量級的進程,不包括Oracle數據庫實例。冗餘碎片引導器部署在每個區域內部署碎片,以確保對SDB的連續應用程序訪問。分片目錄數據庫使用Oracle Data Guard複製和自動故障轉移來提供高可用性。目錄數據庫對運行時連接的路由沒有影響 - 客戶端連接使用分片路由緩存來實現高性能數據相關的路由。在Data Guard自動故障轉移期間,目錄數據庫的瞬時不可用性僅導致碎片維護操作或多分片查詢的短暫中斷。


9、如何為分片數據庫實施高可用性和災難恢複?

用於任何Oracle數據庫的所有常用Oracle高可用性解決方案也用於為分片式數據庫提供HA,備份和恢複以及災難恢複。

  1. 具有自動數據庫故障轉移的Data Guard是用於計劃外中斷和計劃維護的默認HA配置,並自動為每個分片部署;

  2. 管理員可以自動部署Active Data Guard(所有分片副本以隻讀方式打開)或Oracle GoldenGate雙向複製用於分片HA;

  3. 管理員可以手動配置用於分片HA的Oracle RAC

  4. Oracle恢複管理器(RMAN)和閃回在提供分片級別的備份和基於時間點的恢複

  5. 零數據丟失恢複設備提供高效的企業備份和恢複。恢複設備可以執行實時備份,從而保護SDB中的每個事務。

  6. 每個分片的其他遠程副本由Data Guard,Active Data Guard或Oracle GoldenGate維護,並為站點中斷提供實時災難恢複和數據保護。

  7. 基於版本的重新定義在部署修改後端數據庫對象的應用程序的新版本時提供了對分片的在線修補。


雲上支持Oracle Sharding嗎?

Oracle數據庫雲服務(PaaS)目前不提供用於部署分片數據庫的整體自動化,但 使用Oracle數據庫雲服務自動部署Oracle Sharding將會在2017年被列入計劃,計劃支持混合雲和全部雲部署模型,以及單數據中心和多數據中心部署。

然後,Oracle Sharded數據庫可以使用cookbook部署在Oracle Cloud(DBCS實例)上。


Q:如何為Oracle Cloud(PaaS)授權Oracle Sharding?

使用DBCS EE和DBCS EE高性能(HP),僅限使用三個主分片。 (待機分片數量沒有限製);使用DBCS EE極端性能(EP)和Exadata雲服務(ECS),對主分片或備用分片數量沒有限製。


文章轉自數據和雲公眾號,原文鏈接

最後更新:2017-07-18 10:03:07

  上一篇:go  【12.2新特性】在Oracle Active Data Guard上部署列式存儲
  下一篇:go  如何將MySQL GR 設置為多主模式