오늘날 많은 조직이 다양한 고트래픽 애플리케이션을 개발하기 위해 다양한 .NET 및 Java 기술을 사용합니다. 따라서 이러한 기술 간에 런타임에 데이터를 공유해야 합니다. 이러한 데이터 공유는 데이터베이스를 통해 가능하지만 느리고 확장성이 좋지 않습니다. 또는 여러 애플리케이션 간에 공유 데이터 저장소로 메모리 내 분산 캐시를 사용하는 것이 훨씬 느리고 선형적으로 확장 가능합니다.
XML 직렬화: 필요성 및 이슈
하지만 이 접근 방식을 사용하더라도 .NET과 Java 데이터 유형의 비호환성을 고려해야 합니다. 따라서 공유를 위해 데이터를 XML로 변환해야 합니다. 또한 대부분의 분산 캐시는 .NET과 Java 애플리케이션 간에 데이터를 공유하기 위한 기본 제공 메커니즘을 제공하지 않거나 XML 기반 데이터 공유만 제공합니다. 캐시가 기본 제공 데이터 공유 메커니즘을 제공하지 않는 경우 XML 스키마를 정의하고 타사 XML 직렬화를 사용하여 모든 XML 데이터를 구성하고 읽어야 합니다.
불행히도 XML 직렬화 프로세스는 현저히 느리고 리소스를 많이 소모합니다. 여기에는 XML 검증, 구문 분석 및 변환이 포함되어 있어 애플리케이션 성능을 저해하고 추가 메모리 및 CPU 리소스를 소모합니다.
분산 캐싱은 애플리케이션 성능과 확장성을 개선하는 것을 목표로 합니다. 애플리케이션이 데이터를 캐시하고 값비싼 데이터베이스 트립을 줄여 확장성 병목 현상을 발생시킴으로써 이 목표를 달성합니다. XML 기반 데이터 공유는 이러한 목표의 정반대입니다. 애플리케이션 트랜잭션 부하가 증가함에 따라 XML 조작이 성능 병목 현상이 됩니다.
데이터 공유를 위한 네이티브 바이너리 직렬화 사용의 과제
이 모든 것을 감안할 때, 바이너리 수준 직렬화와 데이터 공유가 더 나은 옵션이며, XML 변환을 피할 수 있다고 가정할 수 있습니다. 그러나 네이티브 .NET 및 Java 바이너리 직렬화는 객체를 다르게 해석하기 때문에 호환되지 않습니다. 이는 서로 다른 유형 시스템이 있기 때문입니다. 게다가 객체의 직렬화된 바이트 스트림에는 .NET과 Java에서 서로 다른 정규화된 이름과 같은 데이터 유형 세부 정보도 포함되어 있어 .NET과 Java 간의 데이터 유형 호환성을 방해하여 다른 대안이 필요합니다.
런타임 데이터 공유 NCache
다행히, NCache .NET과 Java에서 공통적으로 이러한 비호환성을 처리하는 상호 운용 가능한 이진 직렬화를 제공합니다. 기술에 따라 완전히 정규화된 이름 대신 .NET과 Java에서 일관된 유형 ID를 기반으로 객체를 식별합니다. 이 접근 방식은 상호 운용성을 제공할 뿐만 아니라 생성된 바이트 스트림의 크기도 줄입니다. sharing-type에 포함된 all-attribute-list에서 볼 수 있듯이 섹션에 config.ncconf 아래에 표시된 대로:
|
1 2 3 4 5 6 7 8 9 10 11 |
… <all-attribute-list> <attribute name="_CustomerID" data-type="System.String" serialization-order="1"/> <attribute name="_CompanyName" data-type="System.String" serialization-order="2"/> <attribute name="_ContactName" data-type="System.String" serialization-order="3"/> <attribute name="_Country" data-type="System.String" serialization-order="4"/> <attribute name="CustomerID" data-type="java.lang.String" serialization-order="5"/> <attribute name="CompanyName" data-type="java.lang.String" serialization-order="6"/> <attribute name="ContactName" data-type="java.lang.String" serialization-order="7"/> <attribute name="Country" data-type="java.lang.String" serialization-order="8"/> </all-attribute-list> |
두 번째로, NCache'의 상호 운용 가능한 바이너리 직렬화는 .NET 및 Java 구현이 쉽게 해석할 수 있는 형식으로 바이트 스트림을 생성하는 사용자 지정 프로토콜을 구현합니다. 다음은 그 예입니다. NCache config.ncconf 데이터 상호 운용 가능한 클래스 매핑을 사용합니다. 아래에 표시된 대로 먼저 sharing-class 태그의 일부로 .NET 클래스를 선언해야 합니다.
|
1 2 3 4 5 6 7 8 9 10 11 |
… <data-sharing> <sharing-type id="1001" handle="Customer" portable="True"> … <sharing-class name="Alachisoft.Sample.Data.Customer:1.0.0.0" class-handle-id="1" assembly-name="Data, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" language-platform="net"> <attribute name="CustomerID" data-type="System.String" serialization-order="1"/> <attribute name="CompanyName" data-type="System.String" serialization-order="2"/> <attribute name="ContactName" data-type="System.String" serialization-order="3"/> <attribute name="Country" data-type="System.String" serialization-order="4"/> </sharing-class> … |
그런 다음 Java 클래스를 sharing-class 태그의 일부로 선언하지만 별도의 섹션으로 선언합니다.
|
1 2 3 4 5 6 7 8 |
… <sharing-class name="com.alachisoft.sample.data.customer:0.0" class-handle-id="2" assembly-name="" language-platform="java"> <attribute name="customerID" data-type="java.lang.String" serialization-order="5"/> <attribute name="companyName" data-type="java.lang.String" serialization-order="6"/> <attribute name="contactName" data-type="java.lang.String" serialization-order="7"/> <attribute name="country" data-type="java.lang.String" serialization-order="8"/> </sharing-class> … |
원래, NCache 호환되는 Java 클래스가 있는 한 코드 변경 없이 .NET 객체를 직렬화하고 Java로 역직렬화할 수 있습니다. NCache 메모리 내 코드에 대한 런타임 코드 생성 메커니즘을 용이하게 합니다. 직렬화 그리고 컴파일된 폼을 사용하여 런타임에 상호 운용 가능한 클래스에 대한 역직렬화. 따라서 이 바이너리 수준 직렬화는 모든 XML 변환보다 더 컴팩트하고 빠릅니다.
맺음말
요약하면 사용 NCache .NET과 Java 간에 데이터를 공유하여 애플리케이션 성능을 확장하고 향상시키는 것은 매우 효율적입니다. 매우 느리고 리소스를 많이 소모하는 XML 직렬화를 피할 수 있습니다. 그럼, 무엇을 기다리고 계신가요? 완벽하게 작동하는 30일 평가판에 가입하세요. NCache 기업에서 직접 사용해 보세요.






