Molte organizzazioni oggi utilizzano una varietà di tecnologie .NET e Java per sviluppare diverse applicazioni ad alto traffico. Allo stesso tempo, queste organizzazioni hanno la necessità di condividere i dati in fase di esecuzione tra le applicazioni .NET e Java.
Un modo per condividere i dati è attraverso il database, ma è lento e inoltre non scala molto bene. Un approccio molto migliore consiste nell'utilizzare una cache distribuita in memoria come archivio dati comune tra più applicazioni. È veloce e scala anche linearmente.
Come sapete, i tipi Java e .NET non sono compatibili. Pertanto, finisci per trasformare i dati in XML per la condivisione. Inoltre, la maggior parte delle cache distribuite non fornisce alcun meccanismo integrato per la condivisione dei dati tra le applicazioni .NET e Java o fornisce solo la condivisione dei dati basata su XML. Se una cache non fornisce un meccanismo di condivisione dei dati integrato, è necessario definire lo schema XML e utilizzare una serializzazione XML di terze parti per costruire e leggere tutti i dati XML.
Ma, serializzazione XML è un processo estremamente lento e affamato di risorse. La serializzazione XML comporta la convalida, l'analisi e le trasformazioni XML che ostacolano davvero le prestazioni dell'applicazione e utilizzano risorse extra in termini di memoria e CPU.
Cache distribuita by design viene utilizzato per migliorare le prestazioni e la scalabilità dell'applicazione. Consente alle applicazioni di memorizzare nella cache i dati dell'applicazione e di ridurre quei costosi viaggi del database che causano un collo di bottiglia della scalabilità. Inoltre, la condivisione dei dati basata su XML va contro questi obiettivi di prestazioni e scalabilità per la tua applicazione. Se aumenti il carico delle transazioni sulla tua applicazione, vedrai che la manipolazione XML finisce per diventare un collo di bottiglia delle prestazioni.
Un modo molto migliore è eseguire la condivisione dei dati tra le applicazioni .NET e Java a livello binario senza dover eseguire trasformazioni XML. NCache è una cache distribuita che fornisce la condivisione dei dati di runtime .NET e l'applicazione Java con serializzazione binaria.
Che aspetto ha e come funziona il NCache fornire la condivisione dei dati di runtime tra .NET e Java?
Bene, prima devi capire perché la tua serializzazione binaria nativa .NET e Java non è compatibile. Java e .NET hanno le proprie serializzazioni binarie che interpretano gli oggetti a modo loro e che sono totalmente diversi l'uno dall'altro e hanno anche sistemi di tipi diversi. Inoltre, il flusso di byte serializzato di un oggetto include anche i dettagli del tipo di dati come nome completo che sono ancora diversi in .NET e Java. Questo, ovviamente, ostacola anche la compatibilità del tipo di dati tra .NET e Java.
Per gestire questa incompatibilità, NCache ha implementato la propria serializzazione binaria interoperabile comune a .NET e Java. NCache serializzazione binaria interoperabile identifica gli oggetti in base a ID di tipo coerenti tra .NET e Java invece di nomi completi specifici della tecnologia. Questo approccio non solo fornisce l'interoperabilità, ma riduce anche la dimensione del flusso di byte generato. In secondo luogo, NCache la serializzazione binaria interoperabile implementa un protocollo personalizzato che genera un flusso di byte in un formato tale che le sue implementazioni .NET e Java possono facilmente interpretare.
Ecco un esempio di NCache config.ncconf con mappatura delle classi interoperabile dei dati:
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> |
Come risultato, NCache è in grado di serializzare un oggetto .NET e de-serializzarlo in Java purché sia disponibile una classe Java compatibile. Questa serializzazione a livello binario è più compatta e molto più veloce di qualsiasi trasformazione XML.
Infine, la parte migliore di tutto questo è che non devi scrivere alcun codice di serializzazione o apportare modifiche al codice alla tua applicazione per utilizzare questa funzione in NCache. NCache ha implementato un meccanismo di generazione del codice di runtime, che genera il codice di serializzazione e deserializzazione in memoria delle classi interoperabili in fase di esecuzione e utilizza il modulo compilato in modo che sia super veloce.
In sintesi, utilizzando NCache puoi scalare e aumentare le prestazioni delle tue applicazioni evitando la serializzazione XML estremamente lenta e affamata di risorse.
Quindi, scarica una versione di prova di 60 giorni completamente funzionante di NCache Enterprise e provalo tu stesso.