개발자로서 어느 시점에서 클라이언트와 서버 간의 통신을 가속화하는 데 어려움을 겪었을 것입니다. 네트워크 오버헤드, 지연 및 대기 시간은 항상 주요 관심사였으며 이 모든 것은 하나의 단일 질문으로 귀결됩니다. 요청 속도를 어떻게 높일 수 있습니까? 시간이 지남에 따라 수많은 솔루션이 발견되었지만 여기서 우리가 집중하고 있는 대답은 압축 및 압축 직렬화입니다. 당신에게 행운을, NCache 효율적인 압축 및 동적 압축 직렬화 기술을 제공합니다(참고로 둘 다 다른 것입니다). 이 블로그에서는 두 가지 모두의 필요성과 사용 방법을 살펴보겠습니다.
동적 컴팩트 직렬화
NCache 기본 .NET 직렬화 형식에 대한 지원을 제공하지만 다음과 같은 자체 직렬화 프레임워크도 제공합니다. 컴팩트 직렬화. 압축 직렬화도 이진 직렬화이지만 NCache 이 직렬화 프레임워크에 훨씬 더 많은 유연성을 제공합니다. 압축 직렬화는 전체 데이터의 크기를 줄이는 것이 아니라 네트워크를 통해 이동하는 데이터의 크기만 줄입니다. 네트워크 트립이 더 빨라지고 비용이 감소하므로 더 나은 기능을 달성하는 데 도움이 됩니다.
이제 동적 압축 직렬화의 이점과 기본 .NET 직렬화보다 더 유연한 방법을 살펴보겠습니다.
컴팩트 데이터 크기
In NCache, 이진 직렬화 데이터는 크기가 작습니다. 직렬화될 때 이러한 개체는 때때로 실제 데이터 크기보다 XNUMX배 작아집니다. 크기가 작을수록 데이터가 네트워크를 통해 더 빨리 이동하므로 성능이 증폭됩니다. 게다가 데이터가 더 작을수록 캐시 서버에서 더 적은 공간을 차지하므로 메모리 효율성도 높아집니다.
코드 변경이 필요하지 않습니다
데이터를 간결하게 직렬화하기 위해 코드를 변경할 필요가 없습니다. 관리 도구(NCache 웹 관리자 또는 NCache PowerShell 도구). NCache 내부적으로 데이터의 모든 직렬화를 처리하므로 코드를 변경할 필요가 없습니다.
선택적 직렬화
선택적 직렬화는 사용자가 직렬화해야 하는 데이터와 비직렬화로 표시해야 하는 데이터를 모두 제어할 수 있음을 의미합니다. 클래스 내에서 직렬화할 특성을 선택할 수 있습니다. 예를 들어 데이터베이스 연결 개체를 직렬화되지 않은 상태로 유지하려는 경우를 가정해 보겠습니다. 다른 속성을 직렬화하고 원하는 데이터를 직렬화하지 않은 상태로 유지할 수 있습니다.
직렬화할 데이터를 세밀하게 제어하기 위해 ICompactSerializable 인터페이스가 구현됩니다. 이것은 데이터 및 선택적 직렬화에 대한 주요 제어를 제공합니다. 사용자 정의 클래스에는 다음에 의해 호출되는 직렬화/역직렬화 메서드가 필요합니다. NCache 개체를 직렬화/역직렬화합니다. ICompactSerializable 인터페이스가 구현되는 방법을 보려면 아래 코드 예제를 살펴보십시오.
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 |
public class Customers : ICompactSerializable { private string _name; private int _id; private string _company; public Customers() { } public Customers(string customerName, int customerID, string companyName) { _name = customerName; _id = customerID; _company = companyName; } #region ICompactSerializable Members public void Deserialize(CompactReader reader) { _name = reader.ReadObject() as string; _id = reader.ReadInt32(); _company = reader.ReadObject() as string; } public void Serialize(CompactWriter writer){ writer.WriteObject(_name); writer.Write(_id); writer.Write(_company); } #endregion } |
NCache 또한 압축 직렬화를 위해 일반 클래스를 등록할 수 있습니다. 제네릭 클래스를 등록하는 방법에는 두 가지가 있습니다. NCache 웹 관리자 또는 IGenericTypeProvider 인터페이스를 통해.
1 단계 : 을 통하여 NCache 웹 관리자
다음을 사용하여 제네릭 클래스를 등록할 수 있습니다. NCache 아래와 같이 웹 관리자:
2단계: IGenericTypeProvider를 통해
이를 구현하려면 사용자가 GetGenericTypes 메서드를 구현하고 원하는 제네릭 형식을 배열로 반환해야 합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
public class CustomerPurchaseDetails<T, K, V> { // implement logic } public class CustomerPurchaseImpl : IGenericTypeProvider { Type[] types = new Type[6]; Type[] IGenericTypeProvider.GetGenericTypes() { types[0] = typeof(Dictionary<string, Customer>); types[1] = typeof(List); types[2] = typeof(CustomerPurchaseDetails<Order, Product, Customer>); types[3] = typeof(CustomerPurchaseDetails<Order, Product, int>); types[4] = typeof(CustomerPurchaseDetails<Order, string, byte>); types[5] = typeof(CustomerPurchaseDetails<string, Customer, bool>); return types; } public bool CheckIfSerializable(Type type, FieldInfo fieldInfo) { // implement logic } } |
그런 다음 이 클래스 어셈블리를 다음 위치에 배포합니다. NCache 웹 관리자. NCache Web Manager는 Type 배열에 채워진 모든 유형을 등록합니다.
압축 직렬화 문서 제네릭 클래스 등록 비제네릭 클래스 등록
압축
제공하는 또 다른 효과적인 기술 NCache is 데이터 압축 여기서 압축된 형식의 데이터가 캐시에 추가됩니다. 가장 큰 장점은 압축된 데이터가 압축되지 않은 데이터보다 적은 공간을 차지하고 많은 메모리를 절약한다는 것입니다. 읽기/쓰기 작업의 네트워크 비용을 줄입니다. 따라서 단순히 압축을 사용하여 네트워크 비용, 시간 및 메모리를 효율적으로 절약할 수 있습니다.
NCache GZip 압축을 사용하여 데이터를 압축합니다. 특정 임계값을 결정하고 활성화된 압축의 경우 임계값을 초과하는 모든 항목이 압축됩니다. 압축 및 비압축 데이터와 각각의 메모리 사용량을 비교하였다. 아래 그래프에서 결과를 볼 수 있습니다. 파란색 선은 압축된 데이터의 메모리 사용량을 나타내고 주황색 선은 압축되지 않은 데이터의 캐시 크기를 나타냅니다.
압축은 일반적으로 클라이언트 측과 서버 측에서 압축이 활성화된 경우 발생합니다. 두 서버와 클라이언트 측.
- 클라이언트 측 압축 클라이언트가 서버에서 요청한 모든 항목에 적용됩니다. 서버는 데이터를 압축하여 클라이언트로 보내고 클라이언트는 압축된 데이터를 수신하면 압축을 풉니다. 마찬가지로 클라이언트가 원격 서버로 전송하는 임계값을 초과하는 항목의 경우 데이터가 압축된 형태로 전송됩니다.
- 서버 측 압축 임계값을 초과하는 모든 항목에 대해 발생하며 캐시 시작 로더와 같은 서버 측 기능에 의해 데이터 소스에서 로드됩니다. 이러한 항목은 다음에서 압축됩니다. NCache 데이터 원본에서 받은 후 서버.
압축을 사용하려면 압축을 활성화하기만 하면 되며 이를 위한 두 가지 효과적인 방법이 있습니다.
방법 1: NCahe 웹 관리자 사용
아래 gif는 다음을 사용하여 압축을 활성화하는 방법을 보여줍니다. NCache 웹 관리자:
방법 2: 구성 사용
에 설치된 구성 파일 NCache 이름이 지정된 설치 디렉토리 config.ncconf 압축을 활성화 및 비활성화하는 태그를 포함합니다. 방법을 알려드리겠습니다.
1 |
<compression enabled="true" threshold="500kb"/> |
enabled 태그는 압축을 활성화하려면 true로 설정하고 압축을 비활성화하려면 false로 설정합니다. 또한 임계값 태그를 제공하며 제공된 값 이상의 데이터만 압축됩니다.
결론
결론적으로 압축 및 압축 직렬화는 응용 프로그램의 성능을 향상시키는 데 매우 효과적인 기술입니다. 다음을 사용하여 이러한 기능을 활성화하는 것도 매우 쉽습니다. NCache 관리 도구. NCache 코드 변경 없이 이 모든 것을 달성할 수 있습니다. 참조하십시오 NCache 다른 멋진 것을 확인하기 위한 문서 NCache 기능을 제공합니다.