오늘날 많은 조직에서 .NET 및 Java 기술을 사용하여 트래픽이 많은 다양한 응용 프로그램을 개발합니다. 동시에 이러한 애플리케이션은 서로 데이터를 공유해야 할 뿐만 아니라 이전 버전과의 호환성 및 비용 절감을 위해 동일한 클래스의 다른 버전의 런타임 공유를 지원하기를 원합니다.
.NET과 Java 애플리케이션 간에 서로 다른 클래스 버전의 런타임 공유를 지원하는 데 주로 사용되는 가장 일반적인 방법은 다음과 같습니다. XML 직렬화. 그러나 아시다시피 XML 직렬화는 매우 느리고 자원이 많이 소모되는 프로세스입니다. 여기에는 XML 유효성 검사, 구문 분석, 변환이 포함되므로 애플리케이션 성능이 실제로 저하되고 메모리 및 CPU 측면에서 추가 리소스가 사용됩니다.
.NET과 Java 간에 서로 다른 클래스 버전 공유를 지원하는 데 널리 사용되는 다른 접근 방식은 데이터베이스를 통하는 것입니다. 그러나 이 접근 방식의 문제는 속도가 느리고 증가하는 트랜잭션 부하에 따라 잘 확장되지 않는다는 것입니다. 따라서 더 많은 애플리케이션 서버를 추가하여 애플리케이션 계층을 선형적으로 확장할 수 있지만 데이터베이스 계층에서는 동일한 작업을 수행할 수 없기 때문에 데이터베이스가 빠르게 확장성 병목 현상이 됩니다.
이것은 어디 분산 캐시 처럼 NCache 정말 편리합니다. NCache 동일한 기술의 다른 버전 간뿐만 아니라 .NET과 Java 간에도 이진 수준 개체 변환을 제공합니다. XML 구성 파일을 통해 다른 버전을 매핑할 수 있으며 NCache 한 버전에서 다른 버전으로 변환하는 방법을 이해합니다.
NCache 클래스 버전 공유 프레임워크는 개발 언어(.NET일 수 있음)에 관계없이 동일한 클래스의 새 버전과 이전 버전이 쉽게 역직렬화할 수 있는 형식으로 지정된 매핑을 기반으로 바이트 스트림을 생성하는 상호 운용 가능한 이진 직렬화 사용자 지정 프로토콜을 구현합니다. 또는 자바.
다음은 예입니다 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 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> |
어떻게 NCache 런타임 데이터 공유에서 클래스 버전 관리를 수행합니까?
. ncache위에서 볼 수 있는 .config 파일을 보면 Employee 클래스에 먼저 정의된 특성 집합이 있음을 알 수 있습니다. 이들은 버전 독립적 속성이며 모든 버전의 .NET 및 Java 클래스에 나타납니다. 이것은 실제로 다른 버전에 나타나는 모든 속성의 상위 집합입니다. 그 아래에서 버전별 속성을 지정하고 위의 버전 독립적 속성에 매핑합니다.
이제 .NET Employee 버전 1.0.0.0을 저장했다고 가정해 보겠습니다. 이제 다른 애플리케이션이 동일한 Employee를 가져오려고 시도하지만 Java 버전 1.0 또는 2.0으로 표시하려고 합니다. NCache 데이터를 채울 .NET 버전 1.0.0.0의 속성과 비워 둘 속성 및 그 반대의 속성을 알고 있습니다.
다른 많은 시나리오가 있습니다 NCache 원활하게 처리합니다. 에 대한 온라인 제품 설명서를 읽으십시오. 방법 NCache 런타임 데이터 공유 작업.
마지막으로 가장 좋은 점은 이 기능을 사용하기 위해 직렬화 및 역직렬화 코드를 작성하거나 애플리케이션의 코드를 변경할 필요가 없다는 것입니다. NCache 기능. NCache 은(는) 런타임에 상호 운용 가능한 클래스의 메모리 내 직렬화 및 역직렬화 코드를 생성하고 컴파일된 형식을 사용하여 초고속으로 만드는 런타임 코드 생성 메커니즘을 구현했습니다.
요약하면 사용 NCache 이제 애플리케이션 코드를 수정하지 않고도 .NET 및 Java 애플리케이션 간에 서로 다른 클래스 버전을 공유할 수 있습니다.