经过企业分布式缓存共享运行时数。替换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

相关文章