本文章是由機器翻譯。

速度

建置更好使用分散式快取的資料導向應用程式

Aaron Dunnington

可從 MSDN 程式庫 的程式碼下載
瀏覽線上的程式碼

本文根據搶鮮版的 Microsoft 的速度。所有的資訊有變更。

本文將告訴您:

  • 開始使用速度
  • 分類分散式快取的資料
  • 基本的速度用戶端應用程式
  • 整合與 ASP.NET 工作階段狀態
本文將使用下列技術:
Microsoft 速度,ASP.NET

內容

目前資料為主的應用程式
速度如何協助
資料分類
邏輯階層架構
分割和本機快取
組態存放區
快速入門的速度
叢集部署
基本的速度用戶端應用程式
設計快取
具名的快取
組織在快取
組織 [報表]
組織在工作階段
程式設計的快取的圖層
整合與 ASP.NET 工作階段狀態
往前

資料驅動的應用程式已經成為普遍。從無數的來源包括關聯式來源 」、 「 服務導向應用程式 」、 「 同步發佈的摘要 」 和 「 資料中心的文件和訊息,傳送資料。繼續發展,利用這個的豐富的資料可及性應用程式架構。此外,技術的先進處理、 儲存、 記憶體,和連線與基礎硬體趨勢已啟用應用程式架構來掌控便宜,商業硬體有效向外延展這些應用程式。

新的 Microsoft Project 代號的速度會提供分散式的記憶體中快取。速度可讓您藉由公開的用戶端應用程式消耗的分散式記憶體統一的檢視中建立可擴充、 可用、 高效能的應用程式。速度,透過用戶端應用程式可以改善效能使資料更接近邏輯,會使用它,因此降低在基礎資料存放區的壓力。速度叢集可提供高可用性,以進一步隔音資料遺失,以及資料層上的負載增加的應用程式。利用分散式記憶體的速度,可以讓彈性擴充應用程式的需求增加時這些高效能、 可用應用程式。

本文著重於如何提供延展性、 可用性及新的和現有的效能下一個層次,可以運用的速度功能的金鑰散發.NET 應用程式。

目前資料為主的應用程式

您一般目前的資料驅動應用程式可能是商店的簡單的行以及透過資料庫。這個應用程式,可讓使用者瀏覽產品目錄中,並購買產品透過購物車經驗。此外,彙總的訂單資料被使用以顯示上層的銷售產品,以及通常一起購買的產品。這個應用程式架構帶熟悉分隔使用者介面、 商務的邏輯和資料存取 (如 [圖 1 ] 所示。這種架構不幸,面臨的延展性、 效能和可用性的數個金鑰的挑戰。

fig01.gif

[圖 1 一般資料為基礎的 Web 應用程式架構

先,沒有重大的延展性挑戰的繼承,應用程式會執行資料庫的作業,在每個頁面載入類別目錄 」 和 「 上層賣方資料擷取作業的形式。為應用程式負載增加,此大量的頻率,資料庫作業中可能會造成嚴重的延展性限制和效能的瓶頸,因為以資源和從磁碟擷取資料的實體限制的增加爭用。進一步,這個架構可能大幅影響應用程式中每個頁面載入結果完全經由傳送到資料層的作業的延遲。

如果應用程式會使用傳統快取在 Web 層的方法,以減少資料庫上的常數壓力,第二個金鑰延展性挑戰的發生是根目錄的特定伺服器資源的狀態的連結。沒有 decoupling 快取的狀態,從特定的伺服器,以縮放,應用程式必須採用技術 (例如,自黏路由至將繫結至個別的伺服器節點使用者要求。這可能會導致處理如果結果 disproportionally 更大的活動數量的使用者要求的特定區域的不平均散佈。

將最後,Web 層節點的快取不傳送高可用性到主要的應用程式,它們不作用正常,透過的可用性的基底。

速度如何協助

如先前提及的速度就會是分散式的記憶體中快取。更特別地是,速度會藉由一起 fusing 伺服器記憶體,公開給用戶端應用程式資料整合的快取層。架構包含的一環的執行速度 Windows 服務的快取伺服器的速度以及用戶端應用程式使用速度用戶端程式庫與整合的快取的檢視 (請參閱 [圖 2 ) 中。

[圖 2 速度架構

用戶端應用程式可以存取,速度快取層來儲存和擷取透過簡單的將任何可序列化的 CLR 物件,並取得作業,如下所示:

CacheFactory factory = new CacheFactory();
cache = factory.GetCache("catalog");

cache.Put("Product-43", new Product("Coffee"));

Product p = (Product)cache.Get("Product-43");

速度會讓範例 Web 應用程式架構利用新的快取層,如 [圖 3 ] 所示。利用速度新增 mid-tier 中,應用程式可以達到新層級的延展性、 效能和可用性。更特別地是,高度的延展性可以被實現藉由降低資料庫資源,爭用。更多的彈性被 instilled 這個延展性的架構會釋放從連結的用戶端狀態,個別的特定伺服器節點,並將效能改進可以啟用邏輯,會使用它,使資料更接近,因此改善回應時間,並降低延遲。透過速度,高可用性是的備援,因此降低資料遺失以及在一個節點失敗的事件資料層上的負載的尖峰 insulating 叢集來達成。

fig03.gif

[圖 3] 使用 [速度] 快取層

藉由 interweaving 所示的快取的層,應用程式可以現在明確地運用速度透過不同層和模式。例如,商務邏輯也無法直接在另外的快取模式中,使用速度。無法在允許使用商務邏輯,以透明方式與速度,因此商務圖層引入 read through-/ 寫入-後置圖層。Web 層工作階段狀態管理,透過速度 ASP.NET 工作階段儲存提供者的整合可無障礙地速度。

資料分類

完全利用 「 速度 」 功能在您的應用程式中設定,很重要,瞭解一般快取資料的類型。這些資料型別可以歸類為參考資料、 活動的資料和資源資料。

參考資料是指主要是唯讀,如產品類別目錄 」 或 「 使用者資料的資料。這個資料會寫入不常,可能一次每一天或一週。然而,參考資料,縮放的需求會需要大量的讀取要求,在這些較小的片段的資料。

例如,在的商店中當增加的負載的使用者瀏覽的類別目錄,極大許多產品資料儲存擷取並清單建置作業所產生。產品類別目錄的參考資料相當不常變更,並在用戶端是高度可重複使用,很周全,相當大的壓力可以從資料層卸載此資料更接近應用程式的快取的快取。

上層的銷售] 和 [通常購買-一起的產品資料可以描述為以及參考資料中。因為即時需求無法在需要這些報表的應用程式會從消除每個要求,以判斷目前的產品與這些群組相關聯時分析訂單的成本大幅獲益。

活動資料是指商業活動或交易的一部分的資料。資料描述為在商店購物車經驗的一部分,表示活動資料。活動資料是它以獨佔方式讀取寫入,並因此通常可以輕易地分割。在活動的存留期之後 — 完成簽出時,在此 — 活動資料通常是從快取已停用然後保存到基礎存放區的後續處理。

目前,為了維護購物車狀態,範例應用程式需要到路由任一使用自黏傳送至繫結使用者特定的伺服器資源的工作階段,或保存狀態至基礎資料儲存。快取這個活動 」 資料的速度,您可以不需要的自黏路由,並減輕負責儲存這個主要是暫時性的購物車資料,直到活動最後產生的順序從基礎資料庫。

資源資料是指會同時讀取及寫入,例如產品庫存資料中。排序過程可能需要庫存會經常監視,以強制執行層級或填滿後的原則。不過,訂單的處理,此資料需要同時更新以層級中的變更。經常,處理資源的資料時,提供效能和縮放,coherence 的資料被鬆散。執行個體,排序處理程序可能 oversell 其中不同的程序,例如重新排序可能會觸發來調解清單發生衝突的項目。

我開始整合範例應用程式的速度之前,可能有幫助的快速檢閱的一些核心速度的概念。

邏輯階層架構

速度的邏輯階層架構是由電腦 」、 「 主機 」、 「 具名的快取 」、 「 區域和快取項目 (請參閱 [圖 4 ) 所組成。電腦可以執行多個的速度服務每個服務視為快取的主應用程式。每個快取的主機可以執行多個具名的快取。這些名為快取會可以跨越電腦,並在組態中定義。

fig04.gif

[圖 4] 的速度項目的邏輯階層架構

每一個具名的快取會儲存資料,例如,產品目錄一個邏輯群組。具名的快取也可以設定可用性、 收回,和到期原則。明確地建立區域 — 實際 co-located 的資料容器 (可能也存在於每一個具名的快取。為項目擷取大量,區域會變成如果應用程式一致地需要快取項目的群組位址在一起。此外,這些區域會提供標記以搜尋和區域的快取項目的列舉增強可用性。明確建立的區域是,但是的選擇性的概念。如果沒有區域會明確指定,速度會隱含地建立在幕後的預設區域。

最後,隱含和明確建立的區域是在快取項目本身,是負責維護索引鍵、 物件、 標記、 時間戳記、 版本,以及到期的資料。

分割和本機快取

速度目前支援的兩個快取的型別: 資料分割和本機。分割的快取散佈在名為快取的特定主機的快取項目。每個主要的具名快取可以有效地造成跨機器在速度層維護可設定備份的具名的快取中的項目數的速度的高可用性。

本機快取會在以加快速度從擷取資料的存取用戶端上執行。本機快取搭配使用時的正常速度資料分割的快取,資料從速度的伺服器環擷取,快取的項目是會儲存在物件執行速度用戶端處理序內的表單中。進一步,跟伺服器端的到期原則,本機快取也可以將每個設定項目的到期時間。

組態存放區

[速度] 組態儲存區包含快取原則,以及全域分割區對應,在叢集的詳細資料快取項目的散發的。強制執行,具名的快取所定義的原則,並分別執行全域管理員,磁碟分割,速度會使用原則和組態存放區內定義的全域分割區對應。

全域分割管理員 」 會是叢集的速度是叢集的負責必須在橫向的其餘部分的快取項目的元件。與建立路由,定義資料速度服務主機之間的相互關聯資料表叢集通訊時,用戶端最後會利用這項資訊。內一個速度服務主控件執行的全域分割管理員]。如果主應用程式執行全域分割管理員 」 當機時,因此速度叢集內的另一個主機會假設責任,藉由啟動全域管理員,從全域分割區對應儲存在組態存放區的磁碟分割。速度,可讓組態儲存區是置於網路共用上,或儲存在 SQL Server。

快速入門的速度

若要開始使用速度,讓我們開頭速度安裝程序,在最初部署叢集和基本的速度用戶端應用程式的概觀。

透過速度快取伺服器上安裝程式繼續,時將會出現所示的快取主應用程式組態畫面[圖 5 .

fig05.gif

[圖 5 速度快取的主控件 Confi guration

快取的主應用程式組態畫面擷取,執行您的速度主機所需的服務設定與叢集。第一次,此畫面允許您選擇放在網路共用或儲存在 SQL Server 組態存放區。這個範例中,我將使用 XML 為基礎的檔案選項儲存在網路共用上的 [速度] 設定。

接下來,叢集會指派一個名稱,以及為適當的節點大小。叢集大小設定用來調整內部資料結構,根據您的叢集大小在速度的效能最佳化。有可能會重設在稍後,您的叢集所發展的叢集大小。

最後,服務組態值區段會擷取服務連接埠目前主應用程式上所執行,叢集本身執行,以及此速度主控件為使用的記憶體最大數量的連接埠。

按一下 [測試連線] 按鈕,以驗證組態存放區的連線。按一下 [儲存],與關閉] 以完成安裝。如果電腦正在執行防火牆,確定藉由加入例外狀況的 DistributedCache.exe,速度的安裝目錄允許透過的 [速度] 服務。

若要安裝其他的快取的主機,重複執行這些安裝步驟,速度的新電腦上 (英文)。安裝其他的主機時,叢集相關的設定將會自動偵測從組態存放區的第一個叢集主應用程式安裝期間使用的網路共用上。這個範例中,我安裝了三個節點叢集。

叢集部署

一旦安裝速度,它可以透過 Windows PowerShell 中管理。啟動 [速度] 命令] 視窗,執行速度管理捷徑放在桌面上安裝後以系統管理員的身分。若要快取叢集執行 Start-CacheCluster 命令)。Get-CacheHost 命令會在叢集,以顯示主機的狀態。Get-CacheStatistics 會顯示名為快取特定的快取項目統計資料。如需透過 Windows PowerShell 的速度管理的詳細資訊,請參閱速度安裝所隨附的文件。

加入快取到速度叢集,XML 原則組態中顯示的主機之後[圖 6會產生 ClusterConfig.xml 檔案中的網路共用上。

[圖 6 速度 XML 原則設定

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="dcache" type="System.Data.Caching.DCacheSection,
      CacheBaseLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
  </configSections>
  <dcache cluster="velsample" size="Small">
    <caches>
      <cache type="partitioned" consistency="strong" name="default">
        <policy>
          <eviction type="lru" />
          <expiration defaultTTL="10" isExpirable="true" />
        </policy>
      </cache>
    </caches>
    <hosts>
      <host clusterPort="22234" hostId="1916351620" size="2048" quorumHost="true"
          name="VELSAMPLE01" cacheHostName="DistributedCacheService"
          cachePort="22233" />
      <host clusterPort="22234" hostId="1249604550" size="2048" quorumHost="false"
          name="VELSAMPLE02" cacheHostName="DistributedCacheService"
          cachePort="22233" />
      <host clusterPort="22234" hostId="1016778186" size="2048" quorumHost="false"
          name="VELSAMPLE03" cacheHostName="DistributedCacheService"
          cachePort="22233" />
    </hosts>
    <advancedProperties>
      <partitionStoreConnectionSettings providerName="System.Data.SqlServerCe.3.5"
          connectionString="\\velsample01\velocity\ConfigStore.sdf" />
    </advancedProperties>
  </dcache>
</configuration>

dcache 組態項目,表示在安裝期間建立 velsample 叢集。這個組態區段所含我設定在主應用程式的安裝,也就是名為 [快取、 主機和組態存放區設定期間,原則組態資訊。

在快取項目,速度自動建立一個預設值、 分割、 具名的快取。此名稱的快取組態也會保留速度,可用來強制執行控制這名為快取中的項目應該留在以及記憶體中如何速度會移除這些項目,一旦過期的時間快取的到期日和收回設定的原則設定。在這個預設組態中,defaultTTL 值會表示為 10 分鐘的快取項目會保留在記憶體。接著,速度會使用至少最近使用 (LRU) 演算法來收回物件從記憶體為過期。

在某些特定的情況下可能需要關閉這些到期和已收回該節點操作設定。舉例來說,在資料集大小已知會相當修正的情況下例如產品目錄範例應用程式中。在這種情況下,收回類型會被設為 None 當 isExpirable 設定會被設為 False 時。

接下來,在主機組態項目,速度主機中每個指定命名、 大小和位址資訊。此外,每個主機可以作為仲裁主應用程式,或導致主應用程式。速度會導致主機負責維護叢集的穩定性。這些領導人裝載的協同合作,以防止分割大腦症狀,在叢集內的通訊的損失會導致獨立作業的情況下 Sub-clusters。大部分的速度領導人主機必須執行執行,整個叢集,所以隔音與足夠的領導人主機,以確保大部分的這些主機執行不會同時失敗的領導人在叢集的關鍵。

有一些額外的負荷是參與領導人主機通訊。最好在以執行最少的負責人主機視維護仲裁,以將導致您的叢集。從其中一個大小,三個節點的小型叢集很可接受的負責人主機的小群組所產生的額外負荷量會是相當低領導人節點執行所有的節點。對於較大的叢集,不過,以減少額外負荷參與確保叢集穩定性,建議使用較小的負責人主機百分比 — 例如,5 導致 10 節點叢集的主機。

如 [我的範例應用程式中,啟用所有三個的主機,以執行導致主機,我可以執行 Stop-CacheCluster 命令,更新其餘的 quorumHost 值,true,然後執行 [開始]-CacheCluster]。

最後,advancedProperties 組態項目所指定的儲存區提供者及磁碟分割對應的位置。這裡,組態所指定的磁碟分割的對應資料庫的網路位置。主應用程式目前正在執行全域分割管理員 」,會使用這個磁碟分割的對應資料庫。

基本的速度用戶端應用程式

若要設定您的開發環境,用來建立速度的應用程式,先建立新的主控台專案。您可以加入下列組件參考速度安裝目錄中:

  • CacheBaseLibrary.dll
  • CASBase.dll
  • CASMain.dll
  • ClientLibrary.dll

接下來,將 app.config 檔案加入至主控台專案以下列組態中:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="dcacheClient" 
      type="System.Data.Caching.DCacheClientSection, CacheBaseLibrary" 
      allowLocation="true" allowDefinition="Everywhere"/>
  </configSections>

  <dcacheClient deployment="routing">
    <localCache isEnabled="false"/>
    <hosts>
      <host name="VELSAMPLE01" cachePort="22233" 
        cacheHostName="DistributedCacheService"/>
    </hosts>
  </dcacheClient>
</configuration>

[dcacheClient] 區段會提供速度用戶端設定。這些設定值,指定用戶端部署類型、 本機快取的選項以及叢集位址資訊。

為路由或簡單,可以設定部署。路由的部署,可讓速度用戶端與叢集中的任何 [速度] 主機進行通訊。簡單的部署會指示用戶端與特定的速度主機需要與目標主機進行通訊的叢集內的其他網路躍點的通訊。路由是建議的部署,為其最小化網路負荷。不過,如果沒有網路條件約束,允許只與叢集中主機速度的子集進行通訊的用戶端,簡單的部署會是適合。

這個範例,localCache 項目指定的用戶端應用程式已停用本機快取中。如果為 true,這裡,為的速度,這個主控台用戶端應用程式擷取快取項目設定 isEnabled 這些項目會保留用戶端應用程式處理序內的物件表單中。到叢集的後續 Trips 就不再是必要,本機快取無法進一步增強效能。

使用本機快取已啟用,在 ttlValue 可以指定秒數物件的數目應該維持在本機快取中有效。無效的物件的後續要求會造成用戶端從叢集中擷取更新。

很重要,請注意利用本機快取的用戶端會擷取物件在本機即使這些項目都已更新叢集上。因此,最好是使用本機快取不常變更的資料。在後續版本,速度小組所針對一項通知的功能,將會讓發出因此允許本機快取重新整理在適當的用戶端的用戶端更新快取項目的通知,速度叢集。

主機組態設定會指定叢集中各種不同的主機位址。此處可以指定多個主機 ; 不過,只有一部主機需要用戶端來探索其他主機在叢集中。在用戶端組態中的每個主機可指定名稱 」、 「 連接埠和 「 cacheHostName 設定對應至先前所示,在叢集組態主應用程式設定。

[圖 7會顯示簡單的程式,將 [物件] 速度放在整合快取,和快取中擷取的物件。

[圖 7] 使用速度快取

using System;
using System.Data.Caching;

namespace VelocityClientConsole {
  class Program {
    static void Main(string[] args) {
      // Create the cache factory
      CacheFactory factory = new CacheFactory();

      // Get the default named cache
      Cache cache = factory.GetCache("default");

      // Add a string to the cache
      cache.Put("MyCacheKey", "Hello World");

      // Get the data from the cache
      string s = (string)cache.Get("MyCacheKey");

      Console.WriteLine(s);

      Console.ReadLine();
    }
  }
}

在第一個我使用陳述式,參考 System.Data.caching 命名空間中的型別。 在 Main 方法中,,我建立一個 CacheFactory,並擷取具名標題為預設的快取。 然後,我會使用快取用戶端執行個體來將字串物件放入預設快取並擷取它。

在 CacheFactory 也提供其他建構函式,建立與未在用戶端組態中所參考的速度叢集通訊的快取物件。 在 CacheFactory 會建立適當的具體快取用戶端實作個別部署及透過組態或以程式設計方式透過 CacheFactory 建構函式所指定的本機快取設定。

之後請執行透過 Windows PowerShell 主控台應用程式,我可以確認已經透過 get-快取] 和 [Get-CacheStatistics] 命令建立的快取項目 (請參閱 [圖 8 )。 Get-快取可顯示的隱含區域已建立以保留 VELSAMPLE03 主機上的項目。 此外,Get-CacheStatistics 所顯示的大小]、 [區域和 [存取資訊,預設名稱為快取的。

fig06.gif

[圖 8] 檢視在 Windows PowerShell 中的快取統計資料

設計快取

現在,速度會是已啟動並執行,讓我們從開始速度整合店面應用程式中,設計快取存放區。 在這個範例中,店面應用程式會使用 Northwind 資料庫產品型錄和報表的參考資料以及銷售訂單活動資料。 這種資料模型如 [圖 9 ] 所示。

fig07.gif

[圖 9 商店資料模型

應用程式會使用傳輸物件類別,以表示基礎資料存放區。 在目前的店面的資料存取層會利用 System.Data.SqlClient 填入傳輸物件。 在如果您的應用程式會運用物件關聯對應 (O / RM) 技術的功能更強大的型別對應,這些架構所產生的物件無法被中快取速度只是相同。 只要您的資料存取層,會產生序列化的 CLR 物件,速度將能夠快取這些物件。

具名的快取

為在管理這些類型的資料的屬性因參考和活動的分類,demarcates 名為快取這些邏輯單位到不同的組織策略可以受益於快取原則適用於對每個資料型別的需求。 尤其,藉由建立個別名為類別目錄 」、 「 報表和 「 購物車資料快取,您可以依此調整原則到期、 收回,和可用性。

因為 「 產品類別目錄 」 可以歸類為參考的資料或共用的、 唯讀的資料中,是非常有助於快取。 此資料,Moreover,會代表參考的資料的邏輯單位,所以它是不錯的候選,定義一個名為快取。

若要以便這個新的具名快取使用新的快取命令)。

New-Cache -CacheName catalog -Eviction none -NotExpirable

目錄快取記憶體資料相當不常變更以及目錄大小是預期您可以關閉收回,以及停用到期。 不過,在快取大小可能會正常成長的案例很需要利用收回及以防止記憶體的到期日。

與產品參考可能更頻繁地不是目錄本身,彙總報表的識別項清單,到一個名為快取有優點,在這些產品的清單可以 decoupled 從基礎的目錄,名為快取原則波動例如上層的銷售的產品的報告。 特別,參考這些產品的相關的報表,您無法建立一個名為快取稱為使用更積極的到期日和收回策略的報表]。

New-Cache -CacheName reports -Eviction LRU -TTL 1440

名為快取報表會建立這類的產品識別項的報表清單會過期後一天 (1,440 分鐘),且速度將使用 LRU 演算法來收回物件從快取中。 彙總的產品識別碼清單將會允許在報表,請使用不同的命名快取相關的資料和獨立變更,根據不同的到期日] 和 [收回原則,來產品目錄資料。 因此,從使用從名為快取報告的產品識別碼清單目錄快取區可以被擷取前-銷售產品。 上層的銷售報表清單物件將每日,過期,而 「 產品類別目錄 」 維持快取,也許直到背景處理更新在規則或觸發間隔。

傳統上,工作階段相關資料是讀取並寫入,它可以歸類為活動的資料。 由於購物車資料,是關鍵完成的訂單,也會在強式高可用性需求在這個資料。 在原始應用程式,降低的購物車的資料遺失此狀態會有已透過保存至基礎資料存放區之前完成的個別的訂單。 在一個速度-已啟用] 商店為透過購物車經驗中的使用者進行可以獨佔讀取並寫入速度叢集根據購物車資料的活動。

您可以透過一個名為快取新建立的工作階段,調整活動的相關資料的內容周圍的原則。 尤其,預設 InProc ASP.NET 工作階段中,先前快取資料的應用程式狀態、 更具彈性調整已啟用透過速度 SessionStoreProvider 整合。 自黏路由已不再需要一些使用者對狀態根據特定伺服器的要求。 進一步,藉由在名為快取工作階段上,啟用高可用性,資料遺失被降低沒有保存到資料庫的資料。 藉由重複儲存購物車資料,速度隔離叢集。

這個新快取的命令下方,會建立名為快取工作階段。

New-Cache -CacheName session -Secondaries 1 -TTL 1440

–secondaries 參數將指定您,此名稱的快取中儲存的每個項目的備份數。 在這個範例中,速度將會在叢集的每個儲存在名為快取工作階段的購物車隔音 1 額外的備份複本。

組織在快取

應用程式必須能夠處理類別及產品都獨立,以及在類別和產品清單。 有幾種您可以採取的組織目錄名為快取,包括以區域為基礎的組織和清單架構的組織中這些物件的方法。 這兩種方法會著重在叢集的程度的物件通訊群組。 不過,視您的應用程式需求而定,另一個組織的方法可能較為適合。 舉例來說,您可以快取索引鍵的物件圖形,或者您可以使用頁面快取。

無法使用速度的區域,組織 「 產品類別目錄 」。 區域是有利在範例的案例中,因為它們允許應用程式位址一起或個別的目錄中特定的產品。 執行個體,應用程式可能需要提供它可能需要在其他情況下顯示只在產品詳細資料網頁時,在某些的情況下所列出的整個產品類別。 組織目錄快取使用的產品類別關聯的區域時,會產生階層架構如 [圖 10 ] 中所示。

fig10.gif

[圖 10 地區-以組織

在這個快取儲存體模型中,類別物件本身會儲存獨立而產品的物件會儲存在相對於分類的成員資格的區域。 區域架構方法的類別目錄的另一個潛在的優點包括 co-location: 整個產品類別的區域,區域中的所有物件都保證位於相同的速度主機電腦,將擷取大量。 以清單架構的方法,需要多個快取的要求。 區域也會啟用擷取的項目,根據的次要索引快取項目的標記。

雖然一個以區域為基礎的方法會提供大量擷取最佳化產品,] 和 [標記以擷取,個別存取的好處,co-location 的項目也無法呈現瓶頸)。 如果用戶端應用程式會比其他更積極地使用特定分類區域,這個區域的作用點就會防止原有優點的輸送量,提供跨叢集向外擴充透過產品的散發資料。

使用清單架構的方式,為產品的類別組織會將項目的平均分布升級分散在叢集,因此完全實現延展性的優點可以透過資料的散發。 其中一個以區域為基礎的方法可能會無法開發活動的產品的實際 co-located 群組的作用點,則以清單架構的方法可讓您將負載分散在叢集中列出的任何特定的產品分類的散發。 這個組織方法將需要您,類別物件]、 [產品的物件以及 [識別獨立的預存的產品物件的類別清單物件的儲存。 快取此清單架構的方式組織如 [圖 11 ] 所示。

fig11.gif

[圖 11 清單為基礎的組織

雖然,以清單架構的方法來組織目錄分散目錄活動的負載平均叢集,位址的所有產品類別一起,多個快取的要求是必要。 這個主題中,大量讀取 / 寫入會是速度小組以未來的版本為目標的功能。

組織 [報表]

您可以採用一個類似的清單架構組織報告名為快取。 decoupling 這些參考報告,從名為快取目錄,可讓管理獨立而有不同的報表] 和 [類別目錄資料的原則。 有效地,這可讓您調整到期日] 和 [收回的原則,根據至個別的資料型別。 更動態的報告資料會強制為更積極的到期日] 和 [收回原則時,相當靜態的類別目錄的參考資料) 停用到期日和收回。 organizationally,內名為快取報告的產品金鑰的清單物件將識別目錄快取,類似於使用產品的類別清單,但在具名的快取所採用的方法內的產品物件。

若要擷取這些彙總的參考報告所根據的產品,的清單架構方法使用 [報告] 和 [目錄名為快取中。

組織在工作階段

會以獨佔方式讀取 / 寫入的活動-基礎案例,接近透過存放區的物件階層架構的快取組織可能的最佳選擇。 舉例來說,在名為快取工作階段,您可以組織購物車物件包含特定的使用者選取每個產品的相關資訊: 產品、 價格和數量。

而目錄組織升級散佈在快取的項目高度的延展性,購物車的快取項目不以高度可重複使用跨要求。 快取每個使用者的購物車,單一的機碼,而不將分散具名的快取為最上層的快取項目的購物車的項目將增加效能。 更具體地說,店面應用程式會產生名為快取,工作階段的要求,您也可以透過單一要求的大量擷取每個購物車。 此外,使用高可用性建立名為快取工作階段後, 速度將會藉由維護分散在叢集的每個購物車的複本保護工作階段資料。 工作階段組織方法如 [圖 12 ] 所示。

fig12.gif

[圖 12] 工作階段快取的組織

應用程式,可能會維護活動為基礎的項目,直接透過速度的 API,並 ASP.NET 應用程式可能會利用與工作階段存放區提供者無障礙地瞭解速度,透過 ASP.NET 工作階段 API 在快取層架構的速度的整合]。

程式設計的快取的圖層

在目前的架構層 demarcated 為使用者介面 (Web) 商務邏輯層 (BLL) 和資料存取層 (DAL)。 為目前的應用程式主要是用來處理在資料層所產生的資料傳輸物件,快取資料的這些個別的圖形有助於提供應用程式各層,以表示他們瞭解。 在店面的範例會採用快取圖層的商務和資料各層之間。 藉由 interweaving 在商務層的快取邏輯,一致地依賴商務邏輯的圖層獲益的商務規則時,商務邏輯本身無障礙地使用在快取層產生呼叫,快取的邏輯之前的驗證。 此外,Web 層會利用速度 ASP.NET 工作階段存放區提供者整合。

若要查看動作中的此分層,讓我們逐一啟動使用產品類別清單檢視快取圖層。 若要開始,分類清單檢視呼叫商務邏輯層的驗證要求,然後使用快取的圖層,藉由呼叫 GetProductsByCategory 方法 VelocityCatalogCache 上 (請參閱 [圖 13] 所示 )。 這個座標速度快取與資料存放區以透明商務邏輯的方式之間的封送處理 (Marshaling) 資料。

[圖 13 GetProductsCatalog

public IList<Product> GetProductsByCategory(int id) {
  IList<Product> products = null;

  IList<int> productIDs = (IList<int>)_catalogCache.Get("ProductCategoryList-" + id);

  if (productIDs != null) {
    products = new List<Product>(productIDs.Count);

    foreach (int productID in productIDs) {
      products.Add((Product)_catalogCache.Get("Product-" + productID));
    }
  }
  else {
    products = DataLayer.CatalogProvider.GetProductsByCategory(id);

    if (products != null && products.Count > 0) {
      productIDs = new List<int>(products.Count);
      foreach (Product p in products) {
        productIDs.Add(p.ProductID);
        _catalogCache.Put("Product-" + p.ProductID, p);
      }

      _catalogCache.Put("ProductCategoryList-" + id, productIDs);
    }
  }

  return products;
}

在這個產品類別] 清單中,快取的圖層會做為以簡化商務層 read-through 提供者。 這是只有一個快取使用速度的邏輯的程式設計的分層方法。 例如,細粒在企業層級的控制項,利用速度,直接在商務層中另外的快取模式中會呈現以及一個可用的方法。 以在未來版本,速度小組為目標 read through-/ 寫入-後置支援其中回呼可能登錄協調封送處理 (Marshaling) 的資料快取及基礎存放區,因此允許用戶端使用速度快取 API 透過這種行為,而不是一個包裝函式的圖層。

在 GetProductsByCategory 快取層方法實作,最好以並行存取,隱含的觸控。 在這個方法,不並行存取模型是目前正在使用。 目錄為主要包含唯讀參考資料,不常變更,將無法太嚴重影響到並行存取。 不過,它可能的多個執行緒,或用戶端執行相同的更新之後另一個,如果在到達同時快取遺漏。 或者的並行存取的重要的案例 (例如時快取的各種類型的資源資料 — 速度支援兩個開放式和封閉式並行存取模型。

整合與 ASP.NET 工作階段狀態

速度可以無障礙地使用快取叢集,透過 ASP.NET SessionStoreProvider 架構。 這項功能,可讓 Web 應用程式透過 HttpContext.session 屬性存取指定的名稱快取中的項目。

這項整合提供很棒的好處的延展性的 decoupling 從特定的伺服器的快取狀態。 利用工作階段,] 或 [活動的相關資料的速度,更具彈性的調整會啟用,架構會釋放從連接至個別狀態的特定伺服器節點的用戶端。

案例需要高可用性,例如購物的活動資料的速度讓您所示建立名為快取,工作階段期間,輕易地隔音叢集重複使用因此傳遞給 [使用的邏輯的可用性更接近。

若要以便在 ASP.NET 的速度 SessionStoreProvider 整合下列組態會加入至在店面的 ASP.NET 應用程式中 web.config 檔中。 此設定會使店面的 ASP.NET 工作階段狀態與名為快取先前建立的工作階段產生關聯。

<system.web>
  <sessionState mode="Custom" customProvider="SessionStoreProvider">
    <providers>
      <add name="SessionStoreProvider" 
        type="System.Data.Caching.SessionStoreProvider, ClientLibrary" 
        cacheName="session" />
    </providers>
  </sessionState>
</system.web>

然後,存取名為快取,透過 ASP.NET 工作階段,在商店維護使用者購物車活動資料以在中顯示 Product.aspx 頁面 [圖 14 .

存取快取,透過 ASP.NET 的 [圖 14

protected void AddToCartButton_Click(object sender, EventArgs e) {
  ShoppingCart cart = (ShoppingCart)Session["ShoppingCart"];

  if (cart == null) {
    cart = new ShoppingCart();
    Session["ShoppingCart"] = cart;
  }

  int productID = Convert.ToInt32(Request.Params["id"]);

  ShoppingCartItem item = cart[productID];
  if (item != null) {
    item.Quantity++;
  }
  else {
    Product p = ServiceLayer.CatalogService.GetProduct(productID);

    cart[productID] = new ShoppingCartItem() {
      ProductID = productID,
      Quantity = 1,
      UnitPrice = p.UnitPrice
    };
  }

  Response.Redirect("~/Cart.aspx");
}

完成順序活動-導向購物車可以從中移除,工作階段會名為快取,和傳送至基礎資料存放區中,從 purchase.aspx 頁面,如下所示。

protected void CheckoutButton_Click(object sender, EventArgs e) {
  ShoppingCart cart = (ShoppingCart)Session["ShoppingCart"];

  ServiceLayer.OrderService.ProcessOrder(cart,
    NameTextBox.Text, AddressTextBox.Text, CityTextBox.Text,
    RegionTextBox.Text, PostalCodeTextBox.Text, CountryTextBox.Text);

  Session["ShoppingCart"] = null;

  Response.Redirect("~/Congrats.aspx");
}

透過 ASP.NET 工作階段 API 應用程式現在完美地運用要瞭解更接近活動-導向的資料,使用的邏輯不需要的技術 (例如,自黏路由及保護購物車活動資料透過先前已啟用名為快取工作階段在 「 高可用性支援的速度。

往前

速度會駕馭在分散式的架構,以及基礎硬體趨勢,要瞭解這個 pervasiveness,要使用的應用程式資料更接近演進。本文只提供第一個看的功能和 rationales 行駛速度。

範例店面應用程式現在利用快取參考的類別目錄和報告資料,以及使用原則適用於對每個資料型別的購物車活動資料的速度。縮放先前已禁止,所複製的目錄資料作業,在每個頁面載入,而現在最小化的基礎資料存放區上的載入和瞭解我們類別目錄的參考資料更接近邏輯,會使用它,高度的延展性和效能會啟用。也改良回應時間了,以及您取得更具彈性的基礎架構的連接要求,狀態為根據的資源的釋放縮放比例]。沒有持續進行到基礎資料存放區之前,視關鍵完成訂單的保護資料透過高可用性的支援的速度。

如果您希望其他的原理的深入的分散式,記憶體中快取概觀,整個的速度功能集及下載,相關資訊請參閱白皮書 <Microsoft Project 的程式碼命名速度」,速度開發人員中心.

Aaron Dunnington 會是 Microsoft 「 資料程式設計小組在專案經理。在達到他 https://blogs.msdn.com/Velocity .