经公司分布式缓存共享运行时数。替换EnterPrise Library 4.0 缓存应用程序块的CacheManager

广大公司都整合使用 Microsoft .NET Framework 和 Java
应用程序,尤其是那些由于各种考虑非克仅仅靠让单一技术的大中型公司。
通常,企业采取 Web 应用程序、面向服务之网布局 (SOA) Web
服务及另服务器应用程序来处理大量政工。

缓存是故来增进应用程序性能的广泛技术,其落实方式是将常用数据从慢数据源复制到又快的数据源。对于数据令之应用程序来说,该技能一般需用由数据库或
Web 服务检索到之数码缓存到地头电脑的内存中。

里头不少应用程序在运行时欲相互共享数据。
通常,这些应用程序全都是本着数据库中所蕴藏的常用业务数据开展操作。
它们当的一般是接连数据流(如金融交易应用程序),而且亟需以运行时多次处理数据并与其余应用程序共享结果。

当缓存特定于每个应用程序时最为轻实现缓存技术,但是一旦多单应用程序需要使用一个共用缓存,那么问题拿变得再具备挑战性。例如,大型网站便以劳务器场,其中蕴蓄多单供相同内容之计算机。当每个请求到达时,它见面给分配为庙被之内同样高电脑。然而,如果消息缓存到集市受到之等同光计算机内存中,其他计算机被的休息存就无法访问它,因此下跌了缓存的频率。该问题的一模一样种缓解方案是用缓存移到集中式的多寡存储(如数据库),或以会受到之中同样令服务器指定为缓存服务器,只用来囤缓存的绝无仅有副本。使用集中式缓存存储在一个题目,那便是它们引入了单点故障,且会成为瓶颈。

虽然数据库是世代存储数据的根本存储区,但并无太相符运行时数共享。
其中一个缘故在,从数据库读取数据时不克尽保高性能。
再者,在处理事务方面数据库的扩展性并无好,因此非常可能怪快会成为瓶颈,并降低因让它的保有应用程序的快。

使战胜单一、集中式缓存存储的局限性,请考虑下 Alachisoft 开发的
NCache 3.2。NCache
是一个群集缓存框架,能够无缝管理分布于多台计算机上之休养生息存。管理员首先通过
NCacheManager
工具指定群集拓扑和缓存策略。管理员可以指定多种安,包括是以缓存存储在内存还是磁盘中、逐出策略与最好要命缓存大小相当于;这些设置以及拓扑均只是在运转时修改。此外,NCacheManager
还提供平等多元统计数据,它们不仅可用以监控缓存的运行状况,还而看做微调缓存设置以获无限帅性能的指标。

另外,也束手无策实时、有效地共享数据。
实时数共享要求如有应用程序更新了多少,则对拖欠数据感兴趣之任何有应用程序都应该马上接受通知。
同样,某些应用程序可能正守候某些数据类型被创造并可用,一旦这些操作有,这些应用程序应当就接通知。

每当概念缓存群集时,您得指定是诺复制群集内之缓存还是应允本着那个进行分区。复制的复苏存群集所享有的复苏存内容以及广大集中每令机械及之始末全一致。因为没有单点故障,所以复制的缓存可领高可靠性;但是针对群集的任何更新都须复制到拥有的群集。因此,对因读取为主底缓存或略群集来说,复制的群集是有口皆碑选择。另一方面,分区缓存在群集内之一一计算机之间划分缓存内容,并为创新与重型群集实现了再好的性能。

无论需要共享数据的那些应用程序是均基于 .NET
Framework,还是发生一部分基于 .NET 而另一样片段因 Java,这都是广问题。
事实上,如果应用程序混合使用 .NET 和
Java,问题会另行重,因为对此类应用程序而言,在应用程序层面达到根本无以本机形式共享数据的活动智。

NCache 还提供了并及 Microsoft 缓存应用程序块 (CAB)
的提供程序。Alachisoft 公司发布了一个NCache
Express版本,这个版是得免费用的,但是来如下限制:

釜底抽薪方案:企业分布式缓存

有幸的是,企业分布式缓存可以缓解这些题材。
这种内存中存储可过多个服务器,将服务器的内存集中在同,因而内存存储容量是只是扩大的。
事务容量为移得可扩大,添加的服务器越多,能够处理的政工负载越老。

号分布式缓存还提供了轩然大波通报机制,应用程序在更新数据后得以彼此关照。
由此,您得有所异步事件通报机制,其中一个应用程序生成数据,其他应用程序可以使该数额,从而创造了劳动者/使用者模型或发表/订阅模型。
多个应用程序可订阅某些数据类型,当该数量公布时这些应用程序将收受通知。

还有雷同栽通读/通写机制,即商家分布式缓存本身可以从数据源和应用程序读取大量数额。
无论应用程序是根据 Java 还是
.NET,其代码都得转换得重复简便,因为可以起店分布式缓存中读取数据,
而不管需坐数据库访问代码。 图 1 是一个使企业分布式缓存的 .NET
Framework 应用程序的简短示例。

图 1 行使企业分布式缓存的 .NET 应用程序

          using System;...          using Alachisoft.NCache.Web.Caching; namespace Client{  class Program  {    static string _sCacheName = "myAppCache";    static Cache _sCache = NCache.InitializeCache(_sCacheName);     static void Main(string[] args)    {      string employeeId = "1000";      string key = "Employee:EmployeeId:" + employeeId;                  // First check the cache for this employee      Employee emp = _sCache.Get(key);       // If cache doesn't have it then make database call      if (emp == null)      {        emp = LoadEmployeeFromDb(employeeId);         // Now add it to the cache for next time        _sCache.Insert(key, emp);      }    }  }}        

而外,企业分布式缓存可以依据其它第三正应用程序对数据库所举行的其余数变动进行协同。
它同数据库里有连接,因此一旦数据库被有数据类型发生变化,便会吸纳通知。
图 2 给来了 .NET 和 Java
应用程序如何在运转时通过企业分布式缓存相互共享数据的图解说明。

图片 1.png)

图 2 .NET 和 Java 应用程序通过分布式缓存共享数据

  • 支撑有限光服务器环境
  • 客户端缓存不论是本地或来另外一雅服务器
  • 缓存复制拓扑(没有镜像,分区,分区的副本,或者客户端缓存)
  • 顶特别的苏存尺寸是500M
  • 无支持分布式ASP.NET Session State Cache
  • 未支持分布式ASP.NET Output Cache
  • 只支持32位(没有64位版本)
  • 支持1.1/2.0/3.0/3.5客户端

.NET 和 Java 应用程序共享数据

指企业分布式缓存,多独应用程序(不论是因 .NET 还是
Java)可以看与一个缓存并通过缓存共享数据。 如果单是 .NET
应用程序(或就是 Java
应用程序)通过分布式缓存共享数据,则应用程序可以将目标存储吗本机二前进制格式并针对那进展序列化/反序列化。
但如果是个别种植类型的应用程序之间交互共享数据,则用以数据以可移栽数据格式存储在分布式缓存中。

马上是因当 .NET 应用程序在分布式缓存中储存对象时,实际上会将目标转换为
XML 文档并储存该 XML。 另一方面,当 Java
应用程序从分布式缓存读取该数据时,会以 XML 转换为 Java 对象。
实际上,XML 被当作可移栽数据存储机制,因为 .NET 对象吃转移为
XML,然后还要从 XML 转换为 Java,反之亦然。

生诸多开源代码库可以帮助您将 .NET 或 Java 对象转换为
XML,然后变回对象格式。
当然,您吗得以友善付出,不过我提议乃选择开放源代码库。 我个人于喜欢
Carlos Jaimez 和 Simon Lucas 开发之 Web Objects in
XML(WOX,woxserializer.sourceforge.net)。
本文中将以选择自那网站的 Java 到 .NET 转换示例(已征得他们许)。
3
显示了利用 Java 和 C# 定义的 Student 和 Course 类。

图 3 用 Java 和 C# 编写的 Student 和 Course 类

          // Java classespublic class Student{  private String name;  private int registrationNumber;  private Course[] courses;}public class Course{  private int code;  private String name;  private int term;} // ***************************************************// .NET classes in C#public class Student{  private String name;  private Int32 registrationNumber;  private Course[] courses;}public class Course{  private Int32 code;  private String name;  private Int32 term;}        

假若我们使用 .NET 和 Java 应用程序将上述 Student 和 Course
对象存储在商家分布式缓存中,那么随着可使 WOX 库将这些目标转换为
XML。 之后,如果应用程序想只要于店分布式缓存中读取这些目标,则再次读取
WOX 库,将 XML 转换回 Java 或 .NET 对象格式。 图 4 显示了变为 XML
格式的 Student 和 Course 类。

图 4 转换为 XML 的 Java 和 .NET 类

          <object type="Student" id="0">  <field name="name" type="string" value="Carlos Jaimez"/>  <field name="registrationNumber" type="int" value="76453"/>  <field name="courses">    <object type="array" elementType="Course" length="3" id="1">      <object type="Course" id="2">        <field name="code" type="int" value="6756"/>        <field name="name" type="string"           value="XML and Related Technologies"/>        <field name="term" type="int" value="2"/>      </object>      <object type="Course" id="3">        <field name="code" type="int" value="9865"/>        <field name="name" type="string"           value="Object Oriented Programming"/>        <field name="term" type="int" value="2"/>      </object>      <object type="Course" id="4">        <field name="code" type="int" value="1134"/>        <field name="name" type="string" value="E-Commerce Programming"/>        <field name="term" type="int" value="3"/>      </object>    </object>  </field></object>        

以公的应用程序中,应当由缓存层或数量访问层调用 WOX。

NCache企业版特点如下:

基于项之风波通报

事件通报机制功能强大,多单应用程序(.NET 和
Java)可经过该机制协调异步数据共享。
在拖欠机制的扶持下,应用程序可免执行代价高昂的数据库轮询。 该机制而每当
.NET 和 Java 应用程序间共享,因此会无缝地互相通报。

事件通报之一个时不时因此路即基于项的通告。
在此类型中,应用程序登记感兴趣之逐条缓存项密钥(可能早已在,也或无有于缓存中),只要任何人因为任何原因在分布式缓存中添加、更新或去了该项,应用程序都以分头接收通知。
例如,即使某项由于到或于逐出而挨删除,也拿触发项删除事件通报。

.NET 和 Java
应用程序都足以登记对同样缓存项的趣味,并吸纳有关该项的通知。
通知被便还连吃影响的休养存项,如齐片丁所陈述,这些项将根据应用程序的类型转换为
.NET 或 Java 格式。

缓存拓扑

应用程序生成的自定义事件通报

于 .NET 和 Java 应用程序,企业分布式缓存同时为是战无不胜的风波传播平台。
与店分布式缓存相连的其余应用程序都好在缓存中触发自定义事件,而后,不论应用程序位于何处,只要报了针对性这些从定义事件感兴趣,那么还见面接到缓存的打招呼。
这自己就是在局分布式缓存中提供了一个精锐的独于言语和平台的事件传播机制。

应用程序可据该意义协调异步数据共享。
例如,如果某应用程序将数据放入分布式缓存中,然后触发一个自定义事件,计划之后使用或者拍卖该数额的别应用程序将即刻接通知。

  • 地面缓存。
  • 复制缓存。
  • 分区缓存(自动分区)。
  • 分区缓存(紧密定位)。
  • Client Cache 客户端缓存。
  • 本地 .NET 客户端 (InProc & OutProc)。
  • 本地 Java 客户端 (OutProc)。
  • 远程 .NET & Java 客户端。
  • Partitioned Cache with with Replicas 复制分区缓存。

依据连续查询的事件通报

据悉项的事件通报虽然功能强大,但是要求应用程序知晓缓存项的密钥。
如果拿基于项之轩然大波通报和企业分布式缓存中不时提供的旁分组功能(如标记、组/子组等)结合使用,那么几可以拍卖需依据各个缓存项所生的状通知应用程序的备情况。

然,基于项的事件在个别只限。
首先,前面提到过,应用程序必须了解想使接到通知之拥有缓存项的密钥。
其次,不论这些项有哪变动,应用程序都用接收通知。
应用程序无法设定更详细的正经,以便就于数来一定变化时才接过通知。

为诺本着此类情况,企业分布式缓存提供了连查询,这是如出一辙种植恍若 SQL
的询问,可捕获应用程序所感兴趣数据的系事务规则。
连续查询并非搜寻查询,而是店铺分布式缓存保持的某种“标准”。只要分布式缓存中丰富或更新了情,便会用欠操作与连续查询专业进行比较。
如果标准相当,则触发事件,并通知发布连接查询专业的应用程序。

经连日查询,应用程序可以等待还扑朔迷离的更动,并独自当起这些反时才接过通知。

动态聚类

接读与通写处理程序

有的是上,应用程序尝试读取的数码并无以柜分布式缓存中,必须从数据库中读取。
此时,应用程序可以一直访问数据库并宣读博该多少,但立刻意味所有应用程序都得复制相同的数量访问代码(尤其是于
.NET 和 Java 中)。
或者,也可以当待数常常,要求企业分布式缓存为夫于数据库被读取该数量。

发矣通读/通写功能,企业分布式缓存可起数据源直接读取数据。
应用程序可简化其代码,从而无需访问数据库。
它们才待要求合作社分布式缓存为其提供数据,如果缓存中不管拖欠数额,则做客数据源并宣读博该多少。
图 5 显示了店家分布式缓存是哪采取通读和通写功能的。

图片 2.png)

图 5 通读/通写的使用原理

生一些索要留意。
虽然吃分布式缓存从数据库读取数据有大充分之补,但准发生众多数据类型最好是因为应用程序直接由数据库读取。
如果只要读取的是含复杂连接的数据集,那么极端好是因为应用程序亲自读取,然后以那个放入分布式缓存中。

  • 在运转时累加或删除节点。
  • 拧变化时展开事件通报。

数据库同步

由于大量数目为放入了铺面分布式缓存中,因此须确保这些多少和主数据源(通常也关系数据库)保持并才生意义。
企业分布式缓存提供了这个作用。

经过数据库同步功能,应用程序可以指定缓存项和数码库表中行之间的涉(依赖关系)。
只要数据库被的数量发生反,数据库服务器就会硌 .NET 事件(即使是 SQL
Server 2005/2008 数据库),并以这更改通知公司分布式缓存。 对于不支持
.NET
事件之任何数据库,企业分布式缓存也供了但配备的轮询,以便分布式缓存可以轮询数据库(比如各级隔
15 秒钟一差),并于数变动时开展协同。

跟着分布式缓存将起缓存中去该数量,或读博该数额的全新副本(如果安排了通读功能)。
图 6 显示了企业分布式缓存与 SQL Server 是安一同的。

图片 3.png)

图 6 分布式缓存中的数据库同步

ASP.NET 会讲话聚类

高可用性:自修复动态群集

商厦分布式缓存可用作多个应用程序之间的运行时数据库共享平台(.NET 到
.NET、.NET 到 Java 和 Java 到 Java)。
很多情景下,这些应用程序对于你的店家而言要。

由于过多重中之重任务应用程序都凭借让店分布式缓存,因此分布式缓存必须具有高可用性。
企业分布式缓存不能够瘫痪或已工作,并且该完全不需要停机以拓展维护或其它常规操作。

商店分布式缓存通过可由修复的动态缓存服务器群集来贯彻高可用性。
此处的自修复表示群集清楚那拥有成员,当有成员离开或在时会动态调整。
此外,还足以确保数据是又的坐保险可靠性,并且使发生群集成员离开,其备份数据而机关供应用程序使用。
所有这些力量必须快速实施,且未会见对用企业分布式缓存的应用程序造成其他中断。

  • 因 .NET 1.1 的 HttpModule (没有改变代码)。
  • 据悉 .NET 2.0 的 Session Store Provider (没有改动代码)。

唯独扩展性:缓存分区和复制

用企业分布式缓存的过多应用程序都是大工作应用程序。
因此,缓存群集上的负载会迅速增强。不过,如果公司分布式缓存的响应时间延长,其价值会大打折扣。
事实上,在大势所趋范围外,企业分布式缓存要优惠关系数据库。由于她好于动态群集中长更多的服务器,因而每秒处理的业务要于数据库多得多。
但除非分布式缓存中的数量为智能方式囤,否则无法落实而扩展性。
这同接触只是透过数量分区来促成,每个分区进行复制以保险可靠性。

幸好了信用社分布式缓存,您得下分区拓扑来开展扩展。 图 7
显示了分区复制拓扑。

图片 4.png)

图 7 用于可靠扩展的分区复制拓扑

合作社分布式缓存会对缓存中储存的保有数据自动进行分区。
每个分区存储于不同服务器上,同时在任何一样令服务器上开创及储存该分区的备份。
这管了就其它服务器停机,数据为无见面少。

总而言之,您得应用分区技术于动态群集中长更多的缓存服务器因为扩大存储容量,随着服务器的增多,每秒处理的事务量也用加强。
并且,复制确保了数量的可靠性,因为服务器停机不会见促成数据丢失。

老三在组成

成效和合作

总的说来,企业分布式缓存是大工作 .NET 和 Java
应用程序相互共享数据的佳绩途径。
其强劲的波传播机制,包括因项之轩然大波通报、应用程序生成的自定义事件通报及因连续查询的风波通报,确保了实时共享数据。

尽管统筹而言,企业分布式缓存不仅速度很快,而且是只是扩大的。
高快来源于自在内存中展开操作。 可扩大性源自能添加多华服务器。
它对实在存储进行分区,并将每个分区存储在不同服务器上,同时于另外一样宝服务器(如
RAID 磁盘)上囤积该分区的备份。

现之应用程序与过去比有所更胜似之功效要求。
它们要以更享有协作性的点子来共享数据以及相相互。
它们不仅需要速度飞快,同时还要满足无限高负荷需求,以避免损害性与而扩展性。
而且,它们必须超过多独阳台实施操作,使 .NET 应用程序可以透明而中地及
Java 应用程序合作。 企业分布式缓存可帮我们上上述有目标。

Iqbal Khan 是 Alachisoft
(alachisoft.com)
的总裁及技术推广者,该铺面供的 Ncache(.NET
分布式缓存)可增长商家应用程序的性及而扩展性。Khan 于 1990
年获得印第安那么大学的电脑对硕士学位。您得经电子邮件与他沟通:iqbal@alachisoft.com

原文链接:http://msdn.microsoft.com/zh-cn/magazine/gg232763.aspx

  • NHibernate Level-2 Cache Provider.
  • Caching Application Block (CAB).
  • TierDeveloper.

数据到

  • 决的年月到。
  • 空时间到。

缓存依赖关系

  • 根据关键字的指。
  • 依据文件之负。
  • 基于多缓存关键字之赖。

缓存与数据库同步

  • 基于 SQL Server 2005 的 SqlDependency.
  • 冲投票式的 DbDependency, 适用于SQL 2000, Oracle & OLEDB.

Clustered-Wide 事件通报

  • 创新与去所选择的机要字的波。
  • 安插,更新与去任意关键字的事件。
  • 由定义事件通报。

Object Query Language (OQL)

  • OQL 适用于依据性的询问。
  • 呢查询创建属性的目录。

回收

  • 原则性的跟可变大小的休养存。
  • Least Recently Used (LRU).
  • Least Frequently Used (LFU).
  • 事先级的 FIFO.

存储选项

  • .NET Heap.
  • 外存映射文件。
  • 重要缓存及溢起缓存。

NCache 管理器

  • 长途图形化 Cluster 配置。
  • 远程 Cluster 监视器。
  • InProc 缓存实例监视器。

杂项

  • 连读,连写,延迟写。
  • 异步操作(添加,插入,删除)。
  • 困难凑串行化。
  • 大量操作 (添加,插入,删除,获取数据)。
  • 数据组。
  • 大抵缓存连接。
  • 64 位版本。
  • 安全。

切实看参看:http://www.alachisoft.com/ncache/index.html

相关文章

admin

网站地图xml地图