이번 릴리스는 뷰의 재시도 알고리즘을 개선하고 클라이언트에 보다 정교한 로깅을 추가하는 데 중점을 둔 또 다른 버그 수정/안정성 릴리스이며, 기타 몇 가지 기타 수정 사항도 포함되어 있습니다.
Couchbase는 분산 데이터베이스이고 노드가 언제든지 클러스터를 떠나거나 들어올 수 있다는 점을 고려하면 보기 작업의 일관성을 개선하는 것이 중요합니다. 예를 들어 특정 노드가 클러스터를 떠나는 동안 해당 노드를 대상으로 하는 작업이 진행 중일 때 Couchbase 클라이언트에서 문제가 됩니다. 문제는 다음에 무엇을 해야 할까요? 단순히 실패하고 호스팅 애플리케이션이 오류를 처리하고 자체적인 방법으로 작업을 다시 시도하도록 할 수도 있지만, 이는 올바른 접근 방식이 아니며 클라이언트를 사용하는 애플리케이션 개발자가 좋아할 만한 경험이라고 생각하지 않습니다.
1.3.4에서는 보기 작업이 실패하면 클라이언트가 HTTP 상태 코드와 몇 가지 휴리스틱을 사용하여 작업을 다시 시도할지 아니면 성공 값을 false로 설정하여 오류 메시지를 애플리케이션에 다시 표시할지 여부를 결정합니다. 재시도가 정상인 경우 클라이언트는 각 재시도마다 하드 캡에 도달하거나 작업이 성공할 때까지 재시도 사이의 기간을 두 배로 늘리는 지수 백오프 전략을 사용합니다. 첫 번째 시도는 계산되지 않지만 이후 재시도할 때마다 클라이언트는 1ms, 2ms, 4ms 등으로 일시 정지합니다. 이렇게 하면 클라이언트가 클러스터에 DoS 공격을 일으키지 않고 작업을 완전히 실패하기 전에 클러스터에 안정성 문제를 해결할 수 있는 시간을 확보할 수 있습니다.
이 알고리즘은 설정 내 ViewRetryCount 속성을 통해 조정할 수 있으며 기본값은 2입니다. 2로 설정하면 클라이언트가 작업을 포기하기 전에 첫 번째 시도는 계산되지 않고 1ms, 2ms, 4ms로 네 번 시도한 후 마지막으로 시도합니다. 0에서 10 사이의 설정을 선택할 수 있으며, 0은 재시도를 비활성화하고 10은 1024ms에 마지막 재시도를 수행합니다(실제로는 첫 번째 시도와 마지막 시도 사이의 시간을 합산한 것이므로 총 시간은 훨씬 더 길어집니다). 이 알고리즘은 이후 릴리스에서 변경될 수 있습니다.
공식 릴리즈 노트는 다음에서 확인할 수 있습니다. 여기.
안녕하세요 Jeff,
최근 저희는 .net 코드에서 Couchbase와의 연결 문제에 직면했습니다. 문제를 디버깅하는 동안 카우치 서버에 생성되는 TCP 연결 수가 매우 많다는 것을 발견했습니다(서버당 거의 10,000개). 문제를 좀 더 자세히 살펴본 결과, 연결 압박은 현재 Couchbase 클라이언트의 사용량과 관련이 있다는 것을 알게 되었습니다. 코드를 읽고 몇 가지 단위 테스트 코드를 작성하면서 연결 풀이 CouchBaseClient 객체와 연결되어 있다는 사실을 발견했습니다. 우리 코드는 모든 요청에 대해 새 클라이언트 객체를 생성하고 객체를 폐기하기 위해 소멸자에 의존하고 있었습니다. 그 결과 서버에 엄청난 연결 압력이 가해져 연결 시간 초과 및 기타 연결 문제가 발생했습니다.
위의 관찰 결과를 바탕으로 클라이언트 객체를 싱글톤으로 사용하도록 코드를 변경하고 최소 연결 풀 크기를 10에서 3으로 줄였습니다. 이러한 변경으로 문제가 해결된 것으로 보입니다. 지난 3일간의 스트레스 테스트에서는 연결 문제가 기록되지 않았습니다.
이런 소비 패턴이 의도된 것인지 궁금해서요. 필요하다면 더 자세한 내용을 공유해 드릴 수 있습니다.
이에 대한 의견을 보내주셔서 정말 감사합니다.
고마워요
-VM
안녕하세요 VM -
네, 맞습니다. 클라이언트는 프로세스 또는 앱 도메인이 시작될 때 생성하고 프로세스가 파괴되기 전에 파괴하는 수명이 긴 객체여야 합니다. 싱글톤 또는 공용 정적 인스턴스가 완벽하며 클라이언트는 스레드에 안전합니다.
자세한 내용은 여기에서 확인할 수 있습니다: http://docs.couchbase.com/couc…
제가 보기에는 '올바른' 방식으로 일을 하고 계신 것 같습니다.
-Jeff
[...] Couchbase .NET 클라이언트 1.3.4 출시! 블로그 읽기 및 릴리스 노트 보기 [...]