Muchas organizaciones hoy en día usan una variedad de tecnologías .NET y Java para desarrollar diferentes aplicaciones de alto tráfico. Al mismo tiempo, estas organizaciones tienen la necesidad de compartir datos en tiempo de ejecución entre aplicaciones .NET y Java.
Una forma de compartir datos es a través de la base de datos, pero eso es lento y tampoco se escala muy bien. Un enfoque mucho mejor es usar un caché distribuido en memoria como un almacén de datos común entre varias aplicaciones. Es rápido y también escala linealmente.
Como sabe, los tipos Java y .NET no son compatibles. Por lo tanto, termina transformando los datos en XML para compartir. Además, la mayoría de las cachés distribuidas no proporcionan ningún mecanismo integrado para compartir datos entre aplicaciones .NET y Java o solo proporcionan el uso compartido de datos basado en XML. Si una memoria caché no proporciona un mecanismo integrado para compartir datos, debe definir el esquema XML y utilizar una serialización XML de terceros para construir y leer todos los datos XML.
Pero, Serialización XML es un proceso extremadamente lento y hambriento de recursos. La serialización XML implica la validación, el análisis y las transformaciones de XML que realmente dificultan el rendimiento de la aplicación y utilizan recursos adicionales en términos de memoria y CPU.
Caché distribuida by design se utiliza para mejorar el rendimiento y la escalabilidad de su aplicación. Permite que sus aplicaciones almacenen en caché los datos de su aplicación y reduzca esos costosos viajes a la base de datos que están causando un cuello de botella de escalabilidad. Y el uso compartido de datos basado en XML va en contra de estos objetivos de rendimiento y escalabilidad para su aplicación. Si aumenta la carga de transacciones en su aplicación, verá que la manipulación de XML termina convirtiéndose en un cuello de botella en el rendimiento.
Una forma mucho mejor es compartir datos entre aplicaciones .NET y Java a nivel binario, donde no tendría que hacer ninguna transformación XML. NCache es un caché distribuido que le proporciona datos en tiempo de ejecución para compartir aplicaciones .NET y Java con serialización binaria.
¿Cómo NCache proporcionar intercambio de datos de tiempo de ejecución entre .NET y Java?
Bueno, antes de eso, debe comprender por qué su serialización binaria nativa de .NET y Java no es compatible. Java y .NET tienen sus propias serializaciones binarias que interpretan los objetos a su manera y que son totalmente diferentes entre sí y también tienen diferentes tipos de sistemas. Además, el flujo de bytes serializado de un objeto también incluye los detalles del tipo de datos como un nombre completo que, de nuevo, son diferentes en .NET y Java. Esto, por supuesto, también dificulta la compatibilidad de tipos de datos entre .NET y Java.
Para manejar esta incompatibilidad, NCache ha implementado su propia serialización binaria interoperable que es común tanto para .NET como para Java. NCache serialización binaria interoperable identifica objetos en función de los identificadores de tipo que son coherentes en .NET y Java en lugar del nombre completo que es específico de la tecnología. Este enfoque no solo proporciona interoperabilidad sino que también reduce el tamaño del flujo de bytes generado. En segundo lugar, NCache La serialización binaria interoperable implementa un protocolo personalizado que genera un flujo de bytes en un formato que sus implementaciones .NET y Java pueden interpretar fácilmente.
Aquí hay un ejemplo de NCache config.ncconf con mapeo de clase interoperable de datos:
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> |
Como resultado, NCache es capaz de serializar un objeto .NET y deserializarlo en Java siempre que haya una clase Java compatible disponible. Esta serialización de nivel binario es más compacta y mucho más rápida que cualquier transformación XML.
Finalmente, la mejor parte de todo esto es que no tiene que escribir ningún código de serialización ni realizar ningún cambio en el código de su aplicación para usar esta función en NCache. NCache ha implementado un mecanismo de generación de código en tiempo de ejecución, que genera el código de serialización y deserialización en memoria de sus clases interoperables en tiempo de ejecución, y usa el formulario compilado para que sea súper rápido.
En resumen, usando NCache puede escalar y aumentar el rendimiento de su aplicación evitando la serialización XML extremadamente lenta y que consume muchos recursos.
Por lo tanto, descargue una versión de prueba de 60 días totalmente funcional de NCache Enterprise y pruébalo por ti mismo.