Viele Unternehmen nutzen heute eine Vielzahl von .NET- und Java-Technologien, um verschiedene Anwendungen mit hohem Datenverkehr zu entwickeln. Gleichzeitig müssen diese Organisationen Daten zur Laufzeit zwischen .NET- und Java-Anwendungen austauschen.
Eine Möglichkeit, Daten auszutauschen, ist die Datenbank, aber das ist langsam und lässt sich auch nicht sehr gut skalieren. Ein viel besserer Ansatz besteht darin, einen verteilten In-Memory-Cache als gemeinsamen Datenspeicher für mehrere Anwendungen zu verwenden. Es ist schnell und skaliert auch linear.
Wie Sie wissen, sind Java- und .NET-Typen nicht kompatibel. Daher wandeln Sie die Daten letztendlich zur Weitergabe in XML um. Darüber hinaus bieten die meisten verteilten Caches entweder keinen integrierten Mechanismus für den Datenaustausch zwischen .NET- und Java-Anwendungen oder bieten nur einen XML-basierten Datenaustausch. Wenn ein Cache keinen integrierten Datenfreigabemechanismus bietet, müssen Sie das XML-Schema definieren und eine XML-Serialisierung eines Drittanbieters verwenden, um alle XML-Daten zu erstellen und zu lesen.
Aber XML-Serialisierung ist ein extrem langsamer und ressourcenhungriger Prozess. Die XML-Serialisierung umfasst XML-Validierung, -Analyse und -Transformationen, die die Anwendungsleistung erheblich beeinträchtigen und zusätzliche Ressourcen in Bezug auf Speicher und CPU verbrauchen.
Verteilter Cache Durch Design wird es verwendet, um die Leistung und Skalierbarkeit Ihrer Anwendung zu verbessern. Es ermöglicht Ihren Anwendungen, Ihre Anwendungsdaten zwischenzuspeichern und die teuren Datenbankfahrten zu reduzieren, die einen Skalierbarkeitsengpass verursachen. Und die XML-basierte Datenfreigabe widerspricht diesen Leistungs- und Skalierbarkeitszielen Ihrer Anwendung. Wenn Sie die Transaktionslast Ihrer Anwendung erhöhen, werden Sie feststellen, dass die XML-Manipulation letztendlich zu einem Leistungsengpass führt.
Eine viel bessere Möglichkeit besteht darin, den Datenaustausch zwischen .NET- und Java-Anwendungen auf Binärebene durchzuführen, wo Sie keine XML-Transformationen durchführen müssten. NCache ist ein verteilter Cache, der Ihnen die gemeinsame Nutzung von Laufzeitdaten für .NET- und Java-Anwendungen mit binärer Serialisierung ermöglicht.
Wie funktioniert NCache Bereitstellung der Laufzeitdatenfreigabe zwischen .NET und Java?
Nun, vorher müssen Sie verstehen, warum Ihre native .NET- und Java-Binärserialisierung nicht kompatibel sind. Java und .NET verfügen über eigene binäre Serialisierungen, die Objekte auf ihre eigene Weise interpretieren und die sich völlig voneinander unterscheiden und auch unterschiedliche Typsysteme haben. Darüber hinaus enthält der serialisierte Bytestrom eines Objekts auch die Datentypdetails als vollständig qualifizierten Namen, die in .NET und Java wiederum unterschiedlich sind. Dies beeinträchtigt natürlich auch die Datentypkompatibilität zwischen .NET und Java.
Um diese Inkompatibilität zu bewältigen, NCache hat eine eigene interoperable binäre Serialisierung implementiert, die sowohl für .NET als auch für Java gemeinsam ist. NCache interoperable binäre Serialisierung Identifiziert Objekte anhand von Typ-IDs, die in .NET und Java konsistent sind, anstelle von vollständig qualifizierten Namen, die technologiespezifisch sind. Dieser Ansatz sorgt nicht nur für Interoperabilität, sondern reduziert auch die Größe des generierten Bytestreams. Zweitens, NCache Die interoperable binäre Serialisierung implementiert ein benutzerdefiniertes Protokoll, das Byteströme in einem solchen Format generiert, dass seine .NET- und Java-Implementierungen leicht interpretiert werden können.
Hier ist ein Beispiel für NCache config.ncconf mit dateninteroperabler Klassenzuordnung:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<cache-config name="InteropCache" inproc="False" config-id="0" last-modified="" type="clustered-cache" auto-start="False"> … <data-sharing> <type id="1001" handle="Employee" portable="True"> <attribute-list> <attribute name="Age" type="int" order="1"/> <attribute name="Name" type="java.lang.String" order="2"/> <attribute name="Salary" type="long" order="3"/> <attribute name="Age" type="System.Int32" order="4"/> <attribute name="Name" type="System.String" order="5"/> <attribute name="Salary" type="System.Int64" order="6"/> </attribute-list> <class name="jdatainteroperability.Employee:0.0" handle-id="1" assembly="jdatainteroperability.jar" type="java"> <attribute name="Age" type="int" order="1"/> <attribute name="Name" type="java.lang.String" order="2"/> <attribute name="Salary" type="long" order="3"/> </class> <class name="DataInteroperability.Employee:1.0.0.0" handle-id="2" assembly="DataInteroperability, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" type="net"> <attribute name="Age" type="System.Int32" order="1"/> <attribute name="Name" type="System.String" order="2"/> <attribute name="Salary" type="System.Int64" order="3"/> </class> </type> </data-sharing> … </cache-config> |
Dadurch NCache ist in der Lage, ein .NET-Objekt zu serialisieren und in Java zu deserialisieren, sofern eine kompatible Java-Klasse verfügbar ist. Diese Serialisierung auf Binärebene ist kompakter und viel schneller als alle XML-Transformationen.
Das Beste daran ist schließlich, dass Sie keinen Serialisierungscode schreiben oder Codeänderungen an Ihrer Anwendung vornehmen müssen, um diese Funktion zu verwenden NCache. NCache hat einen Laufzeitcode-Generierungsmechanismus implementiert, der den In-Memory-Serialisierungs- und Deserialisierungscode Ihrer interoperablen Klassen zur Laufzeit generiert und die kompilierte Form verwendet, sodass es superschnell ist.
Zusammenfassend verwenden NCache Sie können die Leistung Ihrer Anwendung skalieren und steigern, indem Sie die extrem langsame und ressourcenintensive XML-Serialisierung vermeiden.
Laden Sie also eine voll funktionsfähige 60-Tage-Testversion von herunter NCache Enterprise und probiere es selbst aus.