浅谈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!

   最近在研究公司项目中的缓存模块,在研究缓存模块的过程中,学到了很多之前没有接触到的东西。之前,自己没有接触过缓存。在学习过公司的缓存模块后,现在对缓存的理解是这样的:

缓存就是将我们在项目中经常使用的数据,或是经常访问的页面存起来。第一次,会去访问数据库读取数据,在读取数据后,会把数据存入内存中。第二次再访问,直接去内存中读取,而不再访问数据库。缓存的优点就是可以提高访问效率,优化项目。Note:自己的理解,不一定正确。

.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 方式运行的。

大家看下图:

上图就是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。

 

这个页面是用来配置Fabric的托管、监控功能的。我们Ignore了,继续下一步.

上图中的Set Caching Service configuration单选框要勾上,这是fabric缓存配置。

Caching Service account,我们需要指定windows用户来管理缓存服务。这个账户需要有管理员权限

Caching Service configuration provider:

是选择配置方式,.sdk说,缓存服务器如果是在工作组中,那么就要选择XML。Note:本人也是刚接触,不是特别了解。

File share:需要你在缓存服务器上,创建一个共享文件夹。这个文件夹必须能够另其他缓存服务器访问到。因为,它存放的是我们缓存群集的XML配置文件。如果是第一次配置缓存群集,就选择New Cluster.将来为其他缓存集成员配置时,就可以选择Join Cluster.

Cluster Size:.它是Limit cache Cluster 的个数的,我们可以控制缓存集中的缓存主机个数。

配置这些,我们通过Power shell ,来查看一下我们的配置。

以管理员身份运行Power shell.输入search command,来看一下缓存服务。Get-CacheHost  得到下图:

从图中,可以看到 Service Status is DOWN, 我们需要将服务开启。

开始服务命令,需要参数。我们需要设置参数

$myhost=Get-Cache

Start-CacheHost $myhost.HostName $myhost.portNO

执行完之后,服务已经开启了。我们查看看一下:

Get-CacheHost

执行后如下图:

Service Status已经是UP状态了。说明服务已经开启了。

但是,此时在客户端使用service之前,管理员应当给客户端分配windows账户的访问权。Note:这个地方不是太懂,自己测试时,只是给本机的windows账户分配访问权限。就是说,本机是缓存服务器又是客户端服务器。

Get-cacheallowedclientaccounts 命令,查看允许访问Service的客户端账户有哪些.

我们是第一次配置,所以当我们输入命令查看被允许访问的客户端账户时,会出现警告语。此时,我们输入分配权限命令: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的学习认识。只是一点点皮毛,还需继续研究。

浅谈Windows Server APPFABRIC

时间: 2024-10-08 19:00:00

浅谈Windows Server APPFABRIC的相关文章

浅谈SQL Server任务调度

在前面两篇文章中( 浅谈SQL Server内部运行机制 and 浅谈SQL Server数据内部表现形式 ),我们交流了一些关于SQL Server的一些术语,SQL Sever引擎 与SSMS抽象模型,SQL Server内部存储机制和SQL Server内部体系结构等.讨论的这些问题,均可以归为一个问题,即"SQL Server是怎么执行客户端输入的SQL 语句的?”,其中,重点讨论了下图(SQL Server 体系结构) 然而,如果我们仅仅了解如上技术,是不具备一个资深DBA或数据库优化

Windows Server AppFabric分布式缓存研究

分享一则先前对Windows Server AppFabric分布式缓存的技术研究. 一. AppFabric 技术架构和原理 AppFabric与Memcached类似,采用C/S的模式,在 server 端启动服务进程,在启动时可以指定监听的 ip,自己的端口号,所使用的内存大小等几个关键参数.一旦启动,服务就一直处于可用状态. 适用于使用 ASP.NET.Windows Communication Foundation (WCF) 和 Windows Workflow Foundation

Windows Server AppFabric 安装文档

安装指南 入门标题页 3 Windows Server AppFabric 安装和配置指南 3 版权 3 版权所有 3 简介 3 清单:规划安装 4 硬件要求 4 使计算机作好安装准备 5 本节内容 5 安装关键的 Windows 更新 5 安装 Windows 更新 6 安装修补程序 6 KB980423 6 安装 .NET Framework 6 安装 Windows PowerShell 2.0 7 为缓存服务配置设置准备共享网络文件夹 8 安装和配置 Windows Server App

SharePoint 2013 必备组件之 Windows Server AppFabric 安装错误

SharePoint 2013 必备组件之 Windows Server AppFabric 安装错误 1.如下图,在使用SharePoint2013产品准备工具的时候,网上下载安装Windows Server AppFabric的时候,报错,点击完成重启计算机,重新安装依然报错. 2.无奈之下,只有选择手动安装,下载好安装包,双击安装: 安装完成就报错,但是有如下提示,不过相比日志看起来人性化多了. 由于安装程序MSI返回错误代码1603,因此,AppFabric安装失败. 3.经过不懈的百度

浅谈Windows平台下C++调用静态链接库的方式

浅谈Windows平台下C++调用静态链接库的方式 1. 什么是静态链接库?为什么要用静态链接库? 维基百科上关于静态库的解释是这样的:在计算机科学里,静态库(英语:Static library, Statically-linked library),或称静态库,是一个外部函数与变量的集合体.静态库的文件内容,通常包含一堆程序员自定的变量与函数,其内容不像动态链接库那么复杂,在编译期间由编译器与连接器将它集成至应用程序内,并制作成目标文件以及可以独立运作的可执行文件. 由上面的解释可以很清楚的看

浅谈SQL Server数据库分页

数据库分页是老生常谈的问题了.如果使用ORM框架,再使用LINQ的话,一个Skip和Take就可以搞定.但是有时由于限制,需要使用存储过程来实现.在SQLServer中使用存储过程实现分页的已经有很多方法了.之前在面试中遇到过这一问题,问如何高效实现数据库分页.刚好上周在业务中也遇到了这个需求,所以在这里简单记录和分享一下. 一 需求 这里以SQLServer的示例数据库NorthWind为例,里面有一张Product表,现在假设我们的需求是要以UnitPrice降序排列,并且分页,每一页10条

浅谈SQL Server中的事务日志(四)----在完整恢复模式下日志的角色

浅谈SQL Server中的事务日志(四)----在完整恢复模式下日志的角色 本篇文章是系列文章中的第四篇,也是最后一篇,本篇文章需要前三篇的文章知识作为基础,前三篇的文章地址如下: 浅谈SQL Server中的事务日志(一)----事务日志的物理和逻辑构架 浅谈SQL Server中的事务日志(二)----事务日志在修改数据时的角色 浅谈SQL Server中的事务日志(三)----在简单恢复模式下日志的角色 简介 生产环境下的数据是如果可以写在资产负债表上的话,我想这个资产所占的数额一定不会

浅谈SQL Server中的事务日志(二)----事务日志在修改数据时的角色

浅谈SQL Server中的事务日志(二)----事务日志在修改数据时的角色 本篇文章是系列文章中的第二篇,以防你还没有看过第一篇.上一篇的文章地址如下: 浅谈SQL Server中的事务日志(一)----事务日志的物理和逻辑构架 简介 每一个SQL Server的数据库都会按照其修改数据(insert,update,delete)的顺序将对应的日志记录到日志文件.SQL Server使用了Write-Ahead logging技术来保证了事务日志的原子性和持久性.而这项技术不仅仅保证了ACID

浅谈SQL Server中的事务日志(一)----事务日志的物理和逻辑构架

浅谈SQL Server中的事务日志(一)----事务日志的物理和逻辑构架 简介 SQL Server中的事务日志无疑是SQL Server中最重要的部分之一.因为SQL SERVER利用事务日志来确保持久性(Durability)和事务回滚(Rollback).从而还部分确保了事务的ACID属性.在SQL Server崩溃时,DBA还可以通过事务日志将数据恢复到指定的时间点.当SQL Server运转良好时,多了解一些事务日志的原理和概念显得并不是那么重要.但是,一旦SQL SERVER发生崩