浅谈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="" channelOpenTimeout="" maxConnectionsToServer=""> <localCache isEnabled="true" sync="TimeoutBased" ttlValue="" objectCount=""/> <clientNotification pollInterval="" maxQueueLength=""/> <hosts> <!--<host name="10.30.1.145" cachePort=""/>--> <host name="192.168.200.1" cachePort=""/> </hosts> <securityProperties mode="Transport" protectionLevel="EncryptAndSign" /> <transportProperties connectionBufferSize="" maxBufferPoolSize=""
maxBufferSize
="" maxOutputDelay="" channelInitializationTimeout=""
receiveTimeout
=""/> </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的更多相关文章
- c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程
c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...
- SharePoint 2013 必备组件之 Windows Server AppFabric 安装错误
1.如下图,在使用SharePoint2013产品准备工具的时候,网上下载安装Windows Server AppFabric的时候,报错,点击完成重启计算机,重新安装依然报错. 2.无奈之下,只有选 ...
- 误解了Windows Server AppFabric
想为自己的流程引擎找一个宿主,选择了几套方案,想先从AppFabric开始,原因主要出于以下几点: 1. 自己用过Windows Service或Form作为一些定时任务等应用的宿主,但苦于学艺不精, ...
- Windows Server AppFabric 安装文档
安装指南 入门标题页 3 Windows Server AppFabric 安装和配置指南 3 版权 3 版权所有 3 简介 3 清单:规划安装 4 硬件要求 4 使计算机作好安装准备 5 本节内容 ...
- Windows Server AppFabric分布式缓存研究
分享一则先前对Windows Server AppFabric分布式缓存的技术研究. 一. AppFabric 技术架构和原理 AppFabric与Memcached类似,采用C/S的模式,在 ser ...
- 浅谈Windows环境下DOS及MS-DOS以及常见一些命令的介绍
浅谈Windows环境下DOS及MS-DOS以及常见一些命令的介绍 前记 自己是搞编程的,首先我是一个菜鸟,接触计算机这么久了,感觉很多计算机方面的技术和知识朦朦胧胧.模模糊糊,貌似有些贻笑大方了:所 ...
- 【SqlServer系列】浅谈SQL Server事务与锁(上篇)
一 概述 在数据库方面,对于非DBA的程序员来说,事务与锁是一大难点,针对该难点,本篇文章视图采用图文的方式来与大家一起探讨. “浅谈SQL Server 事务与锁”这个专题共分两篇,上篇主讲事务及 ...
- 浅谈SQL Server内部运行机制
对于已经很熟悉T-SQL的读者,或者对于较专业的DBA来说,逻辑的增删改查,或者较复杂的SQL语句,都是非常简单的,不存在任何挑战,不值得一提,那么,SQL的哪些方面是他们的挑战 或者软肋呢? 那就是 ...
- 浅谈SQL Server数据内部表现形式
在上篇文章 浅谈SQL Server内部运行机制 中,与大家分享了SQL Server内部运行机制,通过上次的分享,相信大家已经能解决如下几个问题: 1.SQL Server 体系结构由哪几部分组成? ...
随机推荐
- 在Silverlight中打开网页的几种方法
HtmlPage.PopupWindow HtmlPopupWindowOptions option = new HtmlPopupWindowOptions(); option.Directorie ...
- shell中命令的执行流程
在shell中,一个命令有3中写法: 1 可以直接写(Normal Command) 2 可以放在双引号中("Command") 3 可以放在单引号中('Comand') 这3中写 ...
- hibernate级联保存,更新个人遇到的问题
在级联更新的时候,数据库中的数据是增加的,只是外键不存在,导致这样的问题产生的原因是,字表主键ID没有添加到集合中,导致Hibernate找不到子项而执行更新.
- 利用css进行网页布局
网页布局: 又称版式布局,是网页UI设计师将有限的视觉元素进行有机的排列组合,将理性的思维个性的化的表现出来,是一种具有个人艺术特色的视觉传达方式.传达信息的同时有美感.网页设计特点(相对纸媒来说). ...
- ucos_ii 上锁函数OSSchedLock()函数透析
因为任务调度时一般都是通过OSTIMEDLY()来实现.在这个函数中会对当前的任务执行挂起.同时查看任务调度表中是否有优先级合适的就绪任务.如果当前任务运行时调用OSSchedLock()给调度器上锁 ...
- JavaWeb学习笔记--跳转方法小结
服务端跳转:1. RequestDispatcher.forward() public void doGet(HttpServletRequest request, HttpServletRespo ...
- Jasper_crosstab_group _Error incrementing crosstab dataset
error detail: net.sf.jasperreports.engine.JRException: net.sf.jasperreports.engine.JRRuntimeExceptio ...
- 【杭州图铭科技有限公司招募贴】——“JUST DO IT”
I'm convinced that the only thing that kept me going was that I loved what I did. ——Steve Paul Jobs( ...
- NGINX小技巧--将所有目录和目录下所有文件分别给与不同的权限
为了安全,有时要将文件的权限进行限制,但,目录如果没有755,则不能进入. 所以需要分别给权限 find ./ -type f -name "*" |xargs ls -l
- 使用Keil软件编写汇编源程序应注意事项
1)一定要使用微软的txt文本编辑器,否则键入逗号时编译通不过.应该是这个样('),不该是这个样(,). 2) 用数字做标号时,前面一定要加一个英文字母,否则编译通不过. 3) 有时编译通过的.asm ...