淺談Windows Server APPFABRIC

    hi,everyone !真的是很久很久沒有update blog了,由於最近忙着備考,沒有時間對《數據結構與算法》進行研究學習了。因此,blog一直未更新。today is Friday,內心比較輕鬆,(哈哈,上班族懂個人感覺),有時間寫篇技術文章了。正好,最近研究了一些新技術,這篇文章權當對技術的梳理概括吧。子曰:」溫故而知新,能夠爲師也.」對於knowledge,咱們必定要時常複習、thought、概括、practice.只有這樣,咱們才能真正的掌握它。Einstein曾經說過:if you can’t explain it simply, you don’t understand  it as well enough .判斷咱們掌握knowledge的程度的方法是,將knowledge簡單清楚的講給別人聽。這也是,寫blog的好處,必定要掌握紮實,能本身思考,本身能夠講的明白。好了,廢話很少說了,Let’s Go!web

   最近在研究公司項目中的緩存模塊,在研究緩存模塊的過程當中,學到了不少以前沒有接觸到的東西。以前,本身沒有接觸過緩存。在學習過公司的緩存模塊後,如今對緩存的理解是這樣的:算法

緩存就是將咱們在項目中常用的數據,或是常常訪問的頁面存起來。第一次,會去訪問數據庫讀取數據,在讀取數據後,會把數據存入內存中。第二次再訪問,直接去內存中讀取,而再也不訪問數據庫。緩存的優勢就是能夠提升訪問效率,優化項目。Note:本身的理解,不必定正確。shell

.net,自己有一套本身的緩存機制,它是把緩存存入內存中的。可是,今天咱們不研究.net的緩存。今天,咱們來一塊兒認識一個New Friend, she name is Fabric. APPFABRIC 是Microsoft推出東西。Windows Server AppFabric 擴展了 Windows Server .爲 Web 應用程序和中間層服務提供加強的託管、管理和緩存功能。今天咱們只講她的緩存功能,感興趣的朋友能夠Go http://msdn.microsoft.com/zh-cn/library/ee677312.aspx 研究一下。數據庫

你們思考一個場景,五個客戶端訪問項目,就會生成5份緩存。這些緩存都存在了內存中,這就形成了浪費。那麼Fabric 的分佈式緩存就是爲了解決這個問題出現的。編程

fabric的緩存功能是這樣工做的,把多個服務器組成一個緩存羣集,這些個服務器存放緩存,程序統一訪問這些緩存羣集,服務器的緩存是以window server 方式運行的。windows

你們看下圖:緩存

QQ Photo20140718164636

上圖就是Fabric的組件,我給你們一一來介紹一下他們。服務器

緩存主機:就是安裝了Fabric服務的存放緩存用來供程序訪問的服務器。數據結構

緩存羣集:多個緩存主機構成了緩存羣集.Note:同個緩存羣集內的緩存主機是共享的。For Example:程序建立了一個緩存,放在了緩存主機A中,那麼程序未來訪問緩存主機B,也是能夠獲得緩存的。更新也是同樣。分佈式

緩存服務器:就是用來承載緩存主機的服務器.

羣集配置存儲位置:一個緩存羣集須要配置,須要配置文件。

PowerShell:Fabric是基於PowerShell來管理緩存服務的。

緩存客戶端:就是咱們的項目,就是須要訪問緩存的項目。

GO http://www.microsoft.com/zh-cn/download/details.aspx?id=15848 下載Fabric software.

安裝很簡單的,可是,她要求你的本機必須安裝有.net 3.5。這裏,重點講一下她的配置.

安裝成功後,咱們能夠經過她自帶的配置工具,來配置咱們的Fabric。

image

 

image

image

這個頁面是用來配置Fabric的託管、監控功能的。咱們Ignore了,繼續下一步.

image

上圖中的Set Caching Service configuration單選框要勾上,這是fabric緩存配置。

Caching Service account,咱們須要指定windows用戶來管理緩存服務。這個帳戶須要有管理員權限

Caching Service configuration provider:

是選擇配置方式,image.sdk說,緩存服務器若是是在工做組中,那麼就要選擇XML。Note:本人也是剛接觸,不是特別瞭解。

image

File share:須要你在緩存服務器上,建立一個共享文件夾。這個文件夾必須可以另其餘緩存服務器訪問到。由於,它存放的是咱們緩存羣集的XML配置文件。若是是第一次配置緩存羣集,就選擇New Cluster.未來爲其餘緩存集成員配置時,就能夠選擇Join Cluster.

Cluster Size:image.它是Limit cache Cluster 的個數的,咱們能夠控制緩存集中的緩存主機個數。

配置這些,咱們經過Power shell ,來查看一下咱們的配置。

以管理員身份運行Power shell.輸入search command,來看一下緩存服務。Get-CacheHost  獲得下圖:

image

從圖中,能夠看到 Service Status is DOWN, 咱們須要將服務開啓。

開始服務命令,須要參數。咱們須要設置參數

$myhost=Get-Cache

Start-CacheHost $myhost.HostName $myhost.portNO

執行完以後,服務已經開啓了。咱們查看看一下:

Get-CacheHost

執行後以下圖:

image

Service Status已是UP狀態了。說明服務已經開啓了。

可是,此時在客戶端使用service以前,管理員應當給客戶端分配windows帳戶的訪問權。Note:這個地方不是太懂,本身測試時,只是給本機的windows帳戶分配訪問權限。就是說,本機是緩存服務器又是客戶端服務器。

Get-cacheallowedclientaccounts 命令,查看容許訪問Service的客戶端帳戶有哪些.

image

咱們是第一次配置,因此當咱們輸入命令查看被容許訪問的客戶端帳戶時,會出現警告語。此時,咱們輸入分配權限命令:Grant-CacheAllowedClientAccount($env:UserDomain+」\」+$env:UserName)

此時,客戶端就能夠訪問咱們的Service了。

接下來,咱們來經過項目調用Service。首先,咱們須要在緩存服務器上創建一個緩存。New-Cache Default 輸入建立緩存的命令 其中Default是緩存名稱。客戶端經過這個Default來獲取緩存信息。

咱們來看一下客戶端的代碼:

首先咱們須要在web.config中配置一下:

<?xml version="1.0" encoding="utf-8"?>

<!--
  有關如何配置 ASP.NET 應用程序的詳細信息,請訪問
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->

<configuration>
    <configSections>
        <!-- required to read the <dataCacheClient> element -->
       
<section name="dataCacheClient"

 type
="Microsoft.ApplicationServer.Caching.DataCacheClientSection, Microsoft.ApplicationServer.Caching.Core, Version=1.0.0.0 , Culture=neutral, PublicKeyToken=31bf3856ad364e35 " allowLocation="true"

 allowDefinition
="Everywhere"/>
    </configSections>

   
<dataCacheClient requestTimeout="15000" channelOpenTimeout="3000" maxConnectionsToServer="1"> <localCache isEnabled="true" sync="TimeoutBased" ttlValue="300" objectCount="10000"/> <clientNotification pollInterval="300" maxQueueLength="10000"/> <hosts> <!--<host name="10.30.1.145" cachePort="22233"/>--> <host name="192.168.200.1" cachePort="22233"/> </hosts> <securityProperties mode="Transport" protectionLevel="EncryptAndSign" /> <transportProperties connectionBufferSize="131072" maxBufferPoolSize="268435456"

 maxBufferSize
="8388608" maxOutputDelay="2" channelInitializationTimeout="60000"

 receiveTimeout
="600000"/> </dataCacheClient>
    
    
    <system.web>
      <compilation debug="true" targetFramework="4.0" />
    </system.web>

</configuration>

代碼塊中高亮部分,就是咱們須要的配置信息。配置完這些信息,咱們還須要引用四個類庫。這四個類庫是安裝完Fabric,就會有的。他們位於\AppFabric 1.1 for Windows Server這個文件夾中:

Microsoft.ApplicationServer.Caching.Core.dll     Microsoft.ApplicationServer.Caching.Client.dll   Microsoft.WindowsFabric.Data.dll   Microsoft.WindowsFabric.Common.dll

咱們的客戶端的程序,是這樣來測試Fabric緩存的。咱們經過Update、Get、Delete 、Create頁面,來建立、修改、獲取、刪除咱們的緩存信息。緩存中存放的是咱們經過Create的頁面建立的Order實體信息。

咱們會用到如下幾個類:

ICacheController.cs:

namespace SampleWebApp{
///<summary>
///緩存類的公共接口,包括了對緩存的增刪改查的方法。
///</summary>
public interface ICacheController
{
///<summary>
///判斷該鍵值的數據在緩存中是否存在
///</summary>
///<param name="key">鍵值</param>
///<returns>存在返回True,不存在返回False</returns>
   bool HasTheKey(String key);

///<summary>
///將數據插入緩存中,數據會在插入緩存中配置時間以後,自動刪除
///</summary>
///<param name="key">數據在緩存中的鍵值</param>
///<param name="value">數據</param>
///<param name="timespan">刪除數據的時間間隔</param>
///<returns>插入成功,返回True,不然返回False</returns>
bool AddDataWithAbsExpire(string key,object value,TimeSpan timespan);

///<summary>
///從緩存中獲取數據
///</summary>
///<param name="key">數據在緩存中的鍵值</param>
///<returns>有返回要獲取的在緩存中的數據,沒有則返回NULL</returns>
object GetData(string key);

///<summary>
///把內存中鍵值爲key的數據進行更行
///</summary>
///<param name="key">數據在緩存中的鍵值</param>
///<param name="value">要更新的數據</param>
///<returns>更新成功返回True,不然返回False</returns>
  bool UpdateData(string key,object value);

///<summary>
///把內存中鍵值爲key的數據進行刪除
///</summary>
///<param name="key">數據在緩存中的鍵值</param>
///<returns>刪除成功返回True,不然返回False</returns>
  bool RemoveData(string key);
}
}

CacheUtil.cs:

public static  class CacheUtil
{
//緩存工廠變量,獲取緩存實例。
private static DataCacheFactory _factory=null;
//緩存實例變量
private static DataCache _cache=null;
public static DataCache GetCache()
{
if(_cache!=null)
return _cache;
//定義緩存服務器列表
//List<DataCacheServerEndpoint> servers=new List<DataCacheServerEndpoint>;
//web.config文件中已經配置了,這裏不須要配置了。客戶端配置緩存功能,能夠編程配置(實例化配置對象),也能夠XML配置.(web.config)
//servers.Add(new DataCacheServerEndpoint("10.30.1.145",22233));
//servers.Add(new DataCacheServerEndpoint("10.30.1.146",22233));
//建立緩存配置對象
DataCacheFactoryConfiguration configuration=new DataFactoryConfiguration();
//設置緩存配置的緩存服務器列表
//configuration.servers=servers;
//爲本地緩存設置默認屬性(本地緩存禁用)
configuration.LocalCacheProperties=new DataCacheLocalCacheProperies();
//禁用跟蹤,以免信息/web頁面的詳細信息
DataCacheClientLogManager.changelogLevel(System.Diagnostics.TraceLevel.off);
_factory=new DataCacheFacotry(configuration);
//得到默認命名緩存
_cache=_factory.GetCache("default");
return _cache;
}
}
CacheFactory.cs
namespace SampleWebApp
{
//返回ICacheController實例
public class CacheFactory
{
     pubic static ICacheController GetInstance()
{
           ICacheController cacheInterface=new CacheControllerF();
return cacheInterface;
}
}
}

CacheControllerF.cs

namespace SampleWebApp
{
//實現ICacheController接口
public class CacheControllerF:ICacheController
{
      private  DataCache cache;
      //構造函數
    public CacheControllerF()
{
           cache=CacheUtil.GetCache();
           
}

      public bool HasTheKey(string key)
{
             if(cache.Get(key)!=null)
              return true;
              return false;
}
     public bool AddDataWithAbsExpire(string key,object value,TimeSpan timeout)
{
        if(!HasTheKey(key))
{
         cache.Add(key,value,timeout);
}else
{
       return false;
}
}
     public object GetData(string key)
{
         object object=cache.Get(key);
        return object;
}

     public bool updateData(string key,object value)
{
         cahche.put(key,value);
         return true;
}

     public bool RemoveData(string key)
{
          return cache.Remove(key);
        
}
}
}

以上就是我對APPFABRIC的學習認識。只是一點點皮毛,還需繼續研究。

相關文章
相關標籤/搜索