관계형 마이닝 모델과 NoSQL 데이터 비교

이 콘텐츠는 .NET Docs 또는 오프라인으로 읽을 수 있는 다운로드 가능한 무료 PDF로 제공되는 Azure용 클라우드 네이티브 .NET 애플리케이션 설계 eBook에서 발췌한 것입니다.

Cloud Native .NET apps for Azure eBook cover thumbnail.

관계형 및 NoSQL은 클라우드 네이티브 앱에서 일반적으로 구현되는 두 가지 유형의 데이터베이스 시스템입니다. 서로 다르게 빌드되고, 데이터를 다르게 저장하고, 다르게 액세스합니다. 이 섹션에서는 두 가지 모두를 살펴보겠습니다. 이 장 뒷부분에서는 NewSQL이라는 새로운 데이터베이스 기술을 살펴보겠습니다.

관계형 데이터베이스는 수십 년 동안 널리 사용되는 기술이었습니다. 성숙하고, 입증되고, 널리 구현됩니다. 경쟁 데이터베이스 제품, 도구 및 전문 지식이 풍부합니다. 관계형 데이터베이스는 관련 데이터 테이블의 저장소를 제공합니다. 이러한 테이블에는 고정 스키마가 있고, SQL(구조적 쿼리 언어)를 사용하여 데이터를 관리하고 ACID 보증을 지원합니다.

SQL 없는 데이터베이스는 고성능 비관계형 데이터 저장소를 나타냅니다. 사용 편의성, 확장성, 복원력 및 가용성 특성에 탁월합니다. 정규화된 데이터의 테이블을 조인하는 대신, NoSQL은 구조화되지 않은 데이터 또는 반구조화된 데이터를 키-값 쌍 또는 JSON 문서에 저장하는 경우가 많습니다. SQL 없는 데이터베이스는 일반적으로 단일 데이터베이스 파티션 범위를 벗어나는 ACID 보장을 제공하지 않습니다. 하위 초 응답 시간이 필요한 대용량 서비스는 NoSQL 데이터 저장소를 선호합니다.

분산 클라우드 네이티브 시스템에 대한 NoSQL 기술의 영향을 과장할 수 없습니다. 이 공간에서 새로운 데이터 기술의 확산으로 인해 한때 관계형 데이터베이스에만 의존했던 솔루션이 중단되었습니다.

NoSQL 데이터베이스에는 데이터에 액세스하고 관리하기 위한 여러 가지 모델이 포함되어 있으며, 각 모델은 특정 사용 사례에 적합합니다. 그림 5-9는 네 가지 일반적인 모델을 제공합니다.

NoSQL data models

그림 5-9: NoSQL 데이터베이스에 대한 데이터 모델

모델 특징
문서 저장소 데이터 및 메타데이터는 데이터베이스 내의 JSON 기반 문서에 계층적으로 저장됩니다.
키 값 저장소 NoSQL 데이터베이스 중 가장 간단하며, 데이터가 키-값 쌍 컬렉션으로 표시됩니다.
와이드-열 저장소 관련 데이터가 단일 열 내부에 중첩 키/값 쌍 세트로 저장됩니다.
그래프 저장소 데이터가 그래프 구조에 노드, 에지 및 데이터 속성으로 저장됩니다.

CAP 정리

이러한 유형의 데이터베이스 간의 차이점을 이해하는 방법으로 상태를 저장하는 분산 시스템에 적용되는 원칙 집합인 CAP 정리를 고려합니다. 그림 5-10은 CAP 정리의 세 가지 속성을 보여줍니다.

CAP theorem

그림 5-10. CAP 정리

정리에 따르면 분산 데이터 시스템은 일관성, 가용성 및 파티션 허용 오차 간에 장차를 제공합니다. 또한 모든 데이터베이스는 다음 세 가지 속성 중 가지만 보장할 수 있습니다.

  • 일관성. 모든 복제본이 업데이트될 때까지 시스템에서 요청을 차단해야 하는 경우에도 클러스터의 모든 노드는 최신 데이터로 응답합니다. 현재 업데이트 중인 항목에 대해 "일관된 시스템"을 쿼리하는 경우 모든 복제본이 성공적으로 업데이트될 때까지 해당 응답을 기다립니다. 그러나 최신 데이터를 받게 됩니다.

  • 가용성 모든 노드는 해당 응답이 최신 데이터가 아니더라도 즉각적인 응답을 반환합니다. 업데이트 중인 항목에 대해 "사용 가능한 시스템"을 쿼리하는 경우 해당 순간에 서비스에서 제공할 수 있는 최상의 답변을 얻을 수 있습니다.

  • 파티션 허용 오차입니다. 복제된 데이터 노드가 다른 복제된 데이터 노드와의 연결에 실패하거나 끊어지더라도 시스템이 계속 작동하도록 보장합니다.

CAP 정리는 네트워크 파티션 중에 일관성 및 가용성 관리와 관련된 장단 부분을 설명합니다. 그러나 네트워크 파티션이 없는 경우 일관성 및 성능과 관련된 절충이 존재합니다. CAP 정리는 종종 더 포괄적으로 절충을 설명하기 위해 PACELC 로 확장됩니다.

관계형 데이터베이스는 일반적으로 일관성과 가용성을 제공하지만 파티션 허용 오차는 제공하지 않습니다. 일반적으로 컴퓨터에 더 많은 리소스를 추가하여 단일 서버에 프로비전되고 수직으로 확장됩니다.

많은 관계형 데이터베이스 시스템은 주 데이터베이스의 복사본을 다른 보조 서버 인스턴스로 만들 수 있는 기본 제공 복제 기능을 지원합니다. 쓰기 작업은 주 인스턴스에 만들어지고 각 보조 데이터베이스에 복제됩니다. 실패 시 주 인스턴스는 보조 인스턴스로 장애 조치(failover)하여 고가용성을 제공할 수 있습니다. 보조 데이터베이스를 사용하여 읽기 작업을 배포할 수도 있습니다. 쓰기 작업은 항상 주 복제본에 대해 진행되지만 읽기 작업을 보조 복제본으로 라우팅하여 시스템 부하를 줄일 수 있습니다.

분할과 같은 여러 노드에서 데이터를 수평으로 분할할 수도 있습니다. 그러나 분할은 쉽게 통신할 수 없는 여러 부분에 데이터를 침을 뱉어 운영 오버헤드를 크게 증가합니다. 관리하는 데 비용이 많이 들고 시간이 오래 걸릴 수 있습니다. 테이블 조인, 트랜잭션 및 참조 무결성을 포함하는 관계형 기능을 사용하려면 분할된 배포에서 성능 저하가 매우 필요합니다.

복제가 동기적으로 또는 비동기적으로 발생하는지 여부를 구성하여 복제 일관성 및 복구 지점 목표를 조정할 수 있습니다. 데이터 복제본이 "매우 일관적" 또는 동기 관계형 데이터베이스 클러스터에서 네트워크 연결을 끊는 경우 데이터베이스에 쓸 수 없습니다. 시스템은 해당 변경 내용을 다른 데이터 복제본에 복제할 수 없으므로 쓰기 작업을 거부합니다. 트랜잭션이 완료되기 전에 모든 데이터 복제본을 업데이트해야 합니다.

NoSQL 데이터베이스는 일반적으로 고가용성 및 파티션 허용 오차를 지원합니다. 종종 상용 서버에서 수평으로 확장됩니다. 이 접근 방식은 지리적 지역 내 및 지역 간에 비용을 절감하는 엄청난 가용성을 제공합니다. 이러한 컴퓨터 또는 노드에서 데이터를 분할하고 복제하여 중복성 및 내결함성을 제공합니다. 일관성은 일반적으로 합의 프로토콜 또는 쿼럼 메커니즘을 통해 조정됩니다. 관계형 시스템에서 동기 복제와 비동기 복제 간의 절충을 탐색할 때 더 많은 제어를 제공합니다.

데이터 복제본이 "고가용성" NoSQL 데이터베이스 클러스터에서 연결이 끊어지는 경우에도 데이터베이스에 대한 쓰기 작업을 완료할 수 있습니다. 데이터베이스 클러스터는 쓰기 작업을 허용하고 사용할 수 있게 되면 각 데이터 복제본을 업데이트합니다. 여러 쓰기 가능한 복제본을 지원하는 NoSQL 데이터베이스는 복구 시간 목표를 최적화할 때 장애 조치(failover)가 필요하지 않도록 하여 고가용성을 더욱 강화할 수 있습니다.

최신 NoSQL 데이터베이스는 일반적으로 시스템 디자인의 기능으로 분할 기능을 구현합니다. 파티션 관리는 종종 데이터베이스에 기본 제공되며, 파티션 키라고도 하는 배치 힌트를 통해 라우팅을 수행합니다. 유연한 데이터 모델을 사용하면 NoSQL 데이터베이스가 스키마 관리 부담을 낮추고 데이터 모델 변경이 필요한 애플리케이션 업데이트를 배포할 때 가용성을 향상시킬 수 있습니다.

고가용성 및 대규모 확장성은 관계형 테이블 조인 및 참조 무결성보다 비즈니스에 더 중요한 경우가 많습니다. 개발자는 사가, CQRS 및 비동기 메시징과 같은 기술 및 패턴을 구현하여 최종 일관성을 수용할 수 있습니다.

요즘 CAP 정리 제약 조건을 고려할 때는 주의해야 합니다. NewSQL이라는 새로운 유형의 데이터베이스가 등장하여 관계형 데이터베이스 엔진을 확장하여 수평 확장성과 NoSQL 시스템의 확장성 있는 성능을 모두 지원합니다.

관계형 및 NoSQL 시스템에 대한 고려 사항

특정 데이터 요구 사항에 따라 클라우드 네이티브 기반 마이크로 서비스는 관계형, NoSQL 데이터 저장소 또는 둘 다를 구현할 수 있습니다.

다음과 같은 경우 NoSQL 데이터 저장소를 고려합니다. 다음과 같은 경우 관계형 데이터베이스를 고려합니다.
대규모로 예측 가능한 대기 시간이 필요한 대량 워크로드가 있습니다(예: 초당 수백만 개의 트랜잭션을 수행하는 동안 밀리초 단위로 측정된 대기 시간). 일반적으로 워크로드 볼륨은 초당 수천 개의 트랜잭션에 적합합니다.
데이터가 동적이며 자주 변경됩니다. 데이터는 고도로 구조화되어 있으며 참조 무결성이 필요합니다.
관계는 정규화되지된 데이터 모델일 수 있습니다. 관계는 정규화된 데이터 모델에서 테이블 조인을 통해 표현됩니다.
데이터 검색은 간단하며 테이블 조인 없이 표현됩니다. 복잡한 쿼리 및 보고서 작업
데이터는 일반적으로 여러 지역에서 복제되며 일관성, 가용성 및 성능을 더 세부적으로 제어해야 합니다. 데이터는 일반적으로 중앙 집중화되거나 비동기적으로 지역을 복제할 수 있습니다.
애플리케이션이 퍼블릭 클라우드와 같은 상용 하드웨어에 배포됩니다. 애플리케이션이 대규모의 고급 하드웨어에 배포됩니다.

다음 섹션에서는 클라우드 네이티브 데이터를 저장하고 관리하기 위해 Azure 클라우드에서 사용할 수 있는 옵션을 살펴봅니다.

Database as a Service

시작하려면 Azure 가상 머신을 프로비전하고 각 서비스에 대해 원하는 데이터베이스를 설치할 수 있습니다. 환경을 완전히 제어할 수 있지만 클라우드 플랫폼의 많은 기본 제공 기능을 포기해야 합니다. 또한 각 서비스에 대한 가상 머신 및 데이터베이스를 관리할 책임이 있습니다. 이 방법은 시간이 오래 걸리고 비용이 많이 들 수 있습니다.

대신 클라우드 네이티브 애플리케이션은 DBaaS(Database as a Service)로 노출되는 데이터 서비스를 선호합니다. 클라우드 공급업체에서 완벽하게 관리되는 이러한 서비스는 기본 제공 보안, 확장성 및 모니터링을 제공합니다. 서비스를 소유하는 대신 단순히 지원 서비스로 사용합니다. 공급자는 대규모로 리소스를 운영하며 성능 및 유지 관리에 대한 책임이 있습니다.

고가용성을 달성하기 위해 클라우드 가용성 영역 및 지역에서 구성할 수 있습니다. 모두 Just-In-Time 용량과 종량제 모델을 지원합니다. Azure는 다양한 종류의 관리되는 데이터 서비스 옵션을 특징으로 하며, 각 옵션에는 특정 이점이 있습니다.

먼저 Azure에서 사용할 수 있는 관계형 DBaaS 서비스를 살펴보겠습니다. 몇 가지 오픈 소스 옵션과 함께 Microsoft의 주력 SQL Server 데이터베이스를 사용할 수 있습니다. 그런 다음, Azure의 NoSQL 데이터 서비스에 대해 설명합니다.

Azure 관계형 데이터베이스

관계형 데이터가 필요한 클라우드 네이티브 마이크로 서비스의 경우 Azure는 그림 5-11에 표시된 4개의 관리형 DBaaS(관계형 데이터베이스 as a Service) 제품을 제공합니다.

Managed relational databases in Azure

그림 5-11. Azure에서 사용할 수 있는 관리형 관계형 데이터베이스

이전 그림에서는 각 인프라가 추가 비용 없이 주요 기능을 제공하는 공통 DBaaS 인프라에 어떻게 배치되는지 확인합니다.

이러한 기능은 많은 수의 데이터베이스를 프로비전하지만 관리 리소스가 제한된 조직에서 특히 중요합니다. 처리 코어, 메모리 및 기본 스토리지의 양을 선택하여 몇 분 안에 Azure 데이터베이스를 프로비전할 수 있습니다. 즉시 데이터베이스의 크기를 조정하고 가동 중지 시간이 거의 또는 전혀 없이 리소스를 동적으로 조정할 수 있습니다.

Azure SQL Database

Microsoft SQL Server 전문 지식을 갖춘 개발 팀은 Azure SQL Database 고려해야 합니다. Microsoft SQL Server 데이터베이스 엔진 기반으로 하는 완전히 관리되는 관계형 DBaaS(Database-as-a-Service)입니다. 이 서비스는 온-프레미스 버전의 SQL Server 있는 많은 기능을 공유하고 안정적인 최신 버전의 SQL Server 데이터베이스 엔진 실행합니다.

클라우드 네이티브 마이크로 서비스에서 사용하기 위해 Azure SQL Database 세 가지 배포 옵션과 함께 사용할 수 있습니다.

  • 단일 데이터베이스는 Azure 클라우드의 Azure SQL Database 서버에서 실행되는 완전히 관리되는 SQL Database 나타냅니다. 데이터베이스는 기본 데이터베이스 서버에 대한 구성 종속성이 없으므로 포함된 것으로 간주됩니다.

  • Managed Instance 온-프레미스 SQL Server 거의 100% 호환성을 제공하는 Microsoft SQL Server 데이터베이스 엔진 완전히 관리되는 인스턴스입니다. 이 옵션은 최대 35TB의 더 큰 데이터베이스를 지원하며 더 나은 격리를 위해 Azure Virtual Network 배치됩니다.

  • Azure SQL Database 서버리스는 워크로드 수요에 따라 자동으로 스케일링되는 단일 데이터베이스에 대한 컴퓨팅 계층입니다. 초당 사용되는 컴퓨팅 양에 대해서만 청구됩니다. 이 서비스는 비활성 기간과 함께 간헐적으로 예측할 수 없는 사용 패턴이 있는 워크로드에 적합합니다. 또한 서버리스 컴퓨팅 계층은 비활성 기간 동안 데이터베이스를 자동으로 일시 중지하므로 스토리지 요금만 청구됩니다. 활동이 반환되면 자동으로 다시 시작됩니다.

기존 Microsoft SQL Server 스택 외에도 Azure는 인기 있는 세 개의 오픈 소스 데이터베이스의 관리되는 버전도 제공합니다.

Azure의 오픈 소스 데이터베이스

오픈 소스 관계형 데이터베이스는 클라우드 네이티브 애플리케이션에 널리 사용되고 있습니다. 많은 기업에서는 특히 비용 절감을 위해 상업용 데이터베이스 제품보다 선호합니다. 많은 개발 팀은 유연성, 커뮤니티 지원 개발 및 도구 및 확장 에코시스템을 활용합니다. 오픈 소스 데이터베이스를 여러 클라우드 공급자에 배포하여 "공급업체 잠금"의 문제를 최소화할 수 있습니다.

개발자는 Azure VM에서 오픈 소스 데이터베이스를 쉽게 자체 호스팅할 수 있습니다. 이 접근 방식은 모든 권한을 제공하는 동시에 데이터베이스 및 VM의 관리, 모니터링 및 유지 관리를 위한 후크를 제공합니다.

그러나 Microsoft는 널리 사용되는 여러 오픈 소스 데이터베이스를 완전 관리 형 DBaaS 서비스로 제공하여 Azure를 "오픈 플랫폼"으로 유지하려는 노력을 계속하고 있습니다.

Azure Database for MySQL

MySQL 은 오픈 소스 관계형 데이터베이스이며 LAMP 소프트웨어 스택에 빌드된 애플리케이션의 핵심 요소입니다. 읽기가 많은 워크로드에 널리 선택된 이 워크로드는 Facebook, Twitter 및 YouTube를 비롯한 많은 대규모 조직에서 사용됩니다. Community Edition은 무료로 사용할 수 있지만 엔터프라이즈 버전에는 라이선스 구매가 필요합니다. 1995년에 만들어진 이 제품은 2008년 Sun Microsystems에서 구입했습니다. Oracle은 2010년에 Sun 및 MySQL을 인수했습니다.

Azure Database for MySQL 오픈 소스 MySQL 서버 엔진을 기반으로 하는 관리형 관계형 데이터베이스 서비스입니다. MySQL Community 버전을 사용합니다. Azure MySQL 서버는 서비스의 관리 지점입니다. 온-프레미스 배포에 사용되는 것과 동일한 MySQL 서버 엔진입니다. 엔진은 서버당 단일 데이터베이스 또는 리소스를 공유하는 서버당 여러 데이터베이스를 만들 수 있습니다. 새 기술을 배우거나 가상 머신을 관리할 필요 없이 동일한 오픈 소스 도구를 사용하여 데이터를 계속 관리할 수 있습니다.

Azure Database for MariaDB

MariaDB 서버는 또 다른 인기 있는 오픈 소스 데이터베이스 서버입니다. Oracle이 MySQL을 소유한 Sun Microsystems를 구입했을 때 MySQL의 포크 로 만들어졌습니다. 이는 MariaDB가 오픈 소스로 유지되도록 하기 위한 것이었습니다. MariaDB는 MySQL의 포크이므로 데이터 및 테이블 정의는 호환되며 클라이언트 프로토콜, 구조 및 API는 긴밀하게 연결되어 있습니다.

MariaDB는 강력한 커뮤니티를 가지고 있으며 많은 대기업에서 사용됩니다. Oracle이 MySQL을 계속 유지 관리, 개선 및 지원하는 동안 MariaDB 재단은 MariaDB를 관리하여 제품 및 설명서에 대한 공개 기여를 허용합니다.

Azure Database for MariaDB Azure 클라우드의 완전 관리형 관계형 데이터베이스 as a Service입니다. 이 서비스는 MariaDB Community Edition 서버 엔진을 기반으로 합니다. 예측 가능한 성능과 동적 확장성으로 중요 업무용 워크로드를 처리할 수 있습니다.

Azure Database for PostgreSQL

PostgreSQL 은 30년 이상의 활성 개발이 포함된 오픈 소스 관계형 데이터베이스입니다. PostgresSQL은 안정성 및 데이터 무결성에 대한 강력한 평판을 가지고 있습니다. 특히 복잡한 쿼리와 쓰기가 많은 워크로드의 경우 MySQL보다 풍부하고 SQL 준수하며 더 성능이 좋은 기능입니다. Apple, Red Hat 및 Fujitsu를 비롯한 많은 대기업에서 PostgreSQL을 사용하여 제품을 제작했습니다.

Azure Database for PostgreSQL 오픈 소스 Postgres 데이터베이스 엔진을 기반으로 하는 완전 관리형 관계형 데이터베이스 서비스입니다. 이 서비스는 C++, Java, Python, Node, C# 및 PHP를 비롯한 많은 개발 플랫폼을 지원합니다. 명령줄 인터페이스 도구 또는 Azure Data Migration Service를 사용하여 PostgreSQL 데이터베이스를 마이그레이션할 수 있습니다.

Azure Database for PostgreSQL 두 가지 배포 옵션과 함께 사용할 수 있습니다.

  • 단일 서버 배포 옵션은 여러 데이터베이스를 배포할 수 있는 여러 데이터베이스에 대한 중앙 관리 지점입니다. 가격은 코어 및 스토리지에 따라 서버별로 구성됩니다.

  • 하이퍼스케일(Citus) 옵션은 Citus 데이터 기술로 구동됩니다. 수백 개의 노드에서 단일 데이터베이스 를 수평으로 확장하여 빠른 성능과 스케일링을 제공하여 고성능을 구현할 수 있습니다. 이 옵션을 사용하면 엔진이 메모리에 더 많은 데이터를 맞고, 수백 개의 노드에서 쿼리를 병렬화하고, 데이터를 더 빠르게 인덱싱할 수 있습니다.

Azure의 NoSQL 데이터

Cosmos DB는 Azure 클라우드에서 완전히 관리되고 전역적으로 분산된 NoSQL 데이터베이스 서비스입니다. 코카콜라, Skype, 엑손모빌, 리버티 뮤추얼 등 전 세계 많은 대기업에 의해 채택되었습니다.

서비스에서 전 세계 어디에서나 빠른 응답, 고가용성 또는 탄력적 확장성이 필요한 경우 Cosmos DB를 선택하는 것이 좋습니다. 그림 5-12는 Cosmos DB를 보여줍니다.

Overview of Cosmos DB

그림 5-12: Azure Cosmos DB 개요

이전 그림에서는 Cosmos DB에서 사용할 수 있는 많은 기본 제공 클라우드 네이티브 기능을 제공합니다. 이 섹션에서는 자세히 살펴보겠습니다.

글로벌 지원

클라우드 네이티브 애플리케이션은 종종 글로벌 대상 그룹을 가지며 글로벌 규모가 필요합니다.

지역 또는 전 세계에 Cosmos 데이터베이스를 배포하고, 데이터를 사용자와 가깝게 배치하고, 응답 시간을 개선하고, 대기 시간을 줄일 수 있습니다. 서비스를 일시 중지하거나 다시 배포하지 않고 지역에서 데이터베이스를 추가하거나 제거할 수 있습니다. 백그라운드에서 Cosmos DB는 구성된 각 지역에 데이터를 투명하게 복제합니다.

Cosmos DB는 전역 수준에서 활성/활성 클러스터링을 지원하므로 쓰기 및 읽기를 모두 지원하도록 데이터베이스 지역을 구성할 수 있습니다.

다중 지역 쓰기 프로토콜은 다음 기능을 사용하도록 설정하는 Cosmos DB의 중요한 기능입니다.

  • 무제한 탄력적 쓰기 및 읽기 확장성.

  • 전 세계의 99.999% 읽기 및 쓰기 가용성

  • 99번째 백분위에서 10밀리초 미만으로 제공되는 보장된 읽기 및 쓰기

Cosmos DB Multi-Homing API를 사용하면 마이크로 서비스가 가장 가까운 Azure 지역을 자동으로 인식하고 요청을 보냅니다. 가장 가까운 지역은 구성을 변경하지 않고 Cosmos DB로 식별됩니다. 지역을 사용할 수 없게 되면 Multi-Homing 기능이 요청을 사용 가능한 다음 지역으로 자동으로 라우팅합니다.

다중 모델 지원

모놀리식 애플리케이션을 클라우드 네이티브 아키텍처로 다시 배포하는 경우 개발 팀은 때때로 오픈 소스 NoSQL 데이터 저장소를 마이그레이션해야 합니다. Cosmos DB는 다중 모델 데이터 플랫폼을 사용하여 이러한 NoSQL 데이터 저장소에 대한 투자를 유지하는 데 도움이 될 수 있습니다. 다음 표에서는 지원되는 NoSQL 호환성 API를 보여 줍니다.

공급자 설명
SQL API JSON 문서 및 SQL 기반 쿼리를 지원하는 독점 API
Mongo DB API Mongo DB API 및 JSON 문서 지원
Gremlin API 그래프 기반 노드 및 에지 데이터 표현을 사용하여 Gremlin API 지원
Cassandra API 와이드 열 데이터 표현을 위한 Casandra API 지원
Table API 향상된 프리미엄 기능으로 Azure Table Storage 지원
Etcd API Azure Kubernetes Service 클러스터에 대한 백업 저장소로 Cosmos DB를 사용하도록 설정

개발 팀은 데이터 또는 코드를 최소한으로 변경하여 기존 Mongo, Gremlin 또는 Cassandra 데이터베이스를 Cosmos DB로 마이그레이션할 수 있습니다. 새 앱의 경우 개발 팀은 오픈 소스 옵션 또는 기본 제공 SQL API 모델 중에서 선택할 수 있습니다.

내부적으로 Cosmos 기본 데이터 형식으로 구성된 간단한 구조체 형식으로 데이터를 저장합니다. 각 요청에 대해 데이터베이스 엔진은 기본 데이터를 선택한 모델 표현으로 변환합니다.

이전 표에서 Table API 옵션을 확인합니다. 이 API는 Azure Table Storage 진화된 것입니다. 둘 다 동일한 기본 테이블 모델을 공유하지만 Cosmos DB Table API Azure Storage API에서 사용할 수 없는 프리미엄 향상 기능을 추가합니다. 다음 표에서는 기능과 대조를 이룹니다.

기능 Azure Table Storage Azure Cosmos DB
대기 시간 빠름 전 세계 어디에서나 읽기 및 쓰기에 대한 한 자리 밀리초 대기 시간
처리량 테이블당 20,000개 작업 제한 테이블당 무제한 작업
글로벌 배포 선택적 단일 보조 읽기 지역이 있는 단일 지역 자동 장애 조치(failover)를 사용하여 모든 지역에 턴키 배포
인덱싱 파티션 및 행 키 속성에만 사용 가능 모든 속성의 자동 인덱싱
가격 책정 콜드 워크로드에 최적화됨(낮은 처리량: 스토리지 비율) 핫 워크로드에 최적화됨(높은 처리량: 스토리지 비율)

Azure Table Storage를 사용하는 마이크로 서비스는 Cosmos DB Table API 쉽게 마이그레이션할 수 있습니다. 코드 변경은 필요하지 않습니다.

튜닝 가능한 일관성

관계형 및 NoSQL 섹션의 앞부분에서 데이터 일관성의 주제에 대해 설명했습니다. 데이터 일관성은 데이터의 무결성 을 나타냅니다. 분산 데이터가 있는 클라우드 네이티브 서비스는 복제에 의존하며 읽기 일관성, 가용성 및 대기 시간 간에 근본적인 절충을 해야 합니다.

대부분의 분산 데이터베이스를 사용하면 개발자가 강력한 일관성과 최종 일관성이라는 두 가지 일관성 모델 중에서 선택할 수 있습니다. 강력한 일관성 은 데이터 프로그래밍 기능의 골드 표준입니다. 시스템에서 업데이트가 모든 데이터베이스 복사본에 복제되기를 기다리는 대기 시간이 발생하더라도 쿼리가 항상 최신 데이터를 반환하도록 보장합니다. 최종 일관성을 위해 구성된 데이터베이스는 해당 데이터가 최신 복사본이 아니더라도 즉시 데이터를 반환합니다. 후자의 옵션을 사용하면 고가용성, 확장성 및 성능 향상이 가능합니다.

Azure Cosmos DB는 그림 5-13에 표시된 5개의 잘 정의된 일관성 모델을 제공합니다.

Cosmos DB consistency graph

그림 5-13: Cosmos DB 일관성 수준

이러한 옵션을 사용하면 데이터의 일관성, 가용성 및 성능에 대한 정확한 선택과 세분화된 절충을 수행할 수 있습니다. 수준은 다음 표에 표시됩니다.

일관성 수준 설명
최종 읽기에 대한 순서 지정이 보장되지 않습니다. 복제본은 결국 수렴됩니다.
상수 접두사 읽기는 여전히 최종적이지만 데이터가 기록되는 순서대로 반환됩니다.
세션 현재 세션 중에 작성된 모든 데이터를 읽을 수 있습니다. 기본 일관성 수준입니다.
제한된 부실 지정한 간격으로 내역 쓰기를 읽습니다.
강력 읽기는 항목의 가장 최근 커밋된 버전을 반환하도록 보장됩니다. 클라이언트는 커밋되지 않은 읽기 또는 부분 읽기를 볼 수 없습니다.

9-Ball 뒤에 가져오기: Cosmos DB 일관성 수준 설명 문서에서 Microsoft 프로그램 관리자 Jeremy Likness는 5가지 모델에 대한 훌륭한 설명을 제공합니다.

분할

Azure Cosmos DB는 클라우드 네이티브 서비스의 성능 요구 사항을 충족하도록 데이터베이스 크기를 조정하는 자동 분할을 수용합니다.

데이터베이스, 컨테이너 및 항목을 만들어 Cosmos DB 데이터의 데이터를 관리합니다.

컨테이너는 Cosmos DB 데이터베이스에 있으며 항목의 스키마에 구애받지 않은 그룹화입니다. 항목은 컨테이너에 추가하는 데이터입니다. 문서, 행, 노드 또는 에지로 표시됩니다. 컨테이너에 추가된 모든 항목은 자동으로 인덱싱됩니다.

컨테이너를 분할하기 위해 항목은 논리 파티션이라는 고유한 하위 집합으로 나뉩니다. 논리 파티션은 컨테이너의 각 항목과 연결된 파티션 키의 값에 따라 채워집니다. 그림 5-14에서는 파티션 키 값을 기반으로 논리 파티션이 있는 두 개의 컨테이너를 각각 보여 줍니다.

Cosmos DB partitioning mechanics

그림 5-14: Cosmos DB 분할 메커니즘

이전 그림에서 각 항목에 'city' 또는 'airport'의 파티션 키가 어떻게 포함되는지 확인합니다. 키는 항목의 논리 파티션을 결정합니다. 도시 코드가 있는 항목은 왼쪽의 컨테이너에 할당되고, 공항 코드가 있는 항목은 오른쪽의 컨테이너에 할당됩니다. 파티션 키 값을 ID 값과 결합하면 항목을 고유하게 식별하는 항목의 인덱스가 만들어집니다.

내부적으로 Cosmos DB는 컨테이너의 확장성 및 성능 요구 사항을 충족하기 위해 물리적 파티션에 논리 파티션의 배치를 자동으로 관리합니다. 애플리케이션 처리량 및 스토리지 요구 사항이 증가함에 따라 Azure Cosmos DB는 더 많은 수의 서버에서 논리 파티션을 재배포합니다. 재배포 작업은 Cosmos DB에서 관리되며 중단 또는 가동 중지 시간 없이 호출됩니다.

NewSQL 데이터베이스

NewSQL은 NoSQL 의 분산 확장성과 관계형 데이터베이스의 ACID 보증을 결합한 새로운 데이터베이스 기술입니다. NewSQL 데이터베이스는 전체 트랜잭션 지원 및 ACID 규정 준수를 통해 분산 환경에서 대량의 데이터를 처리해야 하는 비즈니스 시스템에 중요합니다. NoSQL 데이터베이스는 대규모 확장성을 제공할 수 있지만 데이터 일관성을 보장하지는 않습니다. 일관되지 않은 데이터의 일시적인 문제는 개발 팀에 부담을 줍니다. 개발자는 일관성 없는 데이터로 인한 문제를 관리하기 위해 마이크로 서비스 코드에 안전 장치를 구성해야 합니다.

CNCF(Cloud Native Computing Foundation)에는 여러 NewSQL 데이터베이스 프로젝트가 있습니다.

Project 특징
바퀴벌레 DB 전역적으로 스케일링되는 ACID 규격 관계형 데이터베이스입니다. 클러스터에 새 노드를 추가하고 CockroachDB는 인스턴스 및 지역에서 데이터의 균형을 조정합니다. 안정성을 보장하기 위해 복제본을 만들고 관리하고 배포합니다. 오픈 소스 자유롭게 사용할 수 있습니다.
TiDB HTAP(하이브리드 트랜잭션 및 분석 처리) 워크로드를 지원하는 오픈 소스 데이터베이스입니다. MySQL과 호환되며 수평 확장성, 강력한 일관성 및 고가용성을 제공합니다. TiDB는 MySQL 서버처럼 작동합니다. 애플리케이션에 대한 광범위한 코드 변경 없이 기존 MySQL 클라이언트 라이브러리를 계속 사용할 수 있습니다.
YugabyteDB 오픈 소스 고성능 분산 SQL 데이터베이스입니다. 낮은 쿼리 대기 시간, 오류에 대한 복원력 및 글로벌 데이터 배포를 지원합니다. YugabyteDB는 PostgressSQL과 호환되며 스케일 아웃 RDBMS 및 인터넷 규모 OLTP 워크로드를 처리합니다. 또한 이 제품은 NoSQL을 지원하며 Cassandra와 호환됩니다.
Vitess Vitess는 MySQL 인스턴스의 대규모 클러스터를 배포, 크기 조정 및 관리하기 위한 데이터베이스 솔루션입니다. 퍼블릭 또는 프라이빗 클라우드 아키텍처에서 실행할 수 있습니다. Vitess는 여러 중요한 MySQL 기능과 수직 분할 및 수평 분할 지원을 결합하고 확장합니다. YouTube에서 시작된 Vitess는 2011년부터 모든 YouTube 데이터베이스 트래픽을 제공하고 있습니다.

이전 그림의 오픈 소스 프로젝트는 Cloud Native Computing Foundation에서 사용할 수 있습니다. 세 가지 제품은 .NET 지원을 포함하는 전체 데이터베이스 제품입니다. 다른 Vitess는 MySQL 인스턴스의 큰 클러스터 크기를 수평으로 조정하는 데이터베이스 클러스터링 시스템입니다.

NewSQL 데이터베이스의 주요 디자인 목표는 플랫폼의 복원력과 확장성을 활용하여 Kubernetes에서 기본적으로 작동하는 것입니다.

NewSQL 데이터베이스는 기본 가상 머신을 다시 시작하거나 잠시 후에 다시 예약할 수 있는 임시 클라우드 환경에서 번창하도록 설계되었습니다. 데이터베이스는 데이터 손실이나 가동 중지 시간 없이 노드 오류를 유지하도록 설계되었습니다. 예를 들어 CockroachDB는 클러스터의 노드에서 모든 데이터의 일관된 복제본 3개를 유지 관리하여 컴퓨터 손실에서 살아남을 수 있습니다.

Kubernetes는 서비스 구문을 사용하여 클라이언트가 단일 DNS 항목에서 동일한 NewSQL 데이터베이스 프로세스 그룹을 처리할 수 있도록 합니다. 연결된 서비스의 주소에서 데이터베이스 인스턴스를 분리하면 기존 애플리케이션 인스턴스를 중단하지 않고 확장할 수 있습니다. 지정된 시간에 모든 서비스에 요청을 보내면 항상 동일한 결과가 생성됩니다.

이 시나리오에서는 모든 데이터베이스 인스턴스가 동일합니다. 기본 또는 보조 관계가 없습니다. CockroachDB에 있는 합의 복제 와 같은 기술을 통해 모든 데이터베이스 노드가 모든 요청을 처리할 수 있습니다. 부하 분산 요청을 수신하는 노드에 로컬로 필요한 데이터가 있는 경우 즉시 응답합니다. 그렇지 않은 경우 노드는 게이트웨이가 되고 적절한 노드에 요청을 전달하여 올바른 답변을 얻습니다. 클라이언트의 관점에서 모든 데이터베이스 노드는 동일합니다. 백그라운드에서 작동하는 수십 또는 수백 개의 노드가 있음에도 불구하고 단일 머신 시스템의 일관성을 보장하는 단일 논리 데이터베이스로 표시됩니다.

NewSQL 데이터베이스의 메커니즘에 대한 자세한 내용은 DASH: Kubernetes-Native 데이터베이스의 네 가지 속성 문서를 참조하세요.

클라우드로 데이터 마이그레이션

시간이 많이 걸리는 작업 중 하나는 데이터를 한 데이터 플랫폼에서 다른 데이터 플랫폼으로 마이그레이션하는 것입니다. Azure Data Migration Service는 이러한 작업을 신속하게 수행하는 데 도움이 될 수 있습니다. 가동 중지 시간을 최소화하면서 여러 외부 데이터베이스 원본의 데이터를 Azure Data 플랫폼으로 마이그레이션할 수 있습니다. 대상 플랫폼에는 다음 서비스가 포함됩니다.

  • Azure SQL Database
  • Azure Database for MySQL
  • Azure Database for MariaDB
  • Azure Database for PostgreSQL
  • Azure Cosmos DB

이 서비스는 작거나 큰 마이그레이션을 실행하는 데 필요한 변경 내용을 안내하는 권장 사항을 제공합니다.