TTL 및 만료 알림

카우치베이스에는 TTL (Time To Live)를 각 문서의 메타 데이터 필드의 일부로 추가할 수 있습니다. 모든 클라이언트 SDK에는 이 값을 설정/조회/터치할 수 있는 기능이 포함되어 있습니다. 이 값은 30일 이내에 만료되는 문서의 경우 '문서의 유효 기간(초)'으로 설정됩니다. 30일을 초과하는 값의 경우 유닉스 에포크 시간 값을 전달해야 합니다. TTL은 고성능 세션 저장소 및 캐싱 애플리케이션에서 자주 사용됩니다. 문서가 만료될 때 세션이 어떻게 되는지는 애플리케이션 계층에서 관리하기가 번거롭고 문제가 될 수 있습니다. Couchbase Server의 고성능과 유연성을 활용하여 문서 만료에 대한 콜백을 제공한다면 어떨까요? Couchbase Labs의 "만료 알림"을 소개합니다. 애플리케이션, 소스 코드 및 지침은 다음에서 다운로드할 수 있습니다. 깃허브의 카우치바스랩 리포지토리로 이동합니다.**

카우치베이스 랩스 만료 알림기

이 애플리케이션은 node.js 및 express의 작은 애플리케이션 인스턴스를 실행합니다. 이 애플리케이션은 REST API를 통해 구성 및 액세스됩니다. 왜 Node.js인가? Node.js는 Couchbase에서 잘 지원되는 애플리케이션 플랫폼으로, 매우 가볍고 설치 공간을 효율적으로 관리하며 RESTful 애플리케이션에 매우 적합합니다. 만료 알림은 직접 호출하거나 지정된 시간 간격 내에 만료 콜백을 자동으로 수행하도록 구성할 수 있습니다. 만료 콜백 기능은 지정된 시간 내에 만료되는 문서의 메타 ID와 만료 시간(또는 만료까지 남은 시간(초))을 반환합니다.

예를 들어 서비스를 직접 폴링하는 애플리케이션에서 만료 콜백을 받으려면 Couchbase에서 300초 만료로 문서가 정의됩니다:


키(메타 아이디): 승리

{
"가치": "오버 드라이브와 트윈 웨버 카뷰레터가 장착된 1966년형 트라이엄프 스핏파이어 마크 II 4단."
}

만료 알림이 실행 중이면 상대 시간이 true로 설정되고(이에 대해서는 잠시 후에 자세히 설명합니다) 10초 후에 REST 엔드포인트가 호출되어 만료 콜백을 폴링합니다:

http://servername:3000/poll/300

JSON 객체가 반환됩니다:

{triumph:290}

만료 알림이 작동 방식

만료 알림은 node.js가 설치된 모든 서버에서 실행할 수 있습니다. 만료 알림이 설치된 후 ( 깃허브의 카우치바스랩 리포지토리에 있습니다.), 애플리케이션을 시작해야 합니다. 애플리케이션이 설치된 루트 디렉토리에서 다음을 실행합니다.

"npm start"

기본적으로 애플리케이션은 포트 3000을 사용하여 실행됩니다. 애플리케이션이 실행 중인지 테스트하려면 다음 REST 명령을 호출합니다:

"http://:3000/status"??????

카우치베이스 클러스터와 통신하도록 서비스를 구성하려면 다음 REST 명령을 호출하세요:

“http://:3000/setup/server/192.168.60.101/8091/beer-sample”

위의 REST 명령은 다음과 같이 정의됩니다: /설정/서버/:서버/:포트/:버킷 [RETURNS: {JSON OBJECT} 상태 변경 포함].  이 REST 명령을 호출하면 다음을 수행합니다:

  • 스마트 클라이언트를 인스턴스화하여 카우치베이스 클러스터와 통신합니다.
  • 만료 시간 동안만 메타 데이터를 보관하는 경량 인덱스를 카우치베이스에 설정합니다.

만료 콜백을 애플리케이션 서버로 보내도록 서비스의 엔드포인트를 설정하려면 다음 REST 명령을 사용하세요:

"http://:3000/setup/endpoint//3000/receive_callback"

위의 REST 명령은 다음과 같이 정의됩니다: /설정/엔드포인트/:호스트 이름/:포트/:경로/ [반환: {JSON 개체} 상태 변경] 참고: "https" 플래그는 만료 알림이 https 프로토콜을 통해 콜백을 전송하는 경우에만 사용됩니다. 자세한 내용은 문서를 참조하세요.

다음 30초 이내에 만료되도록 설정된 문서에 대해 위에 정의된 엔드포인트로 콜백을 보내기 시작하려면 그 후 30초마다 다음 REST 명령을 사용하세요:

"http://:3000/setup/poll/30/loop"

위의 REST 명령은 다음과 같이 정의됩니다:/설정/폴/:간격/:루프 [반환: 상태 변경이 있는 {JSON 개체}] 이 명령은 메타 ID와 해당 메타 ID의 만료일을 UNIX 에포크 시간(문서가 만료되도록 설정된 1/1/1970 이후의 초 수)으로 표시한 JSON 객체를 전송합니다. 문서가 만료될 때까지의 시간(초)을 원하는 경우 아래 명령을 사용하세요.

UNIX 에포크 시간 대신 문서가 만료될 때까지의 시간(초)을 반환하려면 다음 명령을 사용하세요:

"http://:3000/setup/relative/true"

위의 REST 명령은 다음과 같이 정의됩니다: /설정/상대/:bool [반환: 상태 변경이 있는 {JSON 개체}]

** 면책 조항: Couchbase Labs는 연구 및 개발 목적으로만 실험용 코드를 제공합니다. Couchbase Labs의 코드 및 애플리케이션은 Couchbase 지원 계약에 따라 지원되지 않으며 어떠한 종류의 보증도 없이 있는 그대로 제공됩니다.  

작성자

게시자 토드 그린스타인

토드 그린스타인은 카우치베이스의 솔루션 아키텍트입니다. Todd는 API 설계, 아키텍처, 데이터 모델링, nodejs 및 골랑 개발을 전문으로 합니다.

댓글 하나

  1. 아주 좋은 기사였고 이 기능이 마음에 듭니다.

    하지만 제가 정말 원하는 것은 특정 문서가 만료되면 CouchBase 자체에서 다음과 같은 기능을 트리거하는 내장 기능입니다:
    http://TARGET_TO_RECEIVE/:bucket_name/:key
    (선택 사항) 삭제 후보에 대한 요청 본문과 함께.

    TARGET_TO_RECEIVE는 CouchBase 관리자를 통해 구성합니다.

    1. 향후 릴리스에서 이러한 기능을 구현할 계획이 있나요?

    또는 CB 자체가 만료 된 문서로 로그를 남기면 큰 도움이 될 것이지만 다음 링크에서 별도의 만료 로그를 찾을 수 없습니다:
    http://docs.couchbase.com/admi

    2. CB는 문서 만료 로그를 남기나요? 더 좋은 방법은 이러한 로그를 별도의 로그 파일(예: expired.log)에 남기는 것일까요?

댓글 남기기