엔지니어링

카우치베이스와 하이퍼레저 패브릭의 통합: 기술 심층 분석

카우치베이스란 무엇인가요?

Couchbase는 유연하고 확장 가능한 고성능의 데이터 관리 솔루션을 제공하는 분산형 NoSQL 문서 데이터베이스입니다. 문서 데이터베이스의 장점과 키-값 저장소를 결합하여 최신 애플리케이션 개발에 적합합니다.

Couchbase의 주요 기능은 다음과 같습니다:

    1. 문서 중심 스토리지: Couchbase는 데이터를 JSON 문서로 저장하므로 유연한 스키마 설계가 가능합니다.
    2. 메모리 우선 아키텍처: 카우치베이스의 메모리 우선 접근 방식은 자주 액세스하는 데이터를 메모리에 보관하여 고성능을 보장합니다.
    3. 다차원 스케일링(MDS): Couchbase MDS는 쿼리, 인덱스 및 데이터 서비스를 개별적으로 확장할 수 있도록 하여 성능을 개선하고 비용을 절감합니다.
    4. 통합 캐싱 레이어: 내장된 캐싱 기능으로 자주 사용하는 데이터에 빠르게 액세스할 수 있습니다.
    5. SQL과 유사한 쿼리 언어(SQL++): Couchbase는 간편한 데이터 검색 및 조작을 위해 SQL 호환 쿼리 언어를 제공합니다.
    6. 고급 인덱싱: 기본, 보조, 공간 및 전체 텍스트 검색 인덱스를 포함한 다양한 인덱싱 옵션.
    7. 카펠라 칼럼: GenAI 기능을 갖춘 JSON 네이티브 NoSQL 분석 데이터베이스. 여러 소스의 데이터를 통합하고 복잡한 분석 쿼리를 실행하여 데이터에서 시의적절한 인사이트를 얻는 데 사용할 수 있습니다.

왜 카우치베이스에 패브릭을 사용해야 하나요?

하이퍼레저 패브릭 는 이미 기본 LevelDB 외에 상태 데이터베이스 옵션으로 CouchDB를 지원합니다. 하지만 Couchbase를 통합하면 몇 가지 이점이 있습니다:

    1. 향상된 확장성: 카우치베이스의 분산 아키텍처는 데이터 볼륨이 증가하는 엔터프라이즈 블록체인 네트워크에 필수적인 카우치DB보다 더 나은 수평적 확장을 가능하게 합니다.
    2. 성능 향상: 카우치베이스의 메모리 우선 설계는 처리량이 많은 블록체인 네트워크에 더 나은 성능을 제공합니다. 이는 복잡한 쿼리와 세계 상태에 대한 풍부한 쿼리에서 특히 중요합니다.
    3. 엔터프라이즈 기능: Couchbase는 다음과 같은 엔터프라이즈급 기능을 제공합니다:
      • 고급 모니터링 및 관리 도구
      • 기본 제공 재해 복구
      • 데이터센터 간 복제(XDCR)
      • 메모리 최적화 인덱스
      • 변경 데이터 캡처(CDC), 실시간 처리를 위한 문서 수준 변경 사항 기록 및 보존
    4. 풍부한 쿼리 지원: 카우치베이스는 월드 상태에 대한 풍부한 쿼리를 지원하지만 복잡한 쿼리에 대해 더 나은 성능 특성을 제공합니다.
    5. 동시성 향상: 카우치베이스는 트랜잭션이 많은 블록체인 네트워크에서 중요한 동시 작업을 카우치DB보다 더 효율적으로 처리합니다.
    6. 네이티브 SDK 통합: Couchbase는 여러 프로그래밍 언어에 걸친 강력한 SDK를 제공하므로 다양한 애플리케이션 및 서비스와 쉽게 통합할 수 있습니다.
    7. 분석: 카우치베이스 엔터프라이즈 분석의 컬럼형 스토리지를 사용해 패브릭 데이터에 대한 분석을 실행하여 대규모 데이터 세트를 빠르게 처리하고 운영 성능에 영향을 주지 않고 블록체인 트랜잭션에 대한 실시간 인사이트를 얻을 수 있습니다.

빠른 설정

이 설정은 테스트 목적으로만 사용되는 빠른 설정입니다. 이 설정에서는 다음을 사용합니다. 패브릭 샘플. 또한 다음을 시청할 수도 있습니다. 데모 비디오 🔗

1. 카우치베이스 서버 설정

    • 카우치베이스 서버를 설치하고, 다음 지침을 따르세요. 여기
    • Couchbase 웹 콘솔을 엽니다(일반적으로 다음 주소에서). http://localhost:8091)
    • 사용자에 대한 관리자 자격 증명을 설정합니다: 관리자 비밀번호를 입력합니다: 비밀번호@123
    • 다음과 같은 이름의 버킷 두 개를 만듭니다. fabric-1 그리고 fabric-2 (버킷을 생성하면 _기본값 범위 자체)

2. 패브릭 구성

  • 패브릭 샘플 리포지토리를 복제합니다:

  • 머신에 적합한 바이너리를 다운로드하고 패브릭 샘플 리포지토리에서 추출하세요: 
    • https://github.com/jaykumar-cb/fabric/releases 
    • https://github.com/hyperledger/fabric-ca/releases
  • MacOS를 사용하는 경우 다음 명령을 실행하여 격리에서 바이너리를 제거합니다:

  • 선호하는 텍스트 편집기에서 패브릭 샘플을 엽니다.
  • 이러한 파일을 만듭니다:

  • 네트워크.sh 파일을 수정하여 새 docker-compose-couchbase.yaml 파일을 사용하세요:

  • 패브릭 네트워크 시작

  • 이제 원하는 체인 코드를 배포하고 평소처럼 작업을 수행할 수 있지만, 망고 쿼리 대신 SQL++를 사용하도록 쿼리와 인덱스를 변경해야 합니다. 다음 섹션에 이에 대한 가이드가 포함되어 있습니다.

체인코드 쿼리 변경 사항

체인 코드의 쿼리가 망고 쿼리 대신 SQL++를 사용하도록 변경됩니다. 예시:

인덱스 변경

인덱스에도 비슷한 변화가 있을 것입니다. 폴더 구조는 동일하게 유지되며 쿼리 부분만 변경됩니다.

참고: 카우치베이스는 다양한 쿼리 패턴과 성능 최적화 시나리오를 위해 여러 유형의 인덱스를 지원합니다. 카우치베이스와 하이퍼레저 패브릭을 통합할 때, 이러한 유연한 인덱싱 옵션은 블록체인 상태 데이터베이스에 대한 복잡한 쿼리에 대해 상당한 성능 이점을 제공합니다.


💡 팁: 프로덕션 환경의 경우 각 피어마다 전용 Couchbase 인스턴스를 보유하는 것이 좋습니다. 스핀업해야 합니다. 각 피어당 하나의 인스턴스.

💡 팁: 아래에서 설정할 수 있는 구성 옵션은 다음과 같습니다. core.yaml 파일을 만듭니다:


에 구현된 인터페이스 statecouchbase 패키지

그리고 statecouchbase 패키지는 하이퍼레저 패브릭을 위한 카우치베이스 기반 상태 데이터베이스 역할을 할 수 있는 몇 가지 주요 인터페이스를 구현합니다. 이러한 인터페이스는 상태 데이터베이스 운영을 위한 컨트랙트를 정의하고 Fabric의 원장 기능을 위한 토대를 제공합니다.

핵심 데이터베이스 인터페이스

1. statedb.VersionedDBProvider

구현 주체 버전이 지정된 DB 공급자

이 인터페이스는 버전이 지정된 상태 데이터베이스의 팩토리 및 수명 주기 관리자 역할을 합니다. 여러 채널에 대한 데이터베이스 인스턴스를 만들고, 관리하고, 폐기하는 일을 담당합니다. 공급자는 상태 데이터베이스 서브시스템의 진입점 역할을 하며 여러 채널 데이터베이스 간의 조정을 처리합니다.

목적:

    • 여러 채널에서 데이터베이스 인스턴스 관리
    • 리소스 수명 주기 관리
    • 스냅샷 가져오기/내보내기 기능
    • 공급자 수준 구성 및 정리

2. statedb.VersionedDB

구현 주체 VersionedDB

이는 상태 데이터베이스 작업을 위한 기본 인터페이스이며, Fabric의 상태 관리에 필요한 핵심 기능을 나타냅니다. 체인코드 실행, 트랜잭션 유효성 검사, 블록 커밋에 필요한 필수 읽기/쓰기 작업을 제공합니다.

목적:

    • 핵심 상태 데이터 액세스 및 조작
    • MVCC(다중 버전 동시성 제어)를 위한 버전 추적
    • 트랜잭션 일괄 처리
    • 쿼리 실행 기능
    • 데이터베이스 일관성 및 저장점 관리

성능 최적화 인터페이스

3. 명시된b.대량 최적화 가능

구현 주체 VersionedDB

이 인터페이스는 블록 처리 중 대량 작업에 대한 성능 최적화를 제공합니다. 일괄 작업과 캐싱 메커니즘을 활성화하여 트랜잭션 유효성 검사 및 커밋 단계의 효율성을 개선하도록 설계되었습니다.

목적:

    • 트랜잭션 유효성 검사를 위한 대량 버전 로드
    • 자주 액세스하는 버전 데이터의 인메모리 캐싱
    • 블록 처리 중 성능 최적화
    • 유효성 검사 중 데이터베이스 왕복 횟수 감소

4. 명시된b.IndexCapable

구현 주체 VersionedDB

이 인터페이스는 사용자 정의 데이터베이스 인덱스를 지원하여 고급 쿼리 기능을 가능하게 합니다. 이를 통해 체인코드는 단순한 키-값 조회를 넘어 복잡한 쿼리를 정의하고 사용할 수 있으며, 이는 풍부한 쿼리 기능을 필요로 하는 비즈니스 애플리케이션에 특히 중요합니다.

목적:

    • 사용자 지정 인덱스 생성 및 관리
    • 복잡한 체인코드 쿼리 지원
    • 데이터베이스별 최적화 기능
    • 비즈니스 로직의 쿼리 성능 향상

이터레이터 인터페이스

5. 결과 반복기, 쿼리결과이터레이터, 풀스캔이터레이터

구현 주체 쿼리 스캐너, dbsScanner

이러한 인터페이스는 상태 데이터베이스에 대한 다양한 유형의 반복 기능을 제공합니다. 쿼리 결과의 효율적인 탐색, 범위 스캔, 전체 데이터베이스 스캔을 가능하게 하며 페이지 매김 및 북마크와 같은 기능을 지원합니다.

목적:

    • 대규모 결과 집합에 대한 효율적인 반복
    • 메모리 효율적인 데이터 처리
    • 대규모 쿼리에 대한 페이지 매김 지원
    • 스냅샷 생성 및 데이터 내보내기
    • 범위 스캔 기능

인터페이스 구성 및 디자인

그리고 statecouchbase 패키지는 인터페이스 구성을 통해 Fabric의 상태 데이터베이스 아키텍처를 잘 구조적으로 구현한 것을 보여줍니다. 그리고 VersionedDB 유형은 여러 인터페이스를 동시에 구현하여 제공합니다:

    • 계층화된 기능: 다음을 통한 핵심 운영 VersionedDB를 통해 선택적으로 최적화할 수 있습니다. 대량 최적화 가능 그리고 인덱스 가능
    • 우려 사항의 분리: 데이터베이스 수준 작업과 분리된 공급자 수준 작업
    • 확장성: 기존 기능을 중단하지 않고 새로운 인터페이스를 통해 추가 기능을 추가할 수 있습니다.
    • 성능 유연성: 옵션으로 제공되는 최적화 인터페이스를 통해 지원되는 경우 향상된 성능을 구현할 수 있습니다.

이러한 설계를 통해 Couchbase 구현은 풍부한 기능을 제공하는 동시에 Fabric의 데이터베이스 추상화 계층과의 호환성을 유지하여 배포 요구 사항에 따라 서로 다른 상태 데이터베이스 구현 간에 원활하게 전환할 수 있습니다.

💡 참고: 카우치베이스를 스테이트DB로 사용하는 피어는 카우치DB를 스테이트DB로 사용하는 피어와 호환됩니다.


결론

하이퍼레저 패브릭의 엔터프라이즈 블록체인 배포는 중요한 데이터베이스 딜레마에 직면합니다. LevelDB는 고성능을 제공하지만 최신 애플리케이션에 필수적인 풍부한 쿼리 기능을 제공하지 않으며, CouchDB는 JSON 쿼리를 제공하지만 최종 데이터 일관성, 쿼리를 제한하고 성능을 저하시키는 순수 문서 저장소 아키텍처로 인한 성능 병목 현상, 엄격한 환경을 가진 오픈 소스 프로젝트로서 제한된 기업 지원 등의 심각한 제한을 초래합니다. 

카우치베이스 서버는 조정 문제를 없애는 분산 ACID 트랜잭션으로 강력한 일관성을 제공하고, 다음을 통해 쿼리 성능을 향상시킴으로써 이러한 문제를 직접 해결합니다. SQL++ (일명 N1QL), 전문 서비스, 유연한 배포 옵션, 고급 관리 도구를 통해 CouchDB의 제한된 검색 API를 능가하는 포괄적인 엔터프라이즈 지원 서비스를 제공합니다. 

카우치베이스로 전환하는 조직은 일반적으로 밀리초 미만의 응답 시간, 더 높은 애플리케이션 가동 시간, 우수한 데이터센터 간 복제 기술을 경험하게 되므로, 성능과 기능 사이에서 타협하지 않고 높은 거래 처리량과 정교한 쿼리 기능을 모두 필요로 하는 엔터프라이즈 블록체인 배포에 이상적인 솔루션이 될 수 있습니다.

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

작성자

게시자 제이 쿠마르 - 소프트웨어 엔지니어, R&D

댓글 남기기

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

구축 시작

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

카펠라 무료 사용

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

연락하기

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