분류

Java SDK 2.2.0 개발자 프리뷰 새로 고침

2017년 3월부터 참고: 이벤트 버스 및 지표 수집에 대한 자세한 정보는 다음 문서에서 확인할 수 있습니다. 공식 문서. 이 문서의 일부 정보는 오래되었을 수 있습니다.

유럽이 여름 더위에 녹아내리는 동안, Simon (파리에서), Sergey (민스크 출발) 및 I (비엔나 출신)가 그 열기를 이어받아 새로운 릴리스를 만들었습니다. 곧 출시될 2.2.0 릴리스의 두 번째 개발자 프리뷰입니다. 버그 수정(2.1.4 릴리스에도 포함됨) 외에도 다음과 같은 개선 사항과 새로운 기능을 제공합니다.

  • N1QL 및 다차원 스케일링(MDS)에 대한 확장 지원
  • 동기화 및 비동기화 API 개선 사항
  • 메트릭을 통한 지원성 향상
  • 다양한 종속성 업그레이드 및 DCP 변경

지금 바로 다운로드할 수 있는 방법은 다음과 같습니다:

https://gist.github.com/daschl/5b32706a0a4fe50cfaa4.js

확장된 N1QL 및 MDS 지원

집계, 배열, 비교, 날짜, 메타, 패턴 일치 및 문자열 함수를 포함한(이에 국한되지 않음) 다양한 N1QL 함수를 지원하도록 N1QL DSL 기능이 더욱 확장되었습니다. 이러한 모든 함수는 "com.couchbase.client.java.query.dsl.functions" 네임스페이스 아래에 있으며, 편의를 위해 정적 헬퍼 메서드로 가져와야 합니다.

다차원 확장은 멤캐시드 버킷에도 영향을 미치므로(모든 노드가 데이터 노드일 필요는 없음), 이제 SDK는 자동으로 해당 데이터 노드만 케타마 해싱 알고리즘에 사용되도록 합니다. 이는 사용자에게 완전히 투명하지만, MDS 및 멤캐시드 버킷과 함께 Couchbase Server 4.0을 사용하려는 경우 2.2.0 이상을 선택하는 것이 중요합니다. 1.4.x SDK는 영향을 받지 않으며 문제 없이 계속 작동합니다.

마지막으로, 모든 API의 일관성을 유지하기 위해 "매개변수화된" 쿼리의 이름을 "매개변수화된"으로 변경했으며, 이는 Couchbase 문서와 SDK API 전반에 걸쳐 올바른 형식으로 간주됩니다.

동기화 및 비동기화 API 개선 사항

비동기 API의 일반적인 함정 중 하나는 반환된 Observables가 '콜드'가 아닌 '핫'이라는 것입니다. 이는 재시도 의미론과 재사용성에 미묘한 영향을 미칩니다. 특히 재시도 연산자를 사용하려면 반환된 옵저버를 "지연"시켜서 다시 구독할 때마다 새로운 옵저버가 생성되도록 해야 합니다. 2.2.0에서는 모든 API 호출을 기본적으로 래핑하여 콜드 호출로 만들기로 결정했습니다. 기존 코드는 계속 작동하며, 두 번 지연해도 아무런 해를 끼치지 않습니다.

이 재시도 코드를 2.1.4와 비교하세요:

https://gist.github.com/daschl/0666841cb2bd69e53d17.js

2.2.0에 비해 약간 더 간단한 버전입니다:

https://gist.github.com/daschl/2b63c5193bac4dd11713.js

getFromReplica 호출은 일관성보다 가용성을 처리하는 방법으로 사용되므로 반환되는 첫 번째 N개의 문서만 가져오는 것이 매우 합리적일 때가 많습니다. 비동기 API에서는 "take()" 연산자를 사용하여 이 작업을 매우 쉽게 수행할 수 있지만, 동기 API에서는 목록 버전만 노출되었습니다. 차단 API로 작업하는 사용자의 유연성을 높이기 위해 이제 반복자를 반환하는 새로운 오버로드가 추가되었습니다. 반환되는 첫 번째 문서만 신경쓰는 경우에는 다음과 같이 하세요:

https://gist.github.com/daschl/0c7c92642d8c0af7dae3.js

이전에는 문서가 존재하지 않는 경우 카운터 연산에서 실패할 수 없었으며 항상 0으로 초기화되었습니다. 이 기능은 1.x 시리즈에서 사용할 수 있었으므로 기본값이 지정되지 않은 메서드 오버로드에서 다시 가져오기로 결정했습니다.

따라서 2.2.0에서는 문서가 존재하지 않으면 이 메서드 오버로드 "관찰 가능한 카운터(문자열 id, 긴 델타)"가 "DocumentDoesNotExistException"과 함께 실패합니다. 이전 동작을 원한다면 초기값으로 오버로드를 사용하고 0으로 설정하면 됩니다.

마지막으로 SDK는 이제 더 많은 환경 구성 옵션을 지원하며(TCP_NODELAY 구성 가능 포함), 디자인 문서를 생성할 때 옵션으로 구성할 수 있습니다. 디자인 문서를 생성하고 기본 최소 업데이트 간격을 변경하는 방법은 다음과 같습니다:

https://gist.github.com/daschl/ddec1089eed01285d0c4.js

메트릭을 통한 지원 기능 향상

개발자와 운영자가 흔히 하는 질문은 애플리케이션 내부에서 무슨 일이 일어나고 있는가 하는 것입니다. 그리고 이와 관련된 질문도 종종 있습니다. 왜 TimeoutException이 발생하는가? 저희는 몇 년 동안 프로덕션 배포를 디버깅해왔고, 그 과정에서 한두 가지를 배웠습니다. 가장 중요한 것 중 하나는 정보입니다. 애플리케이션에서 더 많은 정보를 얻을 수 있을수록 애플리케이션을 더 잘 이해할 수 있습니다.

바로 이러한 이유로 이벤트 버스를 통해 게시되고 메시지로 사용할 수 있는 상시 대기 시간 및 런타임 메트릭을 SDK에 추가했습니다. 단순히 로깅하는 것과 이벤트 버스를 통해 실제로 노출하는 것에는 큰 차이가 있습니다(나중에 로깅하는 경우에도 마찬가지입니다). 이를 통해 데이터를 소비할 수 있고, 더 중요한 것은 즉각적으로 반응할 수 있다는 점입니다. 데이터를 가져와서 nagios, Graphite 또는 logstash와 같은 선호하는 모니터링 시스템으로 전송할 수 있습니다. 시스템 중단 후에도 로그 파일을 분석하기 위해 인력을 투입할 필요가 없습니다.

기본적으로 SDK는 이를 통해 실행되는 작업의 지연 시간을 투명하게 수집하여 매 시간마다 이벤트 버스에 기록합니다. 방출 간격 및 기타 여러 설정은 환경을 통해 완전히 사용자 정의할 수 있습니다. 다음은 이벤트 버스에서 수신하고 메트릭 이벤트만 stderr에 출력하는 간단한 예제입니다(최대한의 유연성을 제공하기 위해 버스에 있는 이벤트보다 훨씬 더 많은 이벤트를 배포하고 있습니다):

https://gist.github.com/daschl/51e5193a57d909fd072b.js

여기서 두 가지 이벤트를 발견할 수 있습니다. 첫 번째 이벤트는 GC 통계, 메모리 및 스레드 사용량과 같은 런타임 정보를 인쇄합니다. 다른 하나는 내부 히스토그램에 수집된 지연 시간(및 처리량) 통계를 포함하는 약간 더 큰 이벤트입니다. 인쇄된 정보에는 최소 및 최대 지연 시간, 작업 수, 백분위수가 포함됩니다. 표지 아래에는 우수한 Hdr히스토그램 라이브러리 및 관련 LatencyUtils 패키지.

작업별로 인쇄할 뿐만 아니라 반환 시 상태 코드뿐만 아니라 대상 노드를 실제로 식별할 수 있다는 점에 주목하세요. 이를 통해 트리 형태의 시스템 상태를 구축하고 개별 노드 또는 서비스의 성능에 대한 인사이트를 도출할 수 있습니다(노드 A가 다른 노드보다 느리다, 대체가 삽입보다 빠르다, 노드 B에 오류가 많다...).

사용자 피드백을 바탕으로 이러한 메트릭을 기록하여 Graphite 또는 Logstash로 전송할 수 있는 기본 제공 소비자 기능을 추가하는 것을 고려하고 있습니다. 또한, 인간과 기계가 모두 패러서블할 수 있는 멋진 형식의 JSON을 포함해 보다 정교한 출력 형식을 추가할 예정입니다. 드라이버에 어떤 대상 형식을 추가하고 싶은지 알려주세요.

종속성 업그레이드 및 DCP 변경 사항

마이너 버전이 출시됨에 따라 종속 요소도 최신 버그 수정 버전으로 업그레이드하고 있습니다. 전체 종속성 목록은 다음과 같지만, 실제로는 RxJava만 명시적 종속성으로 노출되며, 다른 종속성은 모두 리패키징되어 사용자 환경에서 충돌 가능성이 있는 버전이 있어도 문제가 발생하지 않습니다.

2.2.0-dp2에서 2.1.4로 변경된 사항은 다음과 같습니다:

  • 1.0.4에서 1.0.13으로 RxJava 업그레이드
  • 4.0.25.Final에서 4.0.29.Final로 네티 변경
  • LMAX 디스럽터 3.3.0 ~ 3.3.2
  • 잭슨 2.4.2에서 2.5.4로 업데이트
  • 지연시간 버전 2.0.2의 새로운 기능

또한 Sergey는 Kafka 커넥터를 확장하는 작업에 몰두하고 있으며, 이를 통해 core-io 라이브러리의 DCP도 개선했습니다. 아직은 상당히 실험적인 단계이지만, 더 많은 사람들이 사용할 수 있는 단계에 가까워지고 있습니다.

GA를 향한 여정

아직 인큐베이팅 중인 또 다른 N1QL 기능은 (이름이) 준비된 문입니다. 이 코드는 이번 두 번째 개발자 프리뷰에서 업데이트되었지만 아직 변경될 수 있으므로 현재로서는 해당 API에 주석을 달았습니다. 완전한 기능 지원과 광범위한 문서가 제공될 때까지 조금만 기다려 주세요.

그 외에는 2.2.0의 할 일 목록에 큰 기능이 남아 있지 않기 때문에 소규모 수정, 안정성 향상, 그리고 가장 중요한 문서화 작업으로 방향을 전환하고 있습니다. 지금까지 출시된 릴리스 중 최고의 버전이 되기 위해서는 여러분의 의견이 필요합니다! 특히 새로운 기능과 N1QL 지원에 대한 피드백을 제공해 주세요. 여기, 포럼 또는 버그 트래커에 댓글을 달아 누락되거나 고장난 부분을 알려주세요!

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

작성자

게시자 마이클 니칭거

마이클 니칭어는 Couchbase의 수석 소프트웨어 엔지니어로 일하고 있습니다. 그는 JVM에서 최초의 완전 반응형 데이터베이스 드라이버 중 하나인 Couchbase Java SDK의 설계자이자 유지 관리자입니다. 또한 Couchbase Spark Connector를 작성하고 유지 관리하고 있습니다. Michael은 오픈 소스 커뮤니티에서 활발히 활동 중이며, RxJava 및 Netty와 같은 다양한 프로젝트에 기여하고 있습니다.

댓글 남기기

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

구축 시작

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

카펠라 무료 사용

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

연락하기

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