오늘날 많은 조직에서 다양한 .NET 및 Java 기술을 사용하여 트래픽이 많은 다양한 응용 프로그램을 개발하고 있습니다. 동시에 이러한 조직은 .NET과 Java 애플리케이션 간에 런타임에 데이터를 공유해야 합니다.
데이터를 공유하는 한 가지 방법은 데이터베이스를 통하는 것이지만 이는 느리고 확장성이 좋지 않습니다. 훨씬 더 나은 접근 방식은 메모리 내 분산 캐시를 여러 응용 프로그램 간의 공통 데이터 저장소로 사용하는 것입니다. 빠르고 선형적으로 확장됩니다.
아시다시피 Java 및 .NET 유형은 호환되지 않습니다. 따라서 공유를 위해 데이터를 XML로 변환하게 됩니다. 또한 대부분의 분산 캐시는 .NET과 Java 애플리케이션 간에 데이터를 공유하기 위한 기본 제공 메커니즘을 제공하지 않거나 XML 기반 데이터 공유만 제공합니다. 캐시가 기본 제공 데이터 공유 메커니즘을 제공하지 않는 경우 XML 스키마를 정의하고 타사 XML 직렬화를 사용하여 모든 XML 데이터를 구성하고 읽어야 합니다.
그러나, XML 직렬화 매우 느리고 자원이 부족한 프로세스입니다. XML 직렬화에는 XML 유효성 검사, 구문 분석, 변환이 포함되어 애플리케이션 성능을 실제로 저해하고 메모리 및 CPU 측면에서 추가 리소스를 사용합니다.
분산 캐시 설계상 응용 프로그램 성능과 확장성을 향상시키는 데 사용됩니다. 이를 통해 애플리케이션은 애플리케이션 데이터를 캐시하고 확장성 병목 현상을 일으키는 값비싼 데이터베이스 여행을 줄일 수 있습니다. 그리고 XML 기반 데이터 공유는 애플리케이션에 대한 이러한 성능 및 확장성 목표에 어긋납니다. 애플리케이션의 트랜잭션 로드를 늘리면 XML 조작이 결국 성능 병목 현상이 되는 것을 볼 수 있습니다.
훨씬 더 나은 방법은 XML 변환을 수행할 필요가 없는 바이너리 수준에서 .NET과 Java 응용 프로그램 간에 데이터 공유를 수행하는 것입니다. NCache 바이너리 직렬화와 함께 런타임 데이터 공유 .NET 및 Java 애플리케이션을 제공하는 분산 캐시입니다.
어떻게 NCache .NET과 Java 간에 런타임 데이터 공유를 제공합니까?
음, 그 전에 네이티브 .NET과 Java 바이너리 직렬화가 호환되지 않는 이유를 이해해야 합니다. Java와 .NET에는 고유한 방식으로 개체를 해석하고 서로 완전히 다르며 유형 시스템도 다른 고유한 바이너리 직렬화가 있습니다. 또한 개체의 직렬화된 바이트 스트림에는 .NET 및 Java에서 다시 다른 완전한 이름으로 데이터 유형 세부 정보도 포함됩니다. 이것은 물론 .NET과 Java 간의 데이터 유형 호환성도 방해합니다.
이 비호환성을 처리하려면 NCache .NET과 Java 모두에 공통적인 자체 상호 운용 가능한 바이너리 직렬화를 구현했습니다. NCache 상호 운용 가능한 바이너리 직렬화 기술 고유의 정규화된 이름 대신 .NET 및 Java에서 일관된 유형 ID를 기반으로 개체를 식별합니다. 이 접근 방식은 상호 운용성을 제공할 뿐만 아니라 생성된 바이트 스트림의 크기를 줄입니다. 둘째, NCache 상호 운용 가능한 바이너리 직렬화는 .NET 및 Java 구현이 쉽게 해석할 수 있는 형식으로 바이트 스트림을 생성하는 사용자 지정 프로토콜을 구현합니다.
다음은 예입니다 NCache config.ncconf 데이터 상호 운용 가능한 클래스 매핑 사용:
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> |
그 결과, NCache 호환되는 Java 클래스가 있는 한 .NET 개체를 직렬화하고 Java에서 역직렬화할 수 있습니다. 이 바이너리 레벨 직렬화는 어떤 XML 변환보다 더 간결하고 훨씬 빠릅니다.
마지막으로 이 모든 것의 가장 좋은 점은 이 기능을 사용하기 위해 직렬화 코드를 작성하거나 애플리케이션에 코드를 변경할 필요가 없다는 것입니다. NCache. NCache 은(는) 런타임에 상호 운용 가능한 클래스의 메모리 내 직렬화 및 역직렬화 코드를 생성하고 컴파일된 형식을 사용하여 매우 빠르도록 하는 런타임 코드 생성 메커니즘을 구현했습니다.
요약하면 사용 NCache 매우 느리고 리소스를 많이 사용하는 XML 직렬화를 방지하여 애플리케이션 성능을 확장하고 향상할 수 있습니다.
따라서 완전히 작동하는 60일 평가판을 다운로드하십시오. NCache Enterprise 그리고 직접 사용해 보세요.