캐시의 오류 처리
다음과 같은 시나리오가 있습니다. NCache 아래와 같이 다양한 오류로 인해 클라이언트 작업이 실패할 수 있습니다.
지정된 키가 캐시에 있음
- 예외 유형:
OperationFailedException
요청사항: "지정된 키가 이미 캐시에 있습니다."
이유 : 이 예외는 추가 개체에 동일한 키가 사용되는 경우 API입니다. 이 작업은 주어진 키가 이전에 존재하지 않는 경우에만 항목을 캐시에 추가합니다. 키가 캐시 내에 존재하지 않을 때 처음으로 캐시에 데이터를 추가합니다.
비즈니스 요구 사항에 따라 다음과 같은 방법으로 이를 처리할 수 있습니다.
- 추가하려는 개체에 대한 새 키를 지정합니다.
- 끼워 넣다 개체에 동일한 키가 사용되는 경우 API입니다.
- 제거 개체에 동일한 키가 사용되는 경우 API입니다. 먼저 개체를 제거한 다음 동일한 키를 사용하여 캐시에 다시 추가합니다.
연결 실패
- 예외 유형:
OperationFailedException
요청사항: "서버와 클라이언트 간의 연결이 끊어져 작업이 중단되었습니다."
이유 : 서버와 클라이언트 간의 연결이 끊어지면 작업이 실패할 수 있습니다. 클라이언트와 서버 간의 물리적 중단 또는 네트워크 결함 때문일 수 있습니다.
이미 설정된 연결이 서버와 끊어진 경우 이 예외가 발생할 수 있습니다. 이 경우 네트워크 원인을 먼저 해결한 후, 꼭 필요한 경우 재시도 하시기 바랍니다.
요청을 처리할 수 있는 서버가 없습니다.
- 예외 유형:
OperationFailedException
요청사항: "요청을 처리할 수 있는 서버가 없습니다."
이유 : 중지 및 액세스 불가능으로 인해 캐시를 사용할 수 없는 경우 이 예외가 발생할 수 있습니다.
작업 시간 초과
- 예외 유형:
OperationFailedException
요청사항: "작업 시간이 초과되었습니다."
이유 : 서버에서 트랜잭션이 많은 경우 서버가 현재 작업을 처리하는 동안 들어오는 클라이언트 작업을 대기열에 추가할 수 있습니다. 각 캐시 클라이언트 작업에는 구성 가능한 제한 시간 값이 연결되어 있습니다. 즉, 캐시 서버가 주어진 시간 내에 작업에 응답하지 않으면 해당 작업이 실제로 실패(또는 성공)하지 않았더라도 작업이 실패한 것으로 간주됩니다.
서버가 여전히 이전 작업을 처리하고 있는 경우에는 시간 초과가 다시 발생할 수 있으므로 시간 초과된 작업을 즉시 다시 시도하지 않는 것이 좋습니다. 따라서 다음을 수행하는 것이 좋습니다. 귀하의 비즈니스가 허용하는 경우, 작업을 재시도하기 전에 시간 초과 값을 확장합니다.
In NCache, 기본 제한 시간 값은 클라이언트 작업을 완료해야 하는 90초입니다. 작업을 더 오래 기다리게 하려면 다음을 구성할 수 있습니다. client-request-timeout
값 클라이언트.ncconf 파일.
상태 이전 중에 수행되는 작업
- 예외 유형:
OperationFailedException
요청사항: "상태 이전으로 인해 작업을 완료할 수 없습니다."
이유 : 클러스터의 배포 상태가 변경되면 특히 분할 및 분할-복제 토폴로지의 경우 클러스터 전체에서 즉각적인 데이터 일관성이 필요합니다. 이러한 상태 변경은 노드가 클러스터에 합류하거나 클러스터에서 나가기 때문에 발생합니다. 즉, 노드가 클러스터에 합류하면 새로 추가된 노드에는 분포에 따라 캐시의 데이터가 제공되어야 합니다. 마찬가지로, 노드가 클러스터를 떠나면 데이터는 나머지 노드에 재분배됩니다.
이 문제를 해결하기 위해, NCache 클러스터 캐시에서 데이터 배포가 변경된 후 트리거되는 노드 수준 데이터 전송 메커니즘인 상태 전송을 내부적으로 시작합니다.
단일 클러스터의 두 노드 간에 상태 전송이 발생할 수 있으며, 여기서 데이터는 버킷별로 전송됩니다. 요청 노드는 특정 버킷을 잠가서 상태 전송을 시작합니다. 상태 전송 중에 이 버킷에서 수행되는 모든 작업이 기록됩니다. 전송 중에 동일한 버킷이 두 노드 모두에 존재하거나 존재하지 않을 수 있으므로 이러한 작업으로 인해 예상보다 중복되거나 결과가 더 적을 수 있습니다. 버킷이 완전히 전송되면 기록된 작업이 요청 노드로 전송됩니다.
클러스터가 변경될 때마다 캐시에 대한 State Transfer PerfMon 카운터를 모니터링하는 것이 좋습니다. 카운터에 상태 전송이 완료되었다고 표시되면 캐시에서 작업을 계속 수행할 수 있습니다.