마이크로서비스가 등장했습니다. 를 지난 10년 동안 일반적인 아키텍처 패턴으로 사용했습니다.

이 접근 방식에서는 소규모의 자율적이고 느슨하게 결합된 서비스가 분산 네트워크를 통해 함께 작동합니다. 각 마이크로서비스는 일반적으로 특정 기능 및 비즈니스 경계로 구분되며 자체 프로세스에서 실행되고 다른 서비스와 독립적으로 관리 및 배포될 수 있습니다.

이 아키텍처는 기존의 모놀리식 애플리케이션에 비해 유연성이 뛰어나지만, 동시에 각 개별 마이크로서비스가 필요한 곳에 복원력, 확장성, 지속성을 제공해야 합니다.

다음 글에서는 마이크로서비스 아키텍처의 데이터 관리 측면에 초점을 맞추고자 합니다. 카우치베이스 는 데이터 레이어에 짧은 지연 시간, 복원력, 확장성을 제공합니다.

통합 캐싱 및 탄력적인 확장성을 통한 단순성

마이크로서비스는 명시적인 비즈니스 도메인에 바인딩됩니다.

예를 들어 도메인은 전자상거래 애플리케이션의 제품, 캠페인, 결제 또는 사용자 프로필 서비스일 수 있습니다. 서로 다른 마이크로서비스가 협업하여 애플리케이션을 구성하지만 동시에 완전히 독립적입니다. 종종 여러 팀이 각 서비스를 자체 릴리스 주기와 CI/CD 파이프라인을 사용하여 독립적으로 개발합니다. 그 결과 보다 민첩하고 신속한 개발이 가능합니다.

A microservices architecture of an ecommerce application

위 시나리오에서 각 마이크로서비스는 도메인 데이터를 소유하고 API를 통해 다른 서비스에서 이 데이터를 사용할 수 있도록 합니다. 결제 트랜잭션이 발생하는 동안 결제 서비스는 사용자 프로필 서비스에서 해당 고객 데이터를 확인할 수 있습니다. 이 마이크로서비스 아키텍처 패턴은 뛰어난 유연성을 제공하며 여러 애플리케이션에서 마이크로서비스를 재사용할 수 있게 해줍니다.

탄력적이고 확장 가능한 서비스를 구축하는 것은 매우 중요합니다. 상태 비저장 마이크로서비스의 경우 이는 매우 간단합니다. 그러나 데이터를 보존해야 하는 경우에는 궁극적으로 마이크로서비스와 함께 확장되어 서비스 사용량 증가를 지원하는 탄력적인 데이터베이스 아키텍처가 필요합니다.

Couchbase는 데이터에 대한 짧은 지연 시간 액세스를 위한 통합 캐싱뿐만 아니라 탄력적인 확장성을 제공하는 메모리 우선 아키텍처를 기반으로 구축되었습니다. 따라서 마이크로서비스 운영을 중단하지 않고도 Couchbase 서비스를 개별적으로 확장할 수 있습니다.

데이터 볼륨이 증가하면 Couchbase 데이터 노드를 더 추가하기만 하면 됩니다. 쿼리 용량이 추가로 필요한 경우, 클러스터에 Couchbase 쿼리 노드를 추가하기만 하면 됩니다.

이러한 수준의 다차원 확장을 통해 다양한 Couchbase 서비스가 시스템 리소스를 두고 경쟁할 필요가 없습니다. 대신 기본 인프라는 서비스별 요구 사항에 맞게 조정됩니다. 예를 들어 카우치베이스 쿼리 서비스 는 메모리가 많은 컴퓨팅 인스턴스를 사용하여 통합 캐시에서 최대한 많은 데이터를 제공하고, 추가 코어가 있는 노드를 사용하여 더 많은 쿼리를 지원합니다.

A Couchbase Server cluster featuring Query, Index and Data Service nodes

Couchbase의 확장성 및 리소스 격리

또한 탄력적이고 분산된 Couchbase 아키텍처는 데이터의 복제본을 유지하여 고가용성을 보장합니다. 노드에 장애가 발생하면 Couchbase는 자동으로 페일오버하여 지속적인 운영을 보장합니다.

Couchbase의 마이크로서비스에 대한 일반적인 패턴

마이크로서비스의 주요 특징 중 하나는 느슨한 결합으로 개별적으로 개발, 배포, 액세스 제어 및 확장이 가능하다는 점입니다.

느슨한 결합을 위해서는 기본 데이터베이스 인프라가 개별 마이크로서비스에 대한 데이터 분리를 지원해야 합니다. 이는 마이크로서비스별로 개별 데이터베이스 인스턴스를 실행하거나 데이터의 관련 부분에 대한 액세스를 제어하는 방식으로 이루어질 수 있습니다.

기존의 관계형 데이터베이스는 데이터베이스 스키마를 사용하여 격리를 지원하지만, 확장하기가 어렵고 JSON 데이터 모델의 유연성이 부족하며 무엇보다도 데이터베이스 인프라가 중단될 경우 단일 장애 지점이 됩니다. 이는 마이크로서비스 아키텍처를 설계할 때 고려해야 할 중요한 측면으로, 중단 시 다음과 같은 문제가 발생할 수 있기 때문입니다. 심각 동일한 데이터베이스를 공유하는 모든 마이크로서비스에 영향을 미칩니다.

Couchbase는 마이크로서비스용으로 설계되었습니다. 확장성과 복원력이 뛰어난 분산형 데이터베이스입니다. 유연성이 뛰어나고 여러 수준의 격리를 제공하여 동일한 Couchbase 클러스터에서 최대 1,000개의 마이크로서비스를 지원할 수 있습니다.

카우치베이스 서버 7 의 개념을 소개합니다. 범위 그리고 컬렉션.

범위와 컬렉션은 데이터를 정리하고 격리하는 버킷 내에 생성되는 논리적 컨테이너입니다. 버킷은 개별 메모리 할당량, 디스크 및 I/O 우선순위를 구성할 수 있는 키 공간입니다. 이러한 설정은 부분적인 리소스 격리를 제공합니다. 버킷, 범위, 컬렉션은 역할 기반 액세스 제어, 데이터센터 간 복제(XDCR), 백업/복원 등 모든 수준에서 독립적인 배포 및 수명주기 관리를 제공합니다.

An architecture diagram of Couchbase Buckets, Scopes and Collections

이러한 기능을 통해 개발팀은 더 큰 유연성을 확보하고 다양한 패턴의 마이크로서비스를 만들 수 있습니다. 가장 일반적인 패턴 중 네 가지를 자세히 살펴보겠습니다.

패턴 1: 마이크로서비스별 전용 카우치베이스 클러스터

전용 Couchbase 클러스터를 사용하면 물리적 격리를 통해 독립적인 확장이 가능합니다. 이는 실행 가능한 옵션이지만 수백, 수천 개의 마이크로서비스를 실행할 때는 실용적이지 않을 수 있습니다.

An architecture with a dedicated Couchbase Server cluster per microservice

패턴 2: 버킷을 사용한 격리

이 패턴에서는 버킷을 사용하여 마이크로서비스를 격리합니다.

전용 클러스터에 비해 버킷은 메모리 할당, 디스크 I/O 및 복제본을 포함한 부분적인 리소스 격리를 제공합니다. 그러나 Couchbase 클러스터당 버킷 수는 제한되어 있으므로 단일 클러스터에서 지원되는 마이크로서비스의 수는 30개를 초과할 수 없습니다.

서비스 간에 데이터를 격리해야 하는 엄격한 요구 사항이 없거나 각 마이크로서비스가 자체 데이터 집합으로만 작동하도록 하는 다른 조치가 있는 경우에는 여러 마이크로서비스가 동일한 버킷을 공유할 수 있습니다. 일반적으로 버킷 공유는 문서 키 또는 문서의 추가 유형 속성으로 문서를 식별하여 이루어집니다.

사실 이 패턴은 이전에도 일반적으로 사용되었습니다. 카우치베이스 7의 범위 및 컬렉션 도입.

A Couchbase cluster with microservices isolated into Buckets

패턴 3: 컬렉션을 사용한 격리

보다 강력한 마이크로서비스 배포 패턴은 다음을 활용하는 것입니다. 컬렉션.

주변 버킷은 여전히 리소스 격리를 제공하지만, 컬렉션은 마이크로서비스에 대한 액세스를 논리적으로 격리하고 제어합니다. 이를 통해 단일 Couchbase 클러스터에서 최대 1000개의 마이크로서비스를 실행할 수 있습니다. 아래 그림에서 각 마이크로서비스는 전용 컬렉션을 사용하고 있습니다. Couchbase 역할 기반 액세스 제어는 각 마이크로서비스가 해당 컬렉션의 자체 데이터 세트에만 액세스하도록 보장합니다.

Microservices isolation using Couchbase Collections in a single Bucket

패턴 4: 버킷 및 컬렉션을 사용한 격리

이 마이크로서비스 패턴은 이전 패턴과 비슷하지만 모든 컬렉션을 단일 버킷에 넣는 대신 여러 버킷으로 그룹화합니다.

이 패턴을 사용하면 포함된 마이크로서비스 및/또는 컬렉션의 특성에 따라 버킷을 구성할 수 있습니다. 이 접근 방식을 사용하면 각 개별 버킷 및 포함된 컬렉션에 대한 메모리 할당 및 복제본 수와 같은 물리적 격리를 달성할 수 있습니다.

Couchbase Buckets and Collections to isolate microservices

Couchbase에서 데이터를 구조화하고 격리하는 데 가장 좋은 단일 솔루션은 없습니다. 하지만 버킷, 범위 및 컬렉션을 사용하면 마이크로서비스 아키텍처의 특정 요구 사항을 쉽게 충족할 수 있는 무한한 옵션이 있습니다.

컨테이너화된 배포

의심의 여지가 없습니다: 오늘날의 개발 환경은 마이크로서비스로 변화하고 있습니다. 동시에 업계는 Kubernetes와 OpenShift를 통해 관리되는 컨테이너화된 배포로 이동하고 있습니다.

Couchbase를 사용하면 자율적이고 완벽하게 관리되는 상태 저장 데이터베이스 애플리케이션이 동일한 Kubernetes 플랫폼의 마이크로서비스 옆에서 실행됩니다. 이 접근 방식은 완벽한 격리를 제공하고 자동 장애 조치와 클러스터의 자동 확장을 통해 DevOps 워크로드를 줄여줍니다.

자세한 내용은 카우치베이스 자율 운영자.

작성자

게시자 마리안 풀, 솔루션 엔지니어

Marian Puhl은 북유럽 지역 Couchbase의 솔루션 엔지니어입니다.