Web 服務的記憶體架構:技術基礎與原理

記憶體中是一組概念,用於將資料儲存在應用程式的 RAM 中,並使用磁碟進行備份。 在經典方法中,資料儲存在磁碟上,記憶體儲存在快取中。 例如,具有用於處理數據的後端的 Web 應用程式將數據請求儲存到儲存中:它接收數據、轉換數據,然後透過網路傳輸大量數據。 在記憶體中,計算被發送到資料 - 到存儲,在那裡它們被處理並且網路負載較少。

由於其架構,記憶體中的資料存取速度提高了數倍,有時甚至是幾個數量級。 例如,銀行分析師希望在分析應用程式中查看過去一年發放的貸款的每日動態報告。 在經典 DBMS 上,此過程需要幾分鐘的時間,但在記憶體中,它幾乎會立即出現。 這是因為該方法允許您緩存更多信息,並且這些信息存儲在“手邊”的 RAM 中。 應用程式不需要從硬碟請求數據,硬碟的可用性受到網路和磁碟速度的限制。

記憶體中還有哪些其他可能性以及這是什麼樣的方法? 弗拉基米爾·普利金 - GridGain 工程師。 本評論資料對於尚未使用 In-Memory 但想要嘗試或對軟體開發和架構設計的現代趨勢感興趣的 Web 應用程式後端開發人員非常有用。

注意。 本文以弗拉基米爾在#GetIT Conf 上的報告筆錄為基礎。 在引入自我隔離之前,我們定期在莫斯科和聖彼得堡為開發者舉辦聚會和會議:我們討論趨勢、當前的發展問題、問題及其解決方案。 現在不可能召開會議,但是時候分享過去的有用資料了。

誰使用內存以及如何使用

記憶體中最常用於需要快速使用者互動或處理大量資料的情況。

  • 銀行 例如,使用記憶體來減少客戶使用應用程式時的延遲或在發放貸款之前分析客戶。
  • 金融科技 使用記憶體來提高外包資料處理和分析的銀行的服務和應用程式的效能。 
  • 保險公司:例如,透過分析幾年來的客戶資料來計算風險。
  • 物流公司。 例如,他們處理大量數據,透過數千個參數計算貨運和客運的最佳路線,並追蹤貨運狀態。
  • 零售。 記憶體解決方案有助於更快地為客戶提供服務並處理大量資訊:發貨、發票、交易、倉庫中數千種貨物的存在以及準備分析報告。
  • В 物聯網 記憶體中取代了傳統資料庫。
  • 製藥 例如,公司使用 In-Memory 對藥物成分的組合進行分類。 

我將告訴您一些我們的客戶如何使用記憶體解決方案以及您如何自行實施它們的範例。

內存中作為主存儲

我們的客戶之一是美國一家大型醫療科學設備供應商。 他們使用記憶體解決方案作為主要數據存儲。 所有資料都儲存在磁碟上,而主動使用的資料子集則保存在 RAM 中。 儲存存取方法是標準的 - GDBC(通用資料庫連接器)和 SQL 查詢語言。

Web 服務的記憶體架構:技術基礎與原理

這統稱為記憶體資料庫 (IMDB) 或以記憶體為中心的儲存。 此類解決方案有很多名稱,但這些名稱並不是唯一的。 

網路電影資料庫特色:

  • 儲存在記憶體中並透過 SQL 存取的資料與其他方法相同。 它們是同步的,只是呈現方式、尋址方式不同。 事務性在資料之間起作用。

  • IMDB 比關聯式資料庫更快,因為從 RAM 檢索資訊比從磁碟檢​​索資訊更快。 
  • 內部最佳化演算法的指令較少。
  • IMDB 適用於管理應用程式中的資料、事件和事務。

IMDB 部分支援 ACID:原子性、一致性和隔離性。 但它們不支援「持久性」——當電源關閉時,所有資料都會遺失。 為了解決這個問題,您可以使用快照——資料庫的“快照”,類似於硬碟上的資料庫備份,或記錄交易(日誌)以在重新啟動後恢復資料。

創建容錯應用程式

讓我們想像一下容錯 Web 應用程式的經典架構。 它的工作原理如下:所有請求都由伺服器之間的網路平衡器分發。 該系統很穩定,因為伺服器會相互複製並在發生事件時進行備份。

Web 服務的記憶體架構:技術基礎與原理

平衡器將來自一個會話的所有請求嚴格定向到一台伺服器。 這是一種會話棒機制:每個會話都與本機儲存和處理的伺服器相關聯。 

當其中一台伺服器發生故障時會發生什麼?

Web 服務的記憶體架構:技術基礎與原理

不會因為架構重複而影響服務。 但是我們將丟失失效伺服器會話的子集。 同時,與這些會話相關的使用者。 例如,一位客戶下了訂單,然後突然把他趕出了辦公室。 當他再次登入並發現一切都得重新做時,他會不高興。

Web 應用程式需要支援大量使用者並且不降低速度,以便他們可以舒適地工作。 但如果被拒絕,則每個後續請求與會話儲存進行通訊所需的時間都會增加。 這會增加其他用戶的平均延遲。 但他們不想等待比以往更長的時間。

這個問題可以像我們的另一個客戶(來自美國的大型 PASS 提供者)一樣得到解決。 它使用記憶體中來叢集 Web 會話。 為此,它不是將它們儲存在本地,而是集中儲存在記憶體叢集中。 在這種情況下,會話的可用速度要快得多,因為它們已經在 RAM 中。

Web 服務的記憶體架構:技術基礎與原理

當伺服器崩潰時,平衡器將請求從崩潰的伺服器傳送到其他伺服器,就像在經典架構中一樣。 但有一個重要的區別: 會話儲存在記憶體叢集中 並且伺服器可以存取故障伺服器的會話。

這種架構增加了整個系統的容錯能力。 而且,完全放棄黏性會話機制是可能的。

混合事務分析處理 (HTAP)

通常,交易系統和分析系統是分開的。 當它們分離時,主底座就會承受負載。 對於分析處理,資料被複製到副本,以便分析處理不會幹擾交易處理。 但複製是有滯後的-沒有滯後的複製是不可能的。 如果我們同步這樣做,它也會減慢主基地的速度,我們不會獲得任何獎金。

在 HTAP 中,一切的工作方式都不同 - 相同的資料儲存用於來自應用程式的事務負載,以及可能需要很長時間才能完成的分析查詢。 當資料位於 RAM 中時,分析查詢的執行速度會更快,且資料庫伺服器的負載會減少(平均而言)。

Web 服務的記憶體架構:技術基礎與原理

混合方法打破了事務處理和分析之間的界限。 如果我們在同一儲存體上執行分析,則會對 RAM 中的資料啟動分析查詢。 它們更準確、更容易解釋、也更充分。

內存解決方案的集成

一個(相對)簡單的方法 - 從頭開始開發一切。 我們將資料保存在磁碟上,並將熱資料儲存在記憶體中。 這有助於避免伺服器重新啟動或中斷。

當資料儲存在磁碟上時,有兩種主要情況在起作用。 首先,我們希望能夠承受叢集或部件的崩潰或定期重新啟動 - 我們希望將其用作簡單的資料庫。 在第二種情況下,當資料太多時,其中一些資料在記憶體中。

如果不可能從頭開始建立所有內容,則可以將記憶體整合到已經存在的 現有架構。 但並非所有記憶體解決方案都適合於此。 有三個強制性條件。 記憶體解決方案必須支援:

  • 連接到位於其下方的資料庫的標準方式(例如,MySQL);
  • 標準的查詢語言,以免重寫和改變與儲存互動的邏輯;
  • 事務性的-保留互動的語意。

如果這三個條件都滿足,那麼整合是可能的。 我們將記憶體資料網格放置在應用程式和資料庫之間。 現在寫入請求將委託給底層資料庫,如果資料不在快取中,讀取請求將委託給底層資料庫。

Web 服務的記憶體架構:技術基礎與原理

如果快速存取資料及其處理對您很重要(例如,對於業務分析),您可以考慮實施記憶體中。 對於實現,您可以在設計新架構時使用這兩種方法。

來源: www.habr.com

添加評論