다음에서 '분산형 다중 문서 ACID 트랜잭션'을 지원하게 되어 기쁘게 생각합니다. 카우치베이스 서버 6.5.
새 애플리케이션을 작성하든 기존 관계형 애플리케이션을 현대화하든, 다음을 사용하여 거래 Couchbase 6.5에서는 작업이 그 어느 때보다 쉬워졌습니다.
왜 분산형 산 트랜잭션인가요?
Couchbase는 항상 단일 문서 ACID 트랜잭션을 지원해 왔습니다. 이는 문서 모델 데이터베이스에서 트랜잭션의 핵심이며 95% 이상의 사용 사례를 포괄합니다. 다중 문서 ACID 트랜잭션이 필요한 비즈니스 크리티컬 사용 사례도 있으며, 지금까지 고객들은 애플리케이션 수준에서 이러한 사례를 모델링해 왔습니다. 새로운 다중 문서 ACID 트랜잭션 기능을 사용하면 데이터베이스 계층이 대신 처리하도록 할 수 있습니다. 따라서 애플리케이션 계층은 다중 문서 업데이트 중 시스템 장애의 모든 복구 시맨틱을 관리해야 하는 부담을 덜 수 있습니다. 이제 데이터베이스 계층은 여러 문서, 여러 버킷, 여러 노드에 걸쳐 ACID 트랜잭션을 제공합니다.
코드는 다음과 같이 간단합니다:
트랜잭션 내부의 모든 작업은 기본 플랫폼의 프로그래밍 능력에 액세스할 수 있는 표준 Couchbase SDK API를 사용하여 수행됩니다. 동시 접속자가 많은 분산 시스템에서 발생할 수 있는 많은 오류에 대한 기본 제공 재시도 기능으로 오류 처리가 간소화됩니다.
산성 보증
공유되지 않는 아키텍처를 기반으로 구축된 분산 데이터베이스에서 ACID 트랜잭션 보증을 처리하는 방법을 살펴보겠습니다.
A토미티
이번 릴리스에서는 원자성 보장을 단일 문서에서 여러 노드의 여러 문서로 확장합니다. 이제 한 번에 여러 문서를 업데이트하는 표준 애플리케이션에 대해 전부 아니면 전무의 의미를 갖게 됩니다. 트랜잭션 경계 내에서 Couchbase는 영향을 받는 모든 문서를 변경하거나 전혀 변경하지 않습니다. 이러한 다중 문서 원자성은 다중 자산 조정 및 마이크로서비스 사가 오케스트레이션과 같은 애플리케이션 시나리오에 매우 중요하며, 이제 Couchbase를 통해 이를 제공할 수 있습니다.
C지속성 및 I솔루션
Couchbase는 항상 키-값 API로부터의 읽기와 GSI(요청_플러스 사용)를 통한 N1QL로부터의 읽기에 대해 강력한 일관성을 제공해 왔습니다. 이제 이러한 일관성을 다중 문서 트랜잭션에도 확장했습니다. 물론, 다중 문서 일관성에 대한 논의는 지원되는 격리 수준에 대한 설명 없이는 불완전합니다. Couchbase Server 6.5는 "읽기 커밋" 격리 수준을 제공합니다. ANSI 표준에 따르면 읽기 커밋 격리 수준은 읽은 모든 데이터가 읽히는 순간 커밋되도록 보장합니다. 또한 커밋되지 않은 "더티" 데이터가 읽히지 않도록 해야 합니다. 카우치베이스 트랜잭션은 키-값 인터페이스, N1QL 쿼리, XDCR 클러스터, 분석, 모바일, 이벤트 기능 등 읽기 수행 방식에 관계없이 항상 읽기 커밋된 시맨틱을 보장합니다.
D유용성
트랜잭션은 내구성을 보장하기 위해 Couchbase Server 6.5의 새로운 동기식 복제 메커니즘 위에 계층화됩니다. 동기식 복제는 쓰기 작업이 내구성 있게 복제 및/또는 유지될 때까지 보이지 않도록 보장합니다. 트랜잭션이 커밋되면 문서의 클러스터 내 위치에 관계없이 트랜잭션의 모든 업데이트는 내구성이 보장됩니다.
이제 동기식 복제를 통해 Couchbase는 더 나은 복원력을 갖춘 조정 가능한 내구성을 더 쉽게 사용할 수 있게 되었습니다. 지속성의 조정 가능성은 복제를 지속성 전략으로 사용하거나 지속성을 지속성 전략으로 사용하는 데서 비롯됩니다.
새로운 복제 메커니즘은 다음을 사용하여 포괄적인 사내 테스트를 진행 중입니다. Jepsen는 분산 시스템을 여러 개의 동시 장애에 노출시키고 이러한 장애에서 데이터 일관성을 검사하는 테스트 프레임워크입니다. 이 테스트의 결과는 공개될 예정입니다.
고가용성 및 확장성 트랜잭션
분산형 스케일아웃 데이터 플랫폼인 Couchbase는 확장성, 성능, 고가용성 분야의 리더라는 오랜 차별성을 가지고 있습니다. 다중 문서 분산 트랜잭션에서도 이러한 원칙에 충실합니다. 글로벌 스케줄러나 글로벌 조정을 도입하지 않으며, 미세하게 조정된 시간 서버에 의존하지 않습니다.
스마트 클라이언트를 사용하면 단일 트랜잭션 모니터나 분산 잠금 관리자가 필요하지 않습니다. 역사적으로 트랜잭션은 2PC를 사용해 구현되었습니다. 분산 스케일아웃 데이터베이스에서 2PC는 너무 느리고, 분산 교착 상태를 유발하며, 가장 중요한 것은 SPOF를 유발한다는 점입니다. 저희의 구현에서는 다른 접근 방식을 취했습니다.
각 트랜잭션은 스마트 클라이언트의 일부 애플리케이션 로직에 연결됩니다. 트랜잭션이 실행될 때 스마트 클라이언트는 트랜잭션 상태를 추적하고 트랜잭션 진행 여부를 결정합니다. 시스템 상태가 스마트 클라이언트 트랜잭션 상태와 일치하지 않으면 스마트 클라이언트는 자동으로 트랜잭션 상태를 풀고 애플리케이션 로직을 다시 시도합니다. 스마트 클라이언트는 트랜잭션 상태를 인식하기 때문에 2PC 프로토콜의 가용성 및 확장성 제한을 제거할 수 있습니다.
또한, 샤딩된 데이터베이스에서는 단일 샤드에서 트랜잭션 보장을 제공함으로써 2PC의 규모와 성능 한계를 극복할 수 있습니다. 이를 위해서는 데이터를 단일 샤드로 사전 분할해야 합니다. 그러나 데이터를 수동으로 샤딩해야 하는 것은 전체 NoSQL 산업을 침체시키는 데 일조한 잘 알려진 문제이기도 합니다. 저희 아키텍처를 사용하면 트랜잭션은 파티션에 구애받지 않으며 데이터 배치에 대한 특별한 처리나 조작이 필요하지 않습니다. 기본적으로 트랜잭션 의미론은 문서가 클러스터에서 물리적으로 어디에 있든 상관없이 모든 문서에 적용됩니다.
필요할 때만 대가를 지불하세요
마지막으로 Couchbase ACID 트랜잭션의 장점 중 가장 중요한 것은 사용 시를 제외하고는 성능 페널티를 지불하지 않는다는 사실입니다. 강력한 ACID 보장이 필요한 작업과 그렇지 않은 작업을 인터리빙하여 NoSQL 시스템의 성능과 확장성, 그리고 기존 데이터베이스의 트랜잭션 보장이라는 두 가지 장점을 모두 얻을 수 있습니다. 이를 통해 애플리케이션은 데이터베이스가 모든 작업에 대해 무조건적으로 트랜잭션 비용을 부과하는 대신 트랜잭션 비용을 지불할 시기를 결정할 수 있는 권한을 갖게 됩니다.
결론
규모에 맞는 성능, 가용성, JSON의 데이터 모델 유연성, SQL의 프로그래밍 능력, ACID 트랜잭션 보장이 결합된 Couchbase는 최신 애플리케이션에 매우 강력한 기능을 제공합니다. 애플리케이션에 NoSQL과 Couchbase가 제공하는 기능이 필요한 경우, 관계형 데이터베이스에서 사용하던 것과 동일한 ACID 시맨틱을 구현하기 위해 더 이상 별도의 시스템이 필요하지 않습니다.
다음 단계
카우치베이스 서버 7.0 베타를 다운로드할 수 있습니다. Couchbase ACID 트랜잭션에 대해 자세히 알아볼 수 있는 추가 블로그와 문서가 Couchbase 팀에 의해 게시되어 있습니다. 꼭 사용해 보시고 여러분의 피드백을 기다리겠습니다!
다운로드
문서
블로그
Couchbase의 분산형 멀티도큐먼트 ACID 트랜잭션 이해하기
안녕하세요, 라비,
멋지네요.
제가 알기로는 6.5.0에서 ACID 트랜잭션을 수행하는 방법은 SDK API를 이용하는 것으로 알고 있습니다. N1QL이 트랜잭션을 수행할 수 있도록 할 계획이 있나요?
또한 관계형 데이터베이스에서 포팅을 계획하는 많은 고객을 위해 기존 PL/SQL(저장 프로시저 등)을 카우치베이스에서 실행할 수 있는 것으로 포팅을 지원할 수 있는 방법/계획이 있나요?
고마워요
N1QL 트랜잭션 기능은 곧 출시될 Couchbase 릴리스에 포함될 예정입니다. 2020년 11월에 베타 버전이 발표될 예정입니다.
세부 정보: https://www.couchbase.com/transactions-n1ql-couchbase-distributed-nosql/
Talk: https://connectonline.couchbase.com/forum/t/n1ql-new-features-new-features-in-the-upcoming-release/274
안녕하세요 푸라브,
향후 릴리스에서 트랜잭션에 대한 N1QL 지원을 검토할 예정입니다. 로드맵에 포함되어 있습니다.
N1QL에는 PL/SQL 저장 프로시저를 이식할 수 있는 사용자 정의 함수에 대한 미리보기 기능이 있습니다.
Couchbase 6.5(미리 보기)의 기능에 대한 자세한 내용은 다음에서 확인하세요: https://docs.couchbase.com/server/6.5/n1ql/n1ql-language-reference/createfunction.html
"트랜잭션이 실행되면 스마트 클라이언트는 트랜잭션 상태를 추적하고 트랜잭션 진행 여부를 결정합니다. 시스템 상태가 스마트 클라이언트 트랜잭션 상태와 일치하지 않으면 스마트 클라이언트는 자동으로 트랜잭션 상태를 해제하고 애플리케이션 로직을 다시 시도합니다."
시스템 상태와 트랜잭션 상태를 일치시키는 로직을 이해하도록 도와주세요. 2PC를 제거하는 데 사용된 로직이 정말 궁금합니다.
감사합니다
안녕하세요 seeraven242,
여기서 핵심 혁신은 네트워크에서 트랜잭션 메타데이터 특정 작업을 통해 트랜잭션 상태에 대한 세부 정보를 표시한다는 것입니다. 이를 통해 애플리케이션 코드를 대신하는 클라이언트 작업을 포함하여 Couchbase를 구성하는 전체 분산 시스템이 필요한 경우 조율하고 그렇지 않은 경우 개별 트랜잭션이 오버헤드 없이 진행되도록 할 수 있습니다.
단일 모놀리식 시스템을 넘어 확장하기 위한 기존 트랜잭션 관리자 접근 방식에서 시스템 간 2PC를 사용하면 올바르게 지적한 대로 트랜잭션 비용이 여러 번 지불됩니다.
카우치베이스 솔루션은 작업을 리팩터링합니다. 시스템 전반에서 기존 레이어 뒤에 숨겨서 그 비용을 지불하는 것보다 낫습니다.
이 블로그가 게시된 이후 몇 가지 새로운 리소스가 추가되었습니다. 그레이엄 피플스 카우치베이스 커넥트 2020의 프레젠테이션에서 좀 더 자세히 살펴보세요. 그리고 내 프레젠테이션은 다음을 보여줍니다. 이 모든 것이 어떻게 결합되는지 알아보세요.
질문에 대한 답변이 되었기를 바라며 관심을 가져주셔서 감사합니다!