日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

譯者 | 李睿

審校 | 重樓

數據庫設計是微服務和云原生解決方案中的一個關鍵因素,因為基于微服務的架構會導致出現分布式數據。多個進程可以操作數據,而不是在單個進程中進行數據管理。云計算的興起使得數據更加分散。

如何為分布式系統設計數據庫

為了應對這種復雜性,針對微服務和云原生解決方案的數據管理已經出現了幾種模式。本文將介紹可以幫助企業在分布式環境中管理數據的重要模式。

面向微服務和云的數據庫設計的挑戰

在深入研究具體的數據管理模式之前,先了解微服務和云數據庫設計面臨的關鍵挑戰:

  • 在微服務架構中,數據分布在不同的節點上。其中一些節點可能位于世界各地完全不同地理區域的不同數據中心。在這種情況下,很難保證跨所有節點的數據一致性。在任何給定的時間點,不同節點之間的數據狀態可能存在差異。這也被稱為最終一致性問題。
  • 由于數據是分布式的,因此沒有像單節點整體系統那樣的中央機構來管理數據。對于各個參與系統來說,使用一種機制(例如共識算法)進行數據管理是很重要的。
  • 在微服務架構中,惡意行為者的攻擊面更大,因為有多個活動部分。這意味著開發人員需要在構建微服務時建立一個更健壯的安全態勢。
  • 微服務和云計算的主要承諾是可擴展性。雖然擴展應用程序進程變得更容易,但橫向擴展數據庫節點就不那么容易了。如果沒有適當的可擴展性,數據庫可能會變成性能瓶頸。

深入研究數據管理模式

考慮到相關的挑戰,有幾種模式可用于管理微服務和云原生應用程序中的數據。這些模式的主要工作是幫助開發人員解決以下提到的各種挑戰。以下逐一看看這些模式。

1.每個微服務的數據庫

顧名思義,這種模式建議每個微服務管理自己的數據。這意味著沒有其他微服務可以直接訪問或操作由另一個微服務管理的數據。任何數據交換或操作都只能通過使用一組定義良好的API來完成。下圖顯示了每個微服務的數據庫模式的示例。

如何為分布式系統設計數據庫圖1每個微服務數據庫模式

從表面上看,這個模式似乎很簡單。當從一個全新的應用程序開始時,它可以相對容易地實現。然而,當將現有的單片應用程序遷移到微服務架構時,服務之間的界限就不那么清晰了。

大多數功能都是以一種方式編寫的,即系統的不同部分可以非正式地從其他部分訪問數據。

在使用數據庫服務模式時,需要關注兩個主要方面:

  • 為每個微服務定義有界場景。
  • 管理跨多個微服務的業務事務。

2.共享數據庫

下一個重要的模式是共享數據庫模式。盡管這一模式支持微服務架構,但它采用了一種更為寬松的方法,即使用可被多個微服務訪問的共享數據庫。對于正在向微服務架構過渡的現有應用程序,這是一種更安全的模式,因為可以在不改變數據庫設計的情況下慢慢地發展應用層。然而,這種方法剝奪了微服務的一些好處:

  • 跨團隊的開發人員需要協調表的模式更改。
  • 當多個服務試圖訪問相同的數據庫資源時,可能會出現運行時沖突。

3.CQRS和事件溯源

在命令-查詢-責任分離(CQRS)模式中,應用程序偵聽來自其他微服務的域事件,并更新單獨的數據庫以支持視圖和查詢。然后,可以從這個單獨的數據庫中提供復雜的聚合查詢,同時優化性能并根據需要進行擴展。

事件溯源通過將實體或聚合的狀態存儲為事件序列而更進一步。每當對對象進行更新或插入操作時,就會創建一個新事件并將其存儲在事件存儲庫中。你可以一起使用CQRS和事件溯源來解決事件處理和維護獨立查詢數據方面的許多挑戰。這樣,就可以根據各自的需求分別擴展寫操作和讀操作。

如何為分布式系統設計數據庫圖2事件溯源和CQRS一起行動

對于大多數開發人員來說,不利的一面是,這是一種不熟悉的構建應用程序的風格,并且需要管理更多的活動部分。

4.Saga模式

Saga模式是跨多個微服務處理業務事務的另一種解決方案。例如,在快餐配送應用程序上下訂單是一種商業交易。在Saga模式中,將這一業務事務分解為由不同服務處理的本地事務序列。對于每個本地事務,執行該事務的服務都會發布一個事件。

該事件觸發另一個服務中的后續事務,該鏈將會繼續,直到整個業務事務完成。如果鏈中的任何特定事務失敗,則通過執行一系列補償事務來回滾,這些事務撤消所有先前事務的影響。

有兩種類型的Saga實現:

  • 基于編配的Saga
  • 基于Choreography的Saga

5.分片

分片有助于構建云原生應用程序。它涉及到將一個表的行分成多個不同的表。這也被稱為水平分區,但是當分區位于不同的節點上時,它們被稱為分片。分片幫助開發人員提高數據庫的讀寫可擴展性。此外,它還提高了查詢的性能,因為由于分片,特定查詢必須處理更少的記錄。

6.復制

復制是一種非常重要的數據管理模式。它涉及到創建數據庫的多個副本。每個副本都是相同的,并且在不同的服務器或節點上運行。對一個副本所做的更改將傳播到其他副本。這就是所謂的復制。有幾種類型的復制方法,例如:

  • 單領導者復制
  • 多領導者復制
  • 無領導者復制

復制幫助實現高可用性和提高可靠性,并且它允許擴展讀取操作,因為讀取請求可以轉移到多個服務器。圖3顯示了分片和復制的組合工作。

如何為分布式系統設計數據庫圖3同時使用分片和復制

云原生環境中數據庫設計的最佳實踐

雖然這些模式在解決微服務和云原生架構中的數據管理問題方面大有幫助,但還需要遵循一些最佳實踐,以使工作和生活更輕松。

以下是一些最佳實踐:

  • 必須設法設計一個具有彈性的解決方案。這是因為故障在微服務架構中是不可避免的,設計應該適應故障,并在不中斷業務的情況下從中恢復。
  • 當轉換到其中一種模式時必須實現適當的遷移策略??梢栽u估的一些常見策略是模式優先與數據優先、藍綠部署或使用扼殺模式。
  • 不要忽視備份和經過良好測試的災難恢復系統。即使對于單節點數據庫,這些也很重要。然而,在分布式數據管理方法中,災難恢復變得更加重要。
  • 在微服務或云原生應用中,持續監控和可觀察性同樣重要。例如,分片之類的技術可能導致分區和熱點不平衡。如果沒有適當的監控解決方案,對這種情況的任何反應都可能來得太晚,并可能使業務面臨風險。

結論

因此可以得出結論,良好的數據庫設計在微服務和云原生環境中絕對是至關重要的。由于分布式數據固有的復雜性,如果沒有適當的設計,應用程序將面臨多種問題。有多種數據管理模式能夠以更可靠和可擴展的方式處理數據。然而,每種模式都有自己的挑戰以及優點和缺點。沒有任何一種模式能夠適合所有可能的場景,開發人員應該在進行各種權衡之后選擇一個特定的模式。

原文標題:Designing Databases for Distributed Systems,作者:Saurabh Dashora

分享到:
標簽:數據庫
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定