.NET 和Java 对象 XML序列化 库WOX通过企业分布式缓存共享运行时数。

当 .NET 应用程序将对象转换为 XML 文档并蕴藏该 XML。实际上,XML
被当可移栽数据存储机制,因为 .NET 对象被撤换为 XML,然后以起 XML
转换为 Java,反之亦然。

广大铺面还做使用 Microsoft .NET Framework 和 Java
应用程序,尤其是那些由各种考虑非克独靠让单纯技术之大中型企业。
通常,企业利用 Web 应用程序、面向服务的网布局 (SOA) Web
服务与另外服务器应用程序来拍卖大量业务。

Carlos Jaimez 和 Simon Lucas 开发的 Web Objects in
XML(WOX,woxserializer.sourceforge.net)就是一个完这起职责的开源项目。

里头许多应用程序在运作时用相互共享数据。
通常,这些应用程序全都是本着数据库被所蕴藏的常用业务数据开展操作。
它们当的貌似是接连数据流(如金融交易应用程序),而且亟需以运行时屡屡处理数据并和另外应用程序共享结果。

下面是摘自该网站的 Java 到 .NET 转换示例。下面是动 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
Framework,还是产生一些基于 .NET 而任何一样有的因 Java,这还是周边问题。
事实上,如果应用程序混合使用 .NET 和
Java,问题会见更要紧,因为对此类应用程序而言,在应用程序层面达到有史以来未曾坐本机形式共享数据的自发性方式。

一旦我们利用 .NET 和 Java 应用程序将上述 Student 和 Course 对象下 WOX
库将这些目标转换为 XML。
之后,如果应用程序想要于XML读博这些目标,则重复读取 WOX 库,将 XML
转换回 Java 或 .NET 对象格式。下面是变为 XML 格式的 Student 和 Course
类。

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

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

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

还有同种植通读/通写机制,即公司分布式缓存本身可以由数据源和应用程序读取大量多少。
无论应用程序是依据 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 应用程序通过分布式缓存共享数据

转换为 XML 的 Java 和 .NET 类

.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。

 <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>        

根据项的波通报

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

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

.NET 和 Java
应用程序都得注册对相同缓存项的兴趣,并收到有关该项的打招呼。
通知受一般还包吃影响之复苏存项,如齐有些遇所陈述,这些项用基于应用程序的类型转换为
.NET 或 Java 格式。

于您的应用程序中调用 WOX将XML转换为.NET或是Java对象。

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

于 .NET 和 Java 应用程序,企业分布式缓存同时也是无敌的事件传播平台。
与合作社分布式缓存相连的外应用程序都足以当缓存中触发自定义事件,而后,不论应用程序位于何处,只要报了对这些由定义事件感兴趣,那么还见面收缓存的通知。
这自便以小卖部分布式缓存中提供了一个强有力的独于言语和平台的风波传播机制。

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

根据连续查询的轩然大波通报

因项的波通报虽然功能强大,但是要求应用程序知晓缓存项的密钥。
如果以根据项的事件通报和合作社分布式缓存中常提供的其他分组功能(如标记、组/子组等)结合使用,那么几可拍卖要依据各个缓存项所产生的情形通报应用程序的所有情况。

可是,基于项之风波有个别独限。
首先,前面提到了,应用程序必须懂得想如果收通知的有所缓存项的密钥。
其次,不论这些项有何变化,应用程序都拿收取通知。
应用程序无法设定更详细的正规化,以便就于多少产生一定变化时才接受通知。

呢诺针对此类情况,企业分布式缓存提供了连年查询,这是平等种植类似 SQL
的查询,可捕获应用程序所感兴趣数据的有关事情规则。
连续查询并非搜寻查询,而是店铺分布式缓存保持的某种“标准”。只要分布式缓存中长或更新了内容,便会拿欠操作以及连续查询专业开展比较。
如果标准相当,则触发事件,并通报发布连接查询专业的应用程序。

透过连日查询,应用程序可以等再复杂的转,并只当有这些改动时才接受通知。

连读与通写处理程序

成千上万时刻,应用程序尝试读取的数量并无在商店分布式缓存中,必须从数据库被读取。
此时,应用程序可以一直看数据库并宣读博该数量,但当时表示有应用程序都须复制相同之多少看代码(尤其是当
.NET 和 Java 中)。
或者,也得以急需多少常常,要求店家分布式缓存为那个自数据库中读取该数额。

有了通读/通写功能,企业分布式缓存可自从数据源直接读取数据。
应用程序可简化其代码,从而无需访问数据库。
它们只需要要求商家分布式缓存为该提供数据,如果缓存中无拖欠多少,则做客数据源并宣读博该数据。
图 5 显示了商店分布式缓存是何许以通读和通写功能的。

图片 2.png)

图 5 通读/通写的用原理

发生好几用小心。
虽然给分布式缓存从数据库读取数据有老怪之利益,但本发生多数据类型最好是因为应用程序直接由数据库读取。
如果要是读取的凡带有复杂连接的数据集,那么最好是因为应用程序亲自读取,然后以那个放入分布式缓存中。

数据库同步

由大气数量给放入了店分布式缓存中,因此要保证这些数量与主数据源(通常为关系数据库)保持同才起义。
企业分布式缓存提供了此作用。

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

就分布式缓存将自缓存中剔除该数据,或读博该数量的新副本(如果安排了通读功能)。
图 6 显示了号分布式缓存与 SQL Server 是怎样共同的。

图片 3.png)

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

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

信用社分布式缓存可用作多只应用程序之间的运行时数据库共享平台(.NET 到
.NET、.NET 到 Java 同 Java 到 Java)。
很多场面下,这些应用程序对于你的公司而言要。

由不少着重任务应用程序都凭借让公司分布式缓存,因此分布式缓存必须怀有高可用性。
企业分布式缓存不可知瘫痪或已工作,并且该完全不需要停机以开展保障或另常规操作。

合作社分布式缓存通过可由修复的动态缓存服务器群集来促成高可用性。
此处的自修复表示群集清楚那具有成员,当起成员离开或在时会见动态调整。
此外,还得保数据是更的以管教可靠性,并且使有群集成员离开,其备份数据而机关供应用程序使用。
所有这些力量必须快速实施,且未会见对动企业分布式缓存的应用程序造成其他中断。

可是扩展性:缓存分区和复制

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

幸亏了小卖部分布式缓存,您可以用分区拓扑来进展扩张。 图 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

相关文章

admin

网站地图xml地图