Oggi molte organizzazioni utilizzano le tecnologie .NET e Java per sviluppare diverse applicazioni ad alto traffico. Allo stesso tempo, queste applicazioni non solo hanno la necessità di condividere i dati tra loro, ma vogliono anche supportare la condivisione del runtime di diverse versioni della stessa classe per la compatibilità con le versioni precedenti e la riduzione dei costi.
Il modo più comune utilizzato principalmente per supportare la condivisione di runtime di diverse versioni di classi tra .NET e l'applicazione Java è attraverso serializzazione XML. Ma, come sapete, la serializzazione XML è un processo estremamente lento e affamato di risorse. Implica 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.
L'altro approccio ampiamente utilizzato per supportare la condivisione di diverse versioni di classi tra .NET e Java è tramite database. Tuttavia, il problema con questo approccio è che è lento e inoltre non si adatta molto bene al crescente carico transazionale. Pertanto, il database diventa rapidamente un collo di bottiglia della scalabilità perché è possibile ridimensionare linearmente il livello dell'applicazione aggiungendo più server delle applicazioni, ma non è possibile fare lo stesso a livello del database.
Questo è dove a cache distribuita piace NCache torna davvero utile. NCache fornisce una trasformazione di oggetti a livello binario tra versioni diverse non solo della stessa tecnologia ma anche tra .NET e Java. È possibile mappare versioni diverse tramite un file di configurazione XML e NCache sa come passare da una versione all'altra.
NCache il framework di condivisione della versione della classe implementa il protocollo personalizzato di serializzazione binaria interoperabile che genera un flusso di byte in base alla mappatura specificata in un formato tale che qualsiasi nuova e vecchia versione della stessa classe possa facilmente deserializzarla, indipendentemente dal suo linguaggio di sviluppo, che può essere .NET o Java.
Ecco un esempio di NCache config.ncconf con mappatura della versione della classe:
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 32 33 34 35 36 37 38 39 40 41 |
<cache-config name="InteropCache" inproc="False" config-id="0" last-modified="" type="local-cache" auto-start="False"> ... <type id="1001" handle="Employee" portable="True"> <attribute-list> <attribute name="Name" type="Java.lang.String" order="1"/> <attribute name="SSN" type="Java.lang.String" order="2"/> <attribute name="Age" type="int" order="3"/> <attribute name="Address" type="Java.lang.String" order="4"/> <attribute name="Name" type="System.String" order="5"/> <attribute name="Age" type="System.Int32" order="6"/> <attribute name="Address" type="System.String" order="7"/> </attribute-list> <class name="com.samples.objectmodel.v1.Employee:1.0" handle-id="1" assembly="com.jar" type="Java"> <attribute name="Name" type="Java.lang.String" order="5"/> <attribute name="SSN" type="Java.lang.String" order="2"/> </class> <class name="com.samples.objectmodel.v2.Employee:2.0" handle-id="2" assembly="com.jar" type="Java"> <attribute name="Name" type="Java.lang.String" order="5"/> <attribute name="Age" type="int" order="6"/> <attribute name="Address" type="Java.lang.String" order="7"/> </class> <class name="Samples.ObjectModel.v2.Employee:2.0.0.0" handle-id="3" assembly="ObjectModelv2, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null" type="net"> <attribute name="Name" type="System.String" order="5"/> <attribute name="Age" type="System.Int32" order="6"/> <attribute name="Address" type="System.String" order="7"/> </class> <class name="Samples.ObjectModel.v1.Employee:1.0.0.0" handle-id="4" assembly="ObjectModelv1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" type="net"> <attribute name="Name" type="System.String" order="5"/> <attribute name="Age" type="System.Int32" order="6"/> </class> </type> </data-sharing> ... </cache-config> |
Che aspetto ha e come funziona il NCache fare il controllo delle versioni delle classi nella condivisione dei dati di runtime?
Nel ncache.config che vedi sopra, noterai che la classe Employee ha una serie di attributi definiti per primi. Questi sono attributi indipendenti dalla versione e compaiono in tutte le versioni delle classi .NET e Java. Questo è in realtà un superset di tutti gli attributi che appaiono in diverse versioni. Di seguito, specifichi gli attributi specifici della versione e li associ agli attributi indipendenti dalla versione sopra.
Ora, supponiamo che tu abbia salvato .NET Employee versione 1.0.0.0. Ora, quando un'altra applicazione tenta di recuperare lo stesso dipendente, ma vuole vederlo come Java versione 1.0 o 2.0. NCache sa quali attributi di .NET versione 1.0.0.0 riempire di dati e quali lasciare vuoti e viceversa.
Ci sono molti altri scenari che NCache gestisce perfettamente per te. Si prega di leggere la documentazione del prodotto in linea per come NCache la condivisione dei dati di runtime funziona.
Infine, la parte migliore è che non devi scrivere alcun codice di serializzazione e deserializzazione o apportare modifiche al codice alla tua applicazione per poterlo utilizzare NCache caratteristica. 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 ora puoi condividere versioni di classi diverse tra le tue applicazioni .NET e Java senza nemmeno modificare il codice dell'applicazione.