Dieser Artikel wurde maschinell übersetzt.

Interoperabilität

Gemeinsame Datennutzung zur Laufzeit dank verteiltem Unternehmenscache

Iqbal Khan

Viele Organisationen verwenden eine Kombination von Microsoft .NET Framework und Java-Anwendungen, insbesondere mittelgroße bis große Unternehmen, die nur eine Technologie, die aus verschiedenen Gründen commit können nicht. Oft verwenden Sie Web-Anwendungen, serviceorientierte Architektur (SOA)-Webdienste und andere Serveranwendungen, die eine Vielzahl von Transaktionen zu verarbeiten.

Viele dieser Anwendungen müssen Daten zur Laufzeit mit anderen gemeinsam nutzen. Häufig sind diese alle allgemeinen geschäftlichen Daten arbeiten, die in einer Datenbank gespeichert ist. Behandeln Sie i. d. r. fortlaufend Datenströme (z. B. finanzielle Handelspartner Anwendungen) und müssen zu verarbeiten und die Ergebnisse mit anderen Anwendungen erneut alle zur Laufzeit gemeinsam.

Obwohl die Datenbank die master-Datenspeicher für die dauerhafte Speicherung werden soll, ist es nicht für die Common Language Runtime Datenfreigabe geeignet. Ein Grund hierfür ist die Leistung nicht immer großartig, wenn Sie Daten aus der Datenbank lesen. Darüber hinaus kann die Datenbank nicht problemlos skaliert hinsichtlich der Abwicklung von Transaktionen, so kann schnell werden zu einem Engpass und verlangsamen Sie alle Anwendungen, die auf ihn verlassen.

Sie können die Daten in Echtzeit darüber hinaus nicht effektiv freigeben. Freigeben von Echtzeitdaten erfordert, sobald eine Anwendung aktualisiert Daten, alle anderen Anwendungen interessiert, da Daten informiert werden sollen. Ebenso einige Anwendungen möglicherweise bestimmte Datentypen erstellt und zur Verfügung gestellt werden gewartet werden, und wenn dies der Fall ist, Sie sollten benachrichtigt werden sofort.

Diese Probleme sind häufig, ob die Anwendungen, die Daten gemeinsam nutzen müssen alle auf .NET Framework basieren, oder ob einige .NET und andere Java sind. In der Tat sind Anwendungen eine Mischung von .NET und Java sind, die Probleme verstärkt, da kein automatisches Verfahren für diese Anwendungen Daten auf der Ebene der Anwendung zur Anwendung auf systemeigene Weise freigeben.

Die Lösung: Enterprise verteilte Cache

Glücklicherweise kann Unternehmen verteilt Cache für diese Probleme beheben. Diese Memoryspeicher erstreckt sich über mehrere Server und den Arbeitsspeicher des Servers pooling, so dass Speicher Speicherkapazität skalierbar ist. Transaktion Kapazität wird auch skalierbar, das mehr Server Sie hinzufügen, das größer-Transaktion laden, die Sie behandeln können.

Enterprise verteilt Caches bieten auch Ereignis Benachrichtigungsmechanismen, wodurch Anwendungen voneinander gewarnt werden, wenn Sie die Daten aktualisiert haben. Daher haben Sie asynchrones Ereignis Benachrichtigungsmechanismus, in denen eine Anwendung erzeugt einige Daten und andere Benutzer möglicherweise nutzen, erstellen ein Erzeuger-Verbraucher-Modell oder Veröffentlichen/Abonnieren-Modell. Mehrere Anwendungen bestimmte Datentypen abonnieren und werden benachrichtigt, wenn es veröffentlicht wird.

Es gibt auch ein read-through/Write-through Mechanismus, d. h. im Unternehmen verteilt Cache selbst beträchtliche Daten aus der Datenquelle und den Anwendungen lesen kann. Unabhängig davon, ob diese Anwendungen Java oder .NET sind wird Ihr Code viel einfacher, da Sie die Daten aus dem Cache Unternehmen verteilt gelesen. Sie müssen nicht alle haben, die Datenbank-Zugangscode integriert werden. Finden Sie unter Abbildung 1 für ein einfaches Beispiel für eine .NET Framework-Anwendung über einen verteilte Enterprise-Cache.

Abbildung 1 A .NET-Anwendung mit einem Unternehmen verteilte Cache

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);
      }
    }
  }
}

Darüber hinaus kann sich selbst ein verteilte Enterprise-Cache mit in der Datenbank durch andere Anwendungen von Drittanbietern vorgenommenen Datenänderungen synchronisieren. Es verfügt über eine Verbindung mit der Datenbank, da die Datenbank benachrichtigt Sie, wann immer ein bestimmter Typ von Daten in der Datenbank geändert. Abbildung 2 wird veranschaulicht, wie .NET und Java-Anwendungen Daten untereinander zur Laufzeit über eine verteilte Enterprise-Cache freigeben können.

image: .NET and Java Apps Sharing Data Through a Distributed Cache

Abbildung 2 .NET- und Java-Anwendungen Daten über eine verteilte Cache-Freigabe

.NET- und Java-Anwendungen, die gemeinsame Nutzung von Daten

Mit einem Unternehmen verteilt Cache, mehrere Anwendungen – .NET- und Java-Cache und Freigabe dieselben Daten über ihn aufrufen können. Wäre es nur .NET Anwendungen (oder Java-Anwendungen) konnten gemeinsame Nutzung von Daten durch eine verteilte Cache, Sie die Objekte in ein systemeigenes Binärformat speichern und Serialisieren/Deserialisieren Sie. Jedoch Wenn beide versuchen, Daten mit anderen gemeinsam nutzen, einem tragbaren Datenformat zum Speichern von Daten in verteilten Cache.

Das ist, da bei eine Anwendung .NET ein Objekt in der verteilten Cache speichert, Sie tatsächlich das Objekt in ein XML-Dokument transformiert, und speichert diese XML-Daten. Auf der anderen Seite bei eine Java-Anwendung die Daten aus dem Zwischenspeicher verteilte liest transformiert die XML-Daten in ein Java-Objekt. Tatsächlich ist die XML-Datei als tragbaren Datenspeichermechanismus verwendet, wie .NET-Objekts in XML und dann von XML in Java und umgekehrt transformiert wird.

Eine Reihe von open-Source-Bibliotheken können Sie die .NET- oder Java-Objekte in XML umzuwandeln und dann wieder zurück in das Formular ein Objekt. Sie können Entwickeln eigener, natürlich, aber ich empfehle, die Sie auswählen, eine open-Source-Bibliothek. Ich persönlich entwickelte wie Web-Objekte in XML (WOX) von Carlos Jaimez und Simon Lucas (woxserializer.sourceforge.net ). Ich werde in diesem Artikel (mit Ihrer Erlaubnis) Beispiele für Java in .NET Transformation von Ihrer Website verwenden. Abbildung 3 zeigt Kurs für Schüler und -Klassen, die in Java und c# definiert.

Abbildung 3 für Schüler und Kurs-Klassen in Java und c#

// Java classes
public 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;
}

Wenn wir .NET und Java-Anwendungen, verwenden um diesen Kurs für Schüler und -Objekten in einem Cache Unternehmen verteilt werden, können wir WOX-Bibliothek verwenden, um in XML zu transformieren. Anschließend liest möchte, dass eine Anwendung diese Objekte aus dem Cache Unternehmen verteilt gelesen werden, Sie die Bibliothek WOX erneut zum Transformieren der XML-Datei zurück in das Objekt-Formular Java oder .NET. Abbildung 4 zeigt die Schüler, und Kurs Klassen in XML transformiert.

Abbildung 4 Java und .NET Klassen in XML transformiert

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

Innerhalb der Anwendung sollten Sie WOX caching-Schicht oder der Datenzugriffsschicht aufrufen.

Element-Based Event-Benachrichtigungen

Ereignisbenachrichtigungen werden einen leistungsfähigen Mechanismus, mit dem mehrere Anwendungen (.NET und Java) asynchron Datenfreigabe koordinieren kann. Dieser Mechanismus kann die teuren Abrufen der Datenbank vermeiden, die Anwendungen hat, wenn Sie eine solche Funktion haben nicht. Es wird zwischen .NET und Java-Anwendungen freigegeben, damit Sie anderen nahtlos benachrichtigen.

Eine ist Ereignisbenachrichtigung artikelbasierte Benachrichtigung. Bei dieser Art Anwendungen registrieren Interesse an verschiedene zwischengespeicherte Element-Schlüssel (der möglicherweise oder nicht noch im Cache vorhanden), und Sie sind separat benachrichtigt, wenn das Element hinzugefügt, aktualisiert oder aus der verteilten Cache von jemand aus irgendeinem Grund entfernt. Auch wenn ein Element aufgrund von Ablauf oder Dateispeichers entfernt wird, wird die Ereignisbenachrichtigung Element entfernen z. B. ausgelöst.

.NET- und Java-Anwendungen können Zinsen für dieselbe zwischengespeicherte Elemente registrieren und darüber benachrichtigt werden. Die Benachrichtigung enthält in der Regel betroffenen zwischengespeicherten Elements darüber hinaus, wie im vorherigen Abschnitt gesehen in .NET- oder Java, je nach Art der Anwendung umgewandelt worden ist.

Anwendung generierte Custom Event-Benachrichtigungen

Ein verteilte Enterprise-Cache ist auch eine leistungsfähige Ereignis Propagierung Plattform für .NET- und Java-Anwendungen. Alle Anwendungen verbunden werden, um eine verteilte Enterprise-Cache können benutzerdefinierte Ereignisse auslösen, in den Cache, und dann zur benachrichtigt alle anderen Anwendungen, die diese benutzerdefinierte Ereignisse registriert sind vom Cache, unabhängig davon, wo sich diese Anwendungen befinden. Dies allein bietet einen leistungsfähige Sprache und plattformunabhängige Ereignis Propagierung Mechanismus in einem Cache Unternehmen verteilt.

Mit diesem Feature können Anwendungen für die Zusammenarbeit in Datenfreigabe asynchron. Z. B. wenn eine Anwendung Daten in verteilten Cache versetzt, kann es dann ein benutzerdefiniertes Ereignis ausgelöst und andere Anwendungen, die zu nutzen oder diese Daten weiter verarbeiten sofort benachrichtigt werden.

Kontinuierliche abfragebasierte Event-Benachrichtigungen

Artikelbasierte Ereignisbenachrichtigung ist leistungsstark, jedoch muss die Anwendung wissen, den Schlüssel eines zwischengespeicherten Elements. Beim Kombinieren von artikelbasierte Ereignisbenachrichtigung mit anderen sofern im Unternehmen verteilt-Cache (z. B. Tags, Gruppen/Untergruppen und mehr) Sie weitgehend den meisten Fällen behandeln können, in denen Anwendungen müssen benachrichtigt werden, anhand Gruppierungsfeatures häufig auf verschiedene zwischengespeicherte Elemente Auswirkungen.

Es gibt jedoch zwei Einschränkungen mit Ereignissen artikelbasierte. Wie bereits erwähnt, muss zunächst die Anwendung alle Schlüssel der zwischengespeicherten Elementen wissen möchte benachrichtigt werden, welche. Zweitens wird er benachrichtigt werden, unabhängig davon, welche an diesen Elementen Änderungen. Die Anwendung kann nicht sollten detailliertere Kriterien, und daher benachrichtigt wird nur bei bestimmte Änderungen an den Daten vorgenommen werden.

Um solche Fälle zu behandeln, bietet ein verteilte Enterprise-Cache eine kontinuierliche Abfrage – eine Abfrage von SQL-ähnlichen, die Geschäftsregeln für eine Anwendung über Daten sammelt, ist daran interessiert. Eine fortlaufende Abfrage ist keiner Suchabfrage, sondern vielmehr eine “ Kriterien ” im Unternehmen verteilt Cache speichert;Jedes Mal, wenn ein Element hinzugefügt oder in verteilten Cache aktualisiert wird, wird der Vorgang mit der kontinuierlichen Abfragekriterien verglichen. Wenn Sie den Kriterien entsprechen, wird ein Ereignis ausgelöst, und die Anwendung ausgeben der fortlaufenden Abfragekriterien benachrichtigt.

Fortlaufende Abfrage ermöglicht Anwendungen, um komplexere und komplexe Änderungen überwachen und benachrichtigt werden, wenn diese Änderungen erfolgen.

Read-Through und Write-Through-Handler

In vielen Fällen versuchen Anwendungen, zum Lesen von Daten, die im Unternehmen verteilt existiert Zwischenspeichern und müssen aus einer Datenbank gelesen werden. In diesen Situationen Anwendungen gehen direkt in die Datenbank und die Daten lesen konnte, aber, würde bedeuten, dass alle Anwendungen mit der gleichen Datenzugriffscode (besonders in .NET und Java) dupliziert landen. Oder Sie können gefragt, die im Unternehmen verteilt Cache zum Lesen von Daten aus der Datenbank für diese bei Bedarf.

Das read-through/Write-through-Feature ermöglicht einen Cache Unternehmen verteilt, um Daten direkt aus der Datenquelle zu lesen. Die Anwendungen können Ihren Code vereinfachen, so dass Sie nicht auf die Datenbank zu wechseln. Sie können nur gefragt, die im Cache Unternehmen verteilt, um die Daten zu erteilen, und wenn der Cache Daten, es gehen und aus der Datenquelle zu lesen. Abbildung 5 zeigt, wie Read-through und Write-through passt, in einem Unternehmen Cache verteilt.

image: How Read-Through/Write-Through Is Used

Abbildung 5 So Read-Through/Write-Through verwendete

Ich möchte einen Punkt, der hier Vorsicht zu erwähnen. Es gibt zwar großartigen Vorteil den verteilten Cache die Daten aus der Datenbank lesen, Sie würden, werden viele Arten von Daten durch die Anwendung am besten direkt aus der Datenbank gelesen. Wenn Sie Auflistungen von Daten, die komplexe Verknüpfungen beinhalten lesen, ist es am besten selbst gelesen, und platzieren Sie es in der verteilten Cache.

Datenbank-Synchronisierung

Da Sie eine große Datenmenge im Unternehmen verteilt Cache gespeichert wird, ist es nur sinnvoll um sicherzustellen, dass diese Daten mit der master-Datenquelle, in der Regel eine relationale Datenbank synchronisiert werden. Ein verteilte Enterprise-Cache stellt eine solche Funktion.

Diese Datenbank Synchronisierungsfeature kann Anwendungen eine Beziehung (eine Abhängigkeit) zwischen zwischengespeicherten Elementen und Zeilen in Tabellen angeben. Wenn Daten in der Datenbank geändert wird, löst der Datenbankserver ein .NET-Ereignis, falls es eine Datenbank von SQL Server 2005/2008 und den Cache Unternehmen verteilt, von einer solchen Änderung benachrichtigt. Für andere Datenbanken, die Ereignisse für .NET nicht unterstützen, bietet ein verteilte Enterprise-Cache auch konfigurierbare Polling, wo es kann Abfragen die Datenbank (z. B. alle 15 Sekunden) und synchronisieren, wenn es Daten geändert wurden.

Verteilte Cache dann entweder die Daten aus dem Cache entfernt oder eine neue Kopie liest, wenn Sie das Feature Read-through konfiguriert haben. Abbildung 6 wird gezeigt, wie ein verteilte Enterprise-Cache mit SQL Server synchronisiert.

image: Database Synchronization in Distributed Cache

Abbildung 6 Database-Synchronisierung in verteilten Cache

Hohe Verfügbarkeit: Self-Healing dynamische Cluster

Ein verteilte Enterprise-Cache wird als eine Plattform, die von mehreren Anwendungen (.NET .NET, .NET und Java und Java, Java) Datenfreigabe Common Language Runtime verwendet. In vielen Fällen sind diese Anwendungen unternehmenswichtige für Ihr Unternehmen.

Dies bedeutet, dass ein verteilte Enterprise-Cache hoch verfügbar sein muss, da so viele wichtige Anwendungen davon abhängen. Im Unternehmen verteilt Cache nicht ausfallen oder funktionieren nicht mehr sollte, und es nahezu ohne Ausfallzeiten für Wartungsarbeiten oder anderen normalen Betrieb.

Ein verteilte Enterprise-Cache wird mit einen Cluster Selbstreparatur, dynamischen von Cacheservern hohen Verfügbarkeit erzielt. Hier Selbstheilung bedeutet, dass der Cluster ist bekannt, dass alle Elemente und passt dynamisch, wenn ein Element verlässt oder Verknüpfungen. Außerdem werden Daten zur Zuverlässigkeit repliziert und Clustermitglied lässt, die Sicherungsdaten verfügbar, die Anwendungen automatisch gemacht sicherstellt. All dies schnell ausgeführt werden müssen und ohne dass alle Unterbrechungen in den Anwendungen, die unter Verwendung des Unternehmens verteilt Cache.

Skalierbarkeit: Cache für das Partitionieren und Replikation

Viele Anwendungen verwenden einen verteilte Enterprise-Cache sind Anwendungen hoher Transaktion. Aus diesem Grund kann die Belastung für das Cache-Cluster schnell anwachsen;Wenn die Antwortzeit des Unternehmens Cache Drops verteilt, verliert er seinen Wert. Dies ist sogar ein Bereich, in dem ein Unternehmen verteilt-Cache zu relationalen Datenbanken überlegene ist;Es kann sehr viel mehr Transaktionen pro Sekunde verarbeiten, da es mehr Server des Clusters dynamisch hinzufügen beibehalten kann. Aber nicht möglich, wenn die Daten im Cache verteilte Intelligent gespeichert ist Skalierbarkeit erreicht. Dies geschieht durch das Partitionieren von Daten mit jeder Partition für Zuverlässigkeit repliziert.

Dank an den Cache Unternehmen verteilt sind Sie berechtigt, ausnutzen, die Vorteile einer partitionierten Topologie für die Skalierbarkeit. Abbildung 7 zeigt eine partitionierte Replikationstopologie.

image: Partitioned-Replication Topology for Reliable Scalability

Abbildung 7 partitionierte - Replikationstopologie für Reliable Skalierbarkeit

Ein verteilte Enterprise-Cache Partitionen automatisch alle Daten, die Sie im Cache gespeichert sind. Jede Partition auf einem anderen Server gespeichert ist, und eine Sicherung für diese Partition erstellt und auf einem anderen Server gespeichert. Dadurch wird sichergestellt, dass jeder Server ausfällt, keine Daten verloren gegangen ist.

Also zusammenfassend Partitionierung können Sie weitere Cacheservern zum Vergrößern der Speicherkapazität dynamische Cluster hinzufügen und es erhöht auch die Buchung pro Sekunde Kapazität, beim Hinzufügen weiterer Server. Und Replikation gewährleistet Zuverlässigkeit von Daten, weil kein Datenverlust, auftritt Wenn ein Server ausfällt.

Lage und Collaborative

Nachbereiten, ist ein verteilte Enterprise-Cache eine ideale Möglichkeit für hohe Transaktion .NET- und Java-Anwendungen Daten mit anderen Anwendungen gemeinsam zu verwenden. Es wird sichergestellt, dass die Datenfreigabe von in Echtzeit wegen seiner leistungsstarken Ereignis Propagierung Mechanismen einschließlich artikelbasierte Ereignisbenachrichtigung, benutzerdefiniertes Ereignis Anwendung generierten Benachrichtigungen und kontinuierliche abfragebasierte Ereignisbenachrichtigungen erfolgt.

Ein verteilte Enterprise-Cache ist extrem schnell und skalierbar, beabsichtigt. Es ist schnell, da es im Arbeitsspeicher ist. Es ist skalierbar, da Sie in mehreren Servern anwachsen kann. Partitionen der tatsächliche Speicherort, und jede Partition auf einem anderen Server gespeichert, und Sie eine Sicherung der Partition auf einen weiteren Server, z. B. einem RAID-Datenträger speichert.

Die heutigen Anwendungen müssen viel leistungsfähigere als in der Vergangenheit liegen. Sie müssen mehr Zusammenarbeit Weise Daten gemeinsam nutzen und Interaktion mit anderen zusammenarbeiten. Sie müssen extrem schnell beim Erfüllen der Anforderungen von extrem hohen Lasten Beeinträchtigung der Leistung und Skalierbarkeit zu vermeiden. Darüber hinaus müssen Sie über verschiedene Plattformen hinweg durchführen, so dass .NET Anwendungen mit Java-Anwendungen transparent und effektiv arbeiten können. Ein verteilte Enterprise-Cache kann diese Ziele zu erreichen.

Iqbal Khan ist der Präsident und Technologie Evangelist von Alachisoft ( alachisoft.com ), die NCache, .NET verteilt Cache für Leistung und Skalierbarkeit in Unternehmensanwendungen verstärken bereitstellt. Khan hat einen Master ’s Grad in Informatik von Indiana University 1990 erhalten. Sie erreichen ihn unter iqbal@alachisoft.com.

Dank an den folgenden technischen Experten für die Überprüfung der in diesem Artikel: Stefan Schackow