복붙노트

[REDIS] 푸른 레디 스 캐시 - GET 호출에 시간 제한

REDIS

푸른 레디 스 캐시 - GET 호출에 시간 제한

우리는 StackExchange.Redis 라이브러리를 통해 우리의 푸른 레디 스 캐시에 연결 푸른 여러 웹 및 작업자 역할을 가지고, 우리는 정지에 우리의 엔드 - 투 - 엔드 솔루션의 갈기를 만들고 정기적으로 시간 제한을 받고 있습니다. 그 중 하나의 예는 다음과 같습니다 :

모든 시간 제한은 다른 큐와 QS 번호를 가지고 있지만, 메시지의 나머지 부분은 일치한다. 이 StringGet 호출은 캐시에 서로 다른 키에 걸쳐 있습니다. 우리의 각 서비스에서, 우리는 웹 또는 작업자 역할의 시작에서 우리의 IoC 컨테이너에 등록되어 하나의 ConnectionMultiplexer와 싱글 캐시 액세스 클래스를 사용 :

        container.RegisterInstance<ICacheAccess>(cacheAccess);

다음과 같이 ICacheAccess 우리의 구현에서, 우리는 멀티플렉서를 만드는 :

            ConfigurationOptions options = new ConfigurationOptions();
            options.EndPoints.Add(serverAddress);
            options.Ssl = true;
            options.Password = accessKey;                    
            options.ConnectTimeout = 1000;
            options.SyncTimeout = 2500;

            redis = ConnectionMultiplexer.Connect(options);

어디 레디 스 객체 인스턴스에 걸쳐 사용된다. 우리는이 ICacheAccess 구현을 통해 캐시에 연결 (20 개) 웹 및 작업자 역할 인스턴스에 대해 가지고 있지만, 한 관리 콘솔 쇼 캐시 200 개 동시 연결의 평균.

나는 우리가 NuGet을 통해하고있는 참조 StackExchange.Redis의 버전 1.0.333을 사용하는 것이 다른 게시물을 본 적이 있지만 내가 추가 한 StackExchange.Redis.dll 참조의 실제 버전을 볼 때, 그것은 1.0.316.0을 보여줍니다. 우리는 추가하고 새 프로젝트에 추가뿐만 아니라 NuGet 참조를 제거하려고했습니다, 우리는 항상 버전 불일치를 얻을.

모든 통찰력을 감상 할 수있다. 감사.

추가 정보:

우리는 1.0.371로 업그레이드했습니다. 우리는이 개 서비스가 각 액세스 서로 다른 간격으로 같은 캐시 개체 편집 한 가끔 읽고 두 번째 객체를 여러 번 읽고 하나. 두 서비스는 동일한 캐싱 코드와 StackExchange.Redis 라이브러리 버전으로 배포됩니다. 나는 거의 객체를 편집 서비스에 타임 아웃을 볼 수 없습니다하지만 난 그것을 읽는 서비스에 대한 시간의 50 75 % 사이에 시간 제한을받을. 시간 제한은 것과 같은 포맷이 상기 표시가 있고, 이들은 폴리 재시 블록에서 db.StringGet 호출을 배치 한 후 계속 발생하는 핸들 모두 RedisException 및 System.TimeoutException 및은 500ms 후에 한번 시도.

우리는이 문제에 대해 Microsoft에 연락, 그들은 그들이 레디 스 서비스 측에 문제를 나타내는 레디 스 로그에 아무것도 볼 수 있는지 확인하십시오. 우리의 캐시 미스 %는 레디 스 서버에서 매우 낮은이지만, 우리는이 시간 제한, 실질적으로 방해한다 우리의 응용 프로그램의 기능을 얻기 위해 계속합니다.

코멘트에 대한 응답으로, 그래, 우리는 항상 QS의 수와 결코 품질 관리에있다. 우리는 항상에서 결코 두 번째에서의 첫 부분에 숫자를 가지고있다.

더욱 자세한 내용은 :

나는 더 높은 CPU에서 적은 수의 인스턴스와 서비스를 실행하면, 나는 인스턴스가 낮은 CPU를 실행하는 경우보다 훨씬 더 많은이 시간 초과 오류의 수. 보다 구체적으로, 오늘 아침에 우리의 서비스에서 몇 가지 숫자를 당겼다. 단지 42 30 분 - 그들은 약 30 %의 CPU에서 실행했을 때, 나는 거의 시간 제한 문제를 보았다. 나는 절반 인스턴스를 제거하고 주위 60-65%의 CPU에서 실행하기 시작했을 때, 속도는 (536) 30 분으로 10 배 증가했다.

해결법

  1. ==============================

    1.나는이 스레드가 오래된 개월 알고 있지만 나는 내 자신의 경험이 여기에 몇 가지 가치를 추가 할 수 있다고 생각합니다. 나는 푸른 레디 스 캐시와 같은 문제 (취득에 시간 제한을)했지만, 문자열 값 (> 길이 250K) 비교적 큰 어디는 거의 독점적에 일어나고있는 것은 가져옵니다 것을 깨달았다. 모두 취득 및 설정에 나는 GZIP 구현 (문자열 값이 큰 경우) 지금은 거의 제한 시간을 얻을하지 않습니다.

    나는이 스레드가 오래된 개월 알고 있지만 나는 내 자신의 경험이 여기에 몇 가지 가치를 추가 할 수 있다고 생각합니다. 나는 푸른 레디 스 캐시와 같은 문제 (취득에 시간 제한을)했지만, 문자열 값 (> 길이 250K) 비교적 큰 어디는 거의 독점적에 일어나고있는 것은 가져옵니다 것을 깨달았다. 모두 취득 및 설정에 나는 GZIP 구현 (문자열 값이 큰 경우) 지금은 거의 제한 시간을 얻을하지 않습니다.

    이 특정 문제가 해결되지 않는 경우에도, 그것은 비용을 절감하고 성능을 향상시키기 위해 일반적으로 값을 압축하는 것이 좋습니다 아마.

  2. ==============================

    2.버전 번호에 대해서는, AssemblyVersion는 지난 몇 릴리스 1.0.316에서 고정 된 것 같다,하지만 AssemblyFileVersion는 NuGet 패키지 버전과 일치하도록 업데이트되었습니다. 지금, 나는 AssemblyVersion을 무시하고 당신이 올바른 이진을 보장하기 위해 AssemblyFileVersion를 사용하는 것이 좋습니다.

    버전 번호에 대해서는, AssemblyVersion는 지난 몇 릴리스 1.0.316에서 고정 된 것 같다,하지만 AssemblyFileVersion는 NuGet 패키지 버전과 일치하도록 업데이트되었습니다. 지금, 나는 AssemblyVersion을 무시하고 당신이 올바른 이진을 보장하기 위해 AssemblyFileVersion를 사용하는 것이 좋습니다.

    당신은 여전히 ​​푸른 레디 스 캐시를 사용하여 시간 제한을보고있는 경우 AzureCache@microsoft.com 문의하시기 바랍니다.

  3. from https://stackoverflow.com/questions/26489197/azure-redis-cache-timeouts-on-get-calls by cc-by-sa and MIT license