이 블로그를 통해 1.4.0 Java SDK의 첫 번째 개발자 프리뷰를 공개합니다. 이 새로운 마이너 릴리스에서는 일반적인 버그 수정 및 개선 사항 외에도 최근 Couchbase Server 2.5.0에 도입된 최적화된 연결 관리 기능을 지원합니다. 새로운 기능에 대한 자세한 내용은 아래를 참조하세요.
다음에서 미리 보기를 다운로드할 수 있습니다. Maven Central 또는 모든 JAR 포함.
업데이트: 2014년 4월 4일부로 개발자 프리뷰가 1.4.0dp2로 업데이트되었습니다.
최적화된 연결 관리
카우치베이스 서버 2.5.0 는 몇 주 전에 클러스터 구성을 가져오는 새로운 방법을 도입했습니다. 포트 8091(http)을 통해 로드하던 기존 방식에 더해 이제 SDK가 기본 바이너리 프로토콜(포트 11210)을 통해 직접 로드할 수 있게 되었습니다. 이전에는 진행 중인 클러스터 변경 사항을 추적하기 위해 클라이언트가 구성 포트에 스트리밍 연결을 설정해야 했습니다(이 경우 새 구성 청크를 클라이언트에 푸시해야 했죠). 이제 클라이언트는 바이너리 포트를 통해 데이터 작업 응답과 함께 새 구성을 수신합니다. 따라서 부트스트랩이 훨씬 빠르고 효율적이므로 대규모 배포를 더 쉽게 관리할 수 있습니다.
Java SDK를 사용할 때 API 측면에서 변경해야 할 사항은 없지만 부트스트랩 프로세스가 약간 변경되므로 실제로 어떤 일이 일어나는지 이해하는 것이 좋습니다. 해당 주제에 대한 일반적인 소개는 다음을 참조하세요. 마크 넌버그의 블로그 게시물 와 유사한 변경 사항에 대해 많은 부분을 다루고 있습니다.
Java SDK는 전달된 부트스트랩 노드 목록을 가져오지만 지금은 호스트 이름을 제외한 URI의 모든 것을 무시합니다. 포트 11210에서 대상 서버에 연결을 시도합니다. 서버가 유효한 구성으로 응답하면(2.5.0 이상 노드 및 카우치베이스 버킷인 경우) 이 구성이 즉시 저장되어 사용됩니다. 스트리밍 연결은 연결되지 않지만 이 바이너리 연결은 필요에 따라 필요에 따라 구성 업데이트를 가져오는 데 재사용됩니다. 서버가 유효한 구성으로 응답하지 않으면 부트스트랩 목록의 다른 모든 노드가 동일한 동작으로 시도됩니다. 유효한 구성을 반환하는 노드가 없는 경우(예: 멤캐시 버킷을 사용하거나 클러스터의 모든 노드가 버전 2.2 이상인 경우) 클라이언트는 (이전) HTTP 유형 부트스트랩 및 스트리밍 연결로 돌아갑니다. 이 프로세스는 동작을 변경하고 인수가 암시하는 것과 일치하지 않는 것처럼 보이지만, 기존 애플리케이션과의 호환성을 위해 올바른 조치라고 생각합니다(피드백에 열려 있지만).
구성 연결이 끊어지거나 SDK의 다른 부분에서 구성 연결이 오래되었음을 나타내는 경우(예: 많은 양의 작업 실패)에도 동일한 프로세스가 설정됩니다.
정보 수준 로깅이 추가되어 어떤 부트스트랩 접근 방식이 사용되었는지 로그에서 확인할 수 있습니다. 새 연결 관리 기능이 작동하면 이 로그 메시지가 표시됩니다:
그렇지 않으면 이 로깅 출력을 찾을 수 있습니다:
이 변경 사항은 SDK 내부에서 약간 큰 변경이므로 개발자 프리뷰를 통해 최종 릴리스로 바로 진행하지 않고 프리뷰를 선택한 이유에 대해 자세히 알아보고 사용자 환경의 다양한 시나리오에 대한 피드백을 제공해 주세요. 저희 테스트 팀에서도 테스트를 진행 중입니다.
ViewResponse의 총 레코드 수
축소되지 않은 모든 뷰는 뷰의 총 행 수를 표시하며, 이는 이제 Java SDK에도 반영됩니다. 이는 페이지 매김 및 단위 테스트 시나리오에서 특히 유용합니다. 다음은 맥주 샘플 데이터 집합의 예입니다:
보기 보기 = c.getView("beer", "brewery_beers");
쿼리 쿼리 = 새 쿼리();
query.setLimit(10);
보기 응답 응답 = c.query(view, query);
System.out.println("이 배치에서: " + response.size());
System.out.println("이 뷰의 합계입니다: " + response.getTotalRows());
인쇄됩니다:
이 보기의 합계입니다: 7303
이 기능은 오랫동안 사용자들이 요청해 온 기능으로, 이번 릴리스에 포함되었습니다.
향상된 복제본 읽기 기능
복제본 읽기 기능을 추가한 이후 또 다른 사용자 요청은 복제본 노드에서 CAS 값을 가져오는 방법도 있어야 한다는 것이었습니다. 이것은 기본적으로 잘 알려진 "gets" 명령과 유사하지만 이번에는 레플리카에 대한 것입니다. 저희는 asyncGetsFromReplica 및 getsFromReplica 명령을 통해 이 기능을 추가했습니다. 다음은 새로운 메서드를 활용하는 방법에 대한 예제입니다:
CASValue
의미는 "getFromReplica"와 동일하므로 먼저 응답한 사람에 따라 CAS가 포함된 반환값이 마스터 또는 레플리카 노드 중 하나에서 나올 수 있다는 점에 유의하세요. 이 CAS 값은 최적의 잠금을 위해 CAS 값을 포함해야 하는 후속 쓰기 명령에 사용할 수 있습니다.
작동 상태의 유형 안전 상태 코드
과거에는 향후 작업 상태 응답 문자열을 처리하는 것이 항상 다소 번거로웠습니다. 문자열을 확인하는 것 외에는 이를 처리할 수 있는 좋은 방법이 없었죠. 이번 마이너 릴리스에서는 OperationStatus 객체에 StatusCode를 추가하여 ENUM을 간단히 확인할 수 있습니다. 예를 들어 성공적인 응답의 모습은 다음과 같습니다:
이제 동일한 접근 방식을 사용하여 키가 이미 설정되어 있어 추가 응답이 실패했는지 확인할 수 있습니다:
상태 코드는 반환될 수 있는 모든 가능한 상태 코드를 제공하며, 최종 릴리스 전에 해당 코드가 발생할 수 있는 시점에 대한 적절한 문서도 제공할 예정입니다(코드를 확인할 때 무엇을 찾아야 하는지 알 수 있도록).
다음 단계
이번 마이너 릴리스의 개발자 프리뷰를 실시하기로 결정한 이유는 최종 릴리스 전에 최적화된 새로운 연결 관리 기능에 대한 실전 테스트를 진행하기 위해서입니다. 직접 사용해 보시고 발견되는 문제가 있으면 보고해 주세요. 이슈 트래커에서. 테스트 팀이 승인하고 DP 사용자들의 우려가 없다면 곧바로 GA로 출시할 예정입니다!
안녕하세요, 니칭어입니다,
카우치베이스 2.x 및 자바 클라이언트 SDK 1.4.x에서 아래 예외가 무작위로 발생하고 있습니다.
1. 서버의 \'ns_1@10.10.10.163\'에서 버킷 \'Sample\' 종료하기 shutdownns_memcached002ns_1@10.10.10.1632233:48 - 화 Aug 11, 2015
2.com.couchbase.client.vbucket.ConfigurationException: 유효한 버킷 구성을 가져올 수 없습니다.2015-08-06 00:37:37 STDIO [ERROR] at com.couchbase.client.vbucket.provider.BucketConfigurationProvider.bootstrap(BucketConfigurationProvider.ja...:123)
2015-08-06 00:37:37 ST디오 [오류]
이 문제를 다시 제작하고 수정할 수 있는 방법이 있을까요?
안녕하세요, 라비,
가장 좋은 방법은 이 토론을 포럼으로 옮기는 것입니다, https://forums.couchbase.com에서 토론을 더 잘 따라가고 자세한 내용을 요청할 수 있습니다(Java SDK 카테고리에 게시하고 가능한 한 많은 컨텍스트를 제공하세요).
고마워요!