Azure 服務匯流排異地複寫 (預覽)
服務匯流排異地複寫功能是隔離 Azure 服務匯流排應用程式與中斷和災害的選項之一,可提供中繼資料 (實體、組態、屬性) 和資料 (訊息資料和訊息屬性/狀態變更) 的複寫。
注意
此功能適用於 Azure 服務匯流排的進階層。
異地複寫功能可確保命名空間的中繼資料和資料會持續從主要區域複寫至一或多個次要區域。
- 佇列、主題、訂閱和篩選。
- 位於實體中的資料。
- 在命名空間內針對訊息所執行的所有狀態變更和屬性變更。
- 命名空間設定。
注意
目前只支援單一次要來源。
此功能可讓您隨時將任何次要區域升階為主要區域。 升階次要來源會重新將命名空間的名稱指向已選取的次要區域,並在主要和次要區域之間切換角色。 升階一旦起始,幾乎立即完成。
重要
- 此功能目前為公開預覽,因此不應用於實際執行案例。
- 下列區域目前以公開預覽形式支援。
區域 | 區域 | 區域 |
---|---|---|
澳大利亞中部 | GermanyNorth | NorwayWest |
AustraliaCentral2 | GermanyWestCentral | 波蘭中心 |
澳大利亞東部 | 以色列Central | SouthAfricaNorth |
澳大利亞東南部 | 義大利諾思 | SouthAfricaWest |
BrazilSoutheast | JapanEast | SoutheastAsia |
CanadaCentral | JapanWest | SouthIndia |
加拿大東部 | JioIndiaCentral | 西班牙中心 |
CentralIndia | JioIndiaWest | SwedenCentral |
CentralUS | KoreaCentral | SwitzerlandNorth |
CentralUSEUAP | KoreaSouth | SwitzerlandWest |
EastAsia | 墨西哥中心 | UAECentral |
EastUS2 | NorthCentralUS | UAENorth |
FranceCentral | 北歐 | 英國南部 |
FranceSouth | NorwayEast | UKWest |
- 這項功能目前僅在新的命名空間提供使用。 如果命名空間之前已啟用此功能,則可以透過移除次要區域來停用,然後重新啟用。
- 目前不支援下列功能。 我們正持續致力於新增更多功能至公開預覽版,並在此清單上更新最新狀態。
- 大型訊息支援。
- VNET/進階網路功能 (私人端點、IP ACL、NSP、服務端點)。
- 身分識別 (MSI、停用本機驗證) 和加密設定 (客戶自控金鑰 (CMK) 或攜帶您自己的金鑰 (BYOK))。
- 自動調整。
- 分割的命名空間。
- 將事件傳送至事件方格。
- 此功能無法與 Azure 服務匯流排異地災害復原功能搭配使用。
異地複寫功能可用來實作不同的案例,如此處所描述。
主要和次要區域之間會持續同步處理資料和中繼資料。 如果區域延遲或無法使用,您可以將次要區域升階為主要區域。 此升級允許在新升階區域中進行不間斷作業的工作負載。 這類升級可能需要降低服務匯流排或工作負載內的其他服務,特別是當您的目標是一起執行各種元件時。 視嚴重性和受影響的服務而定,您可以規劃或強制升階。 在計劃性升階的情況下,完成升階之前會先複寫正在傳輸的訊息,而在強制升階的情況下則會立即執行。
有時您想要移轉服務匯流排工作負載,以在不同的區域中執行。 例如,當 Azure 新增在地理上更接近您的位置、使用者或其他服務的新區域時。 或者,當大部分工作負載執行所在的區域已轉移時,您可能想要移轉。 異地複寫功能在這些情況下也提供了很好的解決方案。 在此情況下,您會在現有的命名空間上設定異地複寫,並將想要的新區域設定為次要區域,並等候同步處理完成。 此時,您會開始計劃性升階,允許複寫所有正在傳輸的訊息。 升階完成後,您現在可以選擇性地移除舊區域,現為次要區域,並繼續在想要的區域中執行您的工作負載。
異地複寫功能會在主要和次要複寫模型中實作中繼資料和資料複寫。 在特定時間會有一個單一主要區域,同時為生產者和消費者提供服務。 次要區域會作為熱備份區域,這表示無法與這些區域進行互動。 不過,它們會以與主要區域相同的組態執行,允許快速升級,這表示您的工作負載可以在完成升階後立即繼續執行。 異地複寫功能適用於 Azure 服務匯流排的進階層。
異地複寫功能的一些主要層面包含:
- 服務匯流排服務會跨區域執行中繼資料、訊息資料、訊息狀態和屬性變更的完全受控複寫,並遵循在命名空間所設定的複寫一致性。
- 單一命名空間主機名稱;成功設定已啟用異地複寫的命名空間時,使用者可以在其用戶端應用程式中使用命名空間主機名稱。 主機名稱的行為與已設定的主要和次要區域無關,且一律會指向主要區域。
- 當客戶起始升階時,主機名稱會指向已選取為新主要區域的區域。 舊的主要區域會成為次要區域。
- 無法讀取或寫入次要區域。
- 有關同步和非同步複寫模式,在此有進一步的說明。
- 從主要區域到次要區域的客戶受控升階提供了中斷解決方案的完整擁有權和可見度。 提供使用的計量可協助自動化用戶端的升階。
- 次要區域可根據客戶的判別新增或移除。
複寫模式有兩種: 同步和非同步。 了解這兩種模式之間的差異至關重要。
使用非同步複寫時,所有要求都會在主要區域上認可,接著通知會傳送至用戶端。 複寫到次要區域會以非同步方式進行。 使用者可以設定可接受的延遲時間上限。 延遲時間是主要區域與次要區域上最新動作之間的服務端位移。 如果使用中的次要區域延遲時間超出使用者設定,主要區域就會開始節流傳入要求。
使用同步複寫時,所有要求都會複寫到次要區域,且在主要區域認可前,必須在次要區域中進行認可和確認作業。 因此,您的應用程式發佈速度取決於發佈、複寫、確認和認可所需的時間。 此外,這也表示您的應用程式系結至這兩個區域的可用性。 如果次要區域延遲或無法使用,則訊息不會被確認和認可,而且主要區域會節流傳入要求。
使用同步複寫:
- 由於分散式認可作業,導致較長的延遲。
- 可用性與兩個區域的可用性相關聯。
另一方面,同步複寫可提供您資料安全的最大保證。 如果您有同步複寫,當認可時,其會在您設定的所有異地複寫區域中認可,以提供最佳的資料保證。
使用自動非同步複寫:
- 延遲會受到最小影響。
- 遺失次要區域不會立即影響可用性。 不過,一旦達到設定的最大複寫延遲時間,可用性就會受到影響。
因此,在認可資料之前,其不能保證所有區域都能像同步複寫一樣具有資料,而且可能會發生資料遺失或重複。 不過,當單一區域延遲或無法使用時,會改善應用程式可用性,同時降低延遲,而在此期間您不會立即受到影響。
功能 | 同步複寫 | 非同步複寫 |
---|---|---|
延遲 | 由於分散式認可作業,導致較長的延遲 | 受最小影響 |
可用性 | 與次要區域的可用性相關聯 | 遺失次要區域不會立即影響可用性 |
資料一致性 | 在確認之前,一律會在這兩個區域中進行資料認可 | 只有在確認之前,才會在主要環境中認可資料 |
RPO (復原點目標) | RPO 0,升階時不會遺失資料 | RPO > 0,升階時可能會遺失資料 |
設定異地複寫之後,可以變更複寫模式。 您可以從同步移至非同步,或從非同步移至同步。 如果您從非同步移至同步,您的次要複本會在延遲達到零之後設定為同步。 如果您在執行時因某些原因持續延遲,您可能需要暫停發行者以讓延遲達到零,並讓您的模式能夠切換至同步。 啟用同步複寫而不是非同步複寫的原因與資料重要性、特定商務需求或合規性相關聯,而非應用程式的可用性。
注意
如果次要區域延遲或變成無法使用,應用程式將無法再複寫至此區域,而且會在達到複寫延遲後開始節流。 若要繼續使用主要位置中的命名空間,可以移除受影響的次要區域。 如果未設定更多次要區域,命名空間會在啟用異地複寫的情況下繼續執行。 您可以隨時新增額外次要區域。
若要啟用異地複寫功能,您必須使用已啟用此功能的主要和次要區域。 異地複寫功能在於能夠將已發佈的訊息從主要區域複寫到次要區域。 如果次要區域位於另一個洲,這會對從主要區域到次要區域的複寫延遲產生重大影響。 如果因為可用性原因使用異地複寫,最好讓次要區域盡可能位於相同的洲。 若要進一步了解地理距離所導致的延遲,您可以透過 Azure 網路來回延遲統計資料以深入了解。
異地複寫功能可讓客戶設定次要區域,以複寫中繼資料和資料。 因此,客戶可以從儀表板執行下列管理工作:
- 設定異地複寫;次要區域可以在已啟用異地複寫功能區域中的所有新命名空間或現有命名空間上設定。
注意
目前僅支援公開預覽版中的新命名空間。
- 設定複寫一致性;同步和非同步複寫會在設定異地複寫時進行設定,但也可以在之後切換。
- 觸發升階;所有升階都是由客戶啟動。
- 移除次要區域;如果您想要移除次要區域,您可以透過此動作刪除次要區域中的資料。
下一章節將概述透過 Azure 入口網站在新命名空間上設定異地複寫功能。
注意
在公開預覽期間,這項體驗可能會變更。 我們將據以更新這份文件。
- 建立新的進階層命名空間。
- 核取位於 [複寫 (預覽)] 區段底下的 [啟用異地複寫核取方塊] 。
- 按一下 [新增次要區域] 按鈕,然後選擇區域。
- 核取 [同步複寫] 核取方塊,或指定 [非同步複寫 - 複寫延遲上限] 秒的值。
若要建立已啟用異地復寫功能的命名空間,請新增 geoDataReplication 屬性區段。
param serviceBusName string
param primaryLocation string
param secondaryLocation string
param maxReplicationLagInSeconds int
resource sb 'Microsoft.ServiceBus/namespaces@2023-01-01-preview' = {
name: serviceBusName
location: primaryLocation
sku: {
name: 'Premium'
tier: 'Premium'
capacity: 1
}
properties: {
geoDataReplication: {
maxReplicationLagDurationInSeconds: maxReplicationLagInSeconds
locations: [
{
locationName: primaryLocation
roleType: 'Primary'
}
{
locationName: secondaryLocation
roleType: 'Secondary'
}
]
}
}
}
建立已啟用異地複寫功能的命名空間后,您可以從 [複寫 (預覽)] 刀鋒視窗管理此功能。
若要在複寫模式之間切換,或更新複寫延遲上限,請按一下 [複寫一致性] 底下的連結,然後按一下核取方塊來啟用/停用同步複寫,或更新文字框中的值以變更非同步複寫延遲。
若要移除次要區域,請按兩下區域旁邊的 [... - 省略符號],然後按一下 [刪除]。 若要刪除區域,請遵循快顯刀鋒視窗中的指示。
升階會由客戶手動觸發 (明確地透過命令來觸發,或透過用戶端所擁有會觸發該命令的商務邏輯來觸發),而一律不會由 Azure 觸發。 這會賦予客戶完整的所有權和可見性,以解決 Azure 骨幹上發生的中斷情況。 選擇 [規劃] 升階時,服務會等到趕上複寫延遲後,再起始升階。 另一方面,選擇 [強制] 升階時,服務會立即起始升階。 在要求升階時,命名空間會維持唯讀模式,直到升階完成為止。 在計劃性升階起始之後,您可以隨時執行強制升階。 在計劃性容錯移轉花費超過所需時間時,這可以讓使用者控制加速升階。
重要
使用強制升級時,任何尚未複寫的資料都可能會遺失。
起始升階之後:
主機名稱會更新為指向次要區域,最多可能需花費幾分鐘的時間。
注意
您可以起始 ping 命令來檢查目前的主要區域:ping your-namespace-fully-qualified-name
用戶端會自動重新連線至次要區域。
您可以使用監視系統或使用自訂監視解決方案來自動升階。 不過,這類自動化會採用額外的計劃和工作,這部分不在本文的範圍內。
在入口網站中,按一下 [升階] 圖示,然後依照快顯刀鋒視窗中的指示來刪除區域。
執行 Azure CLI 命令以起始升級。 Force 屬性是選擇性的,預設為 false。
az rest --method post --url https://management.azure.com/subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.ServiceBus/namespaces/<namespaceName>/failover?api-version=2023-01-01-preview --body "{'properties': {'PrimaryLocation': '<newPrimaryocation>', 'api-version':'2023-01-01-preview', 'Force':'false'}}"
使用者可以監視 Log Analytics 中的複寫延遲時間計量,以監視複寫作業的進度。
- 在服務匯流排命名空間中啟用計量記錄,如監視 Azure 服務匯流排中所描述。
- 啟用計量記錄之後,您需要花費幾分鐘從命名空間產生及取用資料,才能開始查看記錄。
- 若要檢視計量記錄,請瀏覽至服務匯流排的 [監視] 區段,然後按一下 [記錄] 刀鋒視窗。 您可以使用下列查詢來尋找主要和次要區域之間的複寫延遲 (以秒為單位)。
AzureMetrics
| where TimeGenerated > ago(1h)
| where MetricName == "ReplicationLagDuration"
發佈應用程式可以透過已啟用異地複寫命名空間的命名空間主機名稱,以發佈資料至異地複寫命名空間。 發佈方法與非異地複寫案例相同,而且不需要變更資料平面 SDK 或用戶端應用程式。 在下列情況中可能無法發佈:
- 要求升階次要區域之後,現有的主要區域會拒絕任何發佈至服務匯流排的新訊息,直到完成升階為止。
- 當主要和次要區域之間的複寫延遲達到複寫延遲持續時間上限時,發行者輸入工作負載可能會受到節流。
發行者應用程式無法直接存取次要區域中的任何命名空間。
取用應用程式可以透過已啟用異地複寫功能的命名空間主機名稱來取用資料。 在完成升階之前,不支援取用者作業。
請注意此版本的下列考量:
- 在您的升階規劃中,您也應該考慮時間因素。 例如,如果您中斷連線時間超過 15 到 20 分鐘,您可能會決定起始升階。
- 升階複雜分散式基礎結構應該至少演練一次。
服務匯流排的進階層會依傳訊單位定價。 使用異地複寫功能,次要區域會在與主要區域相同的 MU 數量上執行,而且定價會計算在 MU 總數上。 此外,會根據發佈的頻寬次數乘上次要區域數量來收取費用。 在初期公開預覽期間該費用將免除。
- 請參閱異地複寫 REST API 參考。
- 在 GitHub 上執行異地複寫的範例。
- 請參閱異地複寫範例以將訊息傳送至別名。
若要深入了解服務匯流排傳訊,請參閱下列文章: