Muitas organizações hoje usam uma variedade de tecnologias .NET e Java para desenvolver diferentes aplicativos de alto tráfego. Ao mesmo tempo, essas organizações precisam compartilhar dados em tempo de execução entre aplicativos .NET e Java.
Uma maneira de compartilhar dados é por meio do banco de dados, mas isso é lento e também não escala muito bem. Uma abordagem muito melhor é usar um cache distribuído na memória como um armazenamento de dados comum entre vários aplicativos. É rápido e também escala linearmente.
Como você sabe, os tipos Java e .NET não são compatíveis. Portanto, você acaba transformando os dados em XML para compartilhamento. Além disso, a maioria dos caches distribuídos não fornece nenhum mecanismo integrado para compartilhar dados entre aplicativos .NET e Java ou apenas fornece compartilhamento de dados baseado em XML. Se um cache não fornecer um mecanismo interno de compartilhamento de dados, você precisará definir o esquema XML e usar uma serialização XML de terceiros para construir e ler todos os dados XML.
Mas, Serialização XML é um processo extremamente lento e faminto de recursos. A serialização de XML envolve validação de XML, análise sintática, transformações que realmente prejudicam o desempenho da aplicação e utilizam recursos extras em termos de memória e CPU.
Cache distribuído by design é usado para melhorar o desempenho e a escalabilidade do seu aplicativo. Ele permite que seus aplicativos armazenem em cache seus dados de aplicativos e reduzam as viagens caras ao banco de dados que estão causando um gargalo de escalabilidade. E o compartilhamento de dados baseado em XML vai contra essas metas de desempenho e escalabilidade para seu aplicativo. Se você aumentar a carga de transações em seu aplicativo, verá que a manipulação de XML acaba se tornando um gargalo de desempenho.
Uma maneira muito melhor é fazer o compartilhamento de dados entre aplicativos .NET e Java em nível binário, onde você não precisaria fazer nenhuma transformação XML. NCache é um cache distribuído que fornece compartilhamento de dados em tempo de execução .NET e aplicativo Java com serialização binária.
como funciona NCache fornecer compartilhamento de dados em tempo de execução entre .NET e Java?
Bem, antes disso você precisa entender por que sua serialização binária nativa .NET e Java não são compatíveis. Java e .NET possuem suas próprias serializações binárias que interpretam objetos à sua maneira e que são totalmente diferentes entre si e também possuem sistemas de tipos diferentes. Além disso, o fluxo de bytes serializado de um objeto também inclui os detalhes do tipo de dados como nome totalmente qualificado, que são novamente diferentes em .NET e Java. Isso, é claro, também dificulta a compatibilidade de tipos de dados entre .NET e Java.
Para lidar com essa incompatibilidade, NCache implementou sua própria serialização binária interoperável que é comum tanto para .NET quanto para Java. NCache serialização binária interoperável identifica objetos com base em IDs de tipo consistentes em .NET e Java, em vez de nomes totalmente qualificados que são específicos da tecnologia. Essa abordagem não apenas fornece interoperabilidade, mas também reduz o tamanho do fluxo de bytes gerado. Em segundo lugar, NCache A serialização binária interoperável implementa um protocolo personalizado que gera fluxo de bytes em um formato que suas implementações .NET e Java podem interpretar facilmente.
Aqui está um exemplo de NCache config.ncconf com mapeamento de classe interoperável de dados:
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 é capaz de serializar um objeto .NET e desserializá-lo em Java desde que haja uma classe Java compatível disponível. Essa serialização de nível binário é mais compacta e muito mais rápida do que qualquer transformação XML.
Por fim, a melhor parte de tudo isso é que você não precisa escrever nenhum código de serialização ou fazer alterações de código em seu aplicativo para usar esse recurso em NCache. NCache implementou um mecanismo de geração de código em tempo de execução, que gera o código de serialização e desserialização na memória de suas classes interoperáveis em tempo de execução e usa o formulário compilado para que seja super rápido.
Em resumo, usando NCache você pode dimensionar e aumentar o desempenho de seu aplicativo evitando a serialização XML extremamente lenta e faminta de recursos.
Então, baixe um teste de 60 dias totalmente funcional do NCache Enterprise e experimente você mesmo.