기본 콘텐츠로 건너뛰기

카우치베이스 요약1

⌘ 카우치베이스 서버 클러스터는 1개 부터 1024개 까지 노드로 구성 될 수 있다.

 

⌘ 노드 하나가 하나의 카우치베이스 인스턴스.

 

⌘ 데이터는 클러스터내 노드들에서 파티션되고 분산된다.

 

⌘ 카우치베이스 서버는 두개의 주요 컴포넌트가 있다.

  • 클러스터 매니저
    * 클러스터내 노드 설정
    * 노드간 데이터 리발란싱
    * 페일오버 후 데이터 복제 핸들링
    * 통계자료 수집
    * 로깅
    * 클라이언트가 어디서 데이터를 찾아야 하는지 알려줄 수 있게 클러스터 맵(Cluster map)을 업데이트하며 관리한다.
    * 어드민 API를 노출하고 있고 웹 매니징 콘솔도 있다.
    * 클러스터 매니저는 distributed, concurrent 한 처리에 적합 하도록 Erlang/OTP로 만들어졌다. 
  • 데이터 매니저
    * 데이터 저장소와 검색에대한 관리
    * 메모리 케시 레이어, Disk Persistence Mechanism, 쿼리 엔진을 포함하고 있다
    * 카우치베이스 클라이언트는 카우치베이스 매니저가 제공하는 클라이언트 맵을 사용한다. 이 맵을 통해 필요한 데이터를 가진 노드를 찾고 그 노드와 통신한다.

 

⌘ 데이터 스토리지

  • 카우치베이스는 데이터를 버킷에 관리한다.
    * 리소스와 연관된 로지컬한 그룹이다.
    * 오라클의 스키마 정도로 생각하면 된다.
  • 두가지의 버킷종류를 제공한다.
    * 카우치베이스
    * 멤케시
  • 멤케시 버킷은
    * 1MB 크기의 메모리에 바이너리로 데이터를 저장한다.    
    * 데이터를 디스크에 저장하지 않는다.    
    * Redundancy 하려고 노드에 데이터를 복제 하지 않는다.
  • 카우치베이스 버킷은
    * JSON Document, Primitive data 타입이나 Binary blob 형태로 20MB 까지 데이터를 저장 할 수 있다.
    * 데이터는 메모리에 캐시되고 디스크에 저장된다.
    * 데이터는 부하분산을 위해 클러스터 내에서 노드간에 동적으로 Rebalance된다. 
    * 데이터가 하나에서 세게까지 복제되도록 설정 가능하다.
    * Document는  vBuckets ( 가상버킷 )으로 클러스터내에 세분화 된다.

 

⌘ 당삼 Object-relational impedance mismatch 문제 있음

 

⌘ Auto Incremented ID 없으나 카운터에 쓸 수 있는 Atomic 숫자 증감 메커니즘은 있음. 키의 일부로 쓰임

product_salecountervalue, salecoutervalue가 카운터

 

⌘ 메타데이터

  • 데이터가 저장될 때 Expiration, Check-and-Set, Flags와 같은 동작을 위한 부가정보를 생성
  • 내부적으로 사용할 정보도 저장 ( Data format: JSON, Base64, Revision, Id)
  • 2.1 이상에서는 Document당 메타데이터 크기는 56 Bytes를 사용

 

⌘ Client Libraries Thread Safety

  • .NET, Java SDK는 커넥션을 재사용 할 때 Thread safety를 보장할 수 있다.
  • C client library는 Thread safe 하지 않다. #libcouchbase
    * Python, PHP, Ruby SDK는 libcouchbase 에 의존하고 있고, 여러 쓰레드가 같은 클라이언트 커넥션 객체에 엑세스 하지 않음
    * Node.js 역시 libcouchbase 사용하고, 근본적으로 싱글 쓰레드라 이슈가 아님. 클러스터와 같이 멀티코어 모듈을 사용한다면 카우치베이스 커넥션 객체를 각 쓰레드마다 생성해야 함

 

⌘ 카우치베이스 클라이언트 초기화

  • 클라이언트를 최초 생성할 때 클러스터 설정을 검색해야함.
    * 클러스터에 대한 정보를 받을 수 있는 HTTP API 있음
    * ServersList: 모든 서버와 서버들의 상태
    * vBucketsMap: vBuckets 리스트. 서버맵에서의 인덱스 정보등,,
  • Document를 저장하고 검색하려면 클라이언트는 1~1024사이의 번호를 받는다. ( Document가 저장된 vBcuket 번호 )
  • 클러스터 맵이 한번 생성된 이후로는 클라이언트는 HTTP Long Polling 같은걸로 node에 계속 query 하고 Noti 받음 ( 설정 바뀌면 바로 알겠지,, )
  • 당삼 클라이언트 커넥션 생성은 고비용이라 재사용 해야함

 

⌘ Document 저장과 검색

  • Key Access와 View Querying는 포트를 달리 사용함
  • 키 기반 사용은
    * Memcached binary protocol 사용
    * 대부분 카우치베이스 클라이언트 라이브러리는 멤케시 클라이언트 라이브러리 기반 [spymemcached](https://github.com/couchbase/spymemcached)
  • View 기반 사용은 ( 범위검색이라든지,, )
    * 로직이 반드시 클러스터의 서버들중 하나에서 실행 될 수 있어야 함
    * 노드를 클러스터에서 라운드로빈으로 선택하고 노드와 HTTP 통신해서 Operation함
    * 선택된 노드는 필요로 하는 모든 Item을 다른 노드에서 검색하고 Aggregation 하고 클라이언트에 응답줌
    * non-reduced, reduced, spatial view 3가지 view operation을 제공함

 

댓글