분류

카우치베이스 .NET 클라이언트 1.3.4 출시!

이번 릴리스는 뷰의 재시도 알고리즘을 개선하고 클라이언트에 보다 정교한 로깅을 추가하는 데 중점을 둔 또 다른 버그 수정/안정성 릴리스이며, 기타 몇 가지 기타 수정 사항도 포함되어 있습니다.

Couchbase는 분산 데이터베이스이고 노드가 언제든지 클러스터를 떠나거나 들어올 수 있다는 점을 고려하면 보기 작업의 일관성을 개선하는 것이 중요합니다. 예를 들어 특정 노드가 클러스터를 떠나는 동안 해당 노드를 대상으로 하는 작업이 진행 중일 때 Couchbase 클라이언트에서 문제가 됩니다. 문제는 다음에 무엇을 해야 할까요? 단순히 실패하고 호스팅 애플리케이션이 오류를 처리하고 자체적인 방법으로 작업을 다시 시도하도록 할 수도 있지만, 이는 올바른 접근 방식이 아니며 클라이언트를 사용하는 애플리케이션 개발자가 좋아할 만한 경험이라고 생각하지 않습니다.

1.3.4에서는 보기 작업이 실패하면 클라이언트가 HTTP 상태 코드와 몇 가지 휴리스틱을 사용하여 작업을 다시 시도할지 아니면 성공 값을 false로 설정하여 오류 메시지를 애플리케이션에 다시 표시할지 여부를 결정합니다. 재시도가 정상인 경우 클라이언트는 각 재시도마다 하드 캡에 도달하거나 작업이 성공할 때까지 재시도 사이의 기간을 두 배로 늘리는 지수 백오프 전략을 사용합니다. 첫 번째 시도는 계산되지 않지만 이후 재시도할 때마다 클라이언트는 1ms, 2ms, 4ms 등으로 일시 정지합니다. 이렇게 하면 클라이언트가 클러스터에 DoS 공격을 일으키지 않고 작업을 완전히 실패하기 전에 클러스터에 안정성 문제를 해결할 수 있는 시간을 확보할 수 있습니다.

이 알고리즘은 설정 내 ViewRetryCount 속성을 통해 조정할 수 있으며 기본값은 2입니다. 2로 설정하면 클라이언트가 작업을 포기하기 전에 첫 번째 시도는 계산되지 않고 1ms, 2ms, 4ms로 네 번 시도한 후 마지막으로 시도합니다. 0에서 10 사이의 설정을 선택할 수 있으며, 0은 재시도를 비활성화하고 10은 1024ms에 마지막 재시도를 수행합니다(실제로는 첫 번째 시도와 마지막 시도 사이의 시간을 합산한 것이므로 총 시간은 훨씬 더 길어집니다). 이 알고리즘은 이후 릴리스에서 변경될 수 있습니다.

공식 릴리즈 노트는 다음에서 확인할 수 있습니다. 여기.

이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

작성자

게시자 Jeff Morris, 수석 소프트웨어 엔지니어, Couchbase

Jeff Morris는 Couchbase의 수석 소프트웨어 엔지니어입니다. Couchbase에 입사하기 전에는 6년 동안 Source Interlink에서 엔터프라이즈 웹 아키텍트로 근무했습니다. Jeff는 Couchbase SDK 개발과 N1QL(쿼리 언어)과 통합하는 방법을 담당하고 있습니다.

댓글 하나

  1. 안녕하세요 Jeff,

    최근 저희는 .net 코드에서 Couchbase와의 연결 문제에 직면했습니다. 문제를 디버깅하는 동안 카우치 서버에 생성되는 TCP 연결 수가 매우 많다는 것을 발견했습니다(서버당 거의 10,000개). 문제를 좀 더 자세히 살펴본 결과, 연결 압박은 현재 Couchbase 클라이언트의 사용량과 관련이 있다는 것을 알게 되었습니다. 코드를 읽고 몇 가지 단위 테스트 코드를 작성하면서 연결 풀이 CouchBaseClient 객체와 연결되어 있다는 사실을 발견했습니다. 우리 코드는 모든 요청에 대해 새 클라이언트 객체를 생성하고 객체를 폐기하기 위해 소멸자에 의존하고 있었습니다. 그 결과 서버에 엄청난 연결 압력이 가해져 연결 시간 초과 및 기타 연결 문제가 발생했습니다.

    위의 관찰 결과를 바탕으로 클라이언트 객체를 싱글톤으로 사용하도록 코드를 변경하고 최소 연결 풀 크기를 10에서 3으로 줄였습니다. 이러한 변경으로 문제가 해결된 것으로 보입니다. 지난 3일간의 스트레스 테스트에서는 연결 문제가 기록되지 않았습니다.

    이런 소비 패턴이 의도된 것인지 궁금해서요. 필요하다면 더 자세한 내용을 공유해 드릴 수 있습니다.

    이에 대한 의견을 보내주셔서 정말 감사합니다.

    고마워요

    -VM

    1. 안녕하세요 VM -

      네, 맞습니다. 클라이언트는 프로세스 또는 앱 도메인이 시작될 때 생성하고 프로세스가 파괴되기 전에 파괴하는 수명이 긴 객체여야 합니다. 싱글톤 또는 공용 정적 인스턴스가 완벽하며 클라이언트는 스레드에 안전합니다.

      자세한 내용은 여기에서 확인할 수 있습니다: http://docs.couchbase.com/couc

      제가 보기에는 '올바른' 방식으로 일을 하고 계신 것 같습니다.

      -Jeff

  2. [...] Couchbase .NET 클라이언트 1.3.4 출시! 블로그 읽기 및 릴리스 노트 보기 [...]

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.