적합한 적합성 선택 - 즉각적인 지속성 또는 궁극적인 지속성?
NoSql 데이터베이스의 등장으로 데이터베이스에 대한 읽기 및 쓰기 속도를 높이기 위해 '최종 지속성'이라는 옵션을 사용할 수 있게 되었습니다. 흔히 디스크 내구성이라고도 알려진 지속성은 오랫동안 ACID(원자성, 일관성, 격리 및 내구성) 준수 데이터베이스 시스템의 바람직한 특성 중 하나로 인식되어 소중하게 여겨져 왔습니다.
처음 최종 지속성에 대해 들었을 때 내구성을 종교적 신념처럼 여기는 저의 강한 관계형 데이터베이스 사고방식이 흔들렸습니다.
시간이 지남에 따라 모든 애플리케이션에 즉각적인 지속성이 필요한 것은 아니며, 특히 성능과 비용의 절충이 필요한 경우에는 더욱 그러하다는 것을 깨닫게 되었습니다. 디스크 읽기 및 쓰기 속도가 느려집니다. 궁극적인 지속성의 장점은 때때로 즉각적인 지속성보다 훨씬 더 중요합니다.
이제 데이터베이스 사용자로부터 최종적인 지속성에 대한 두려움을 없애야 할 때입니다!
즉각적이고 최종적인
지속성 - 그렇다면
차이가 있나요?
간단히 말해, 최종 지속성이란 데이터베이스에 데이터를 쓸 때마다 데이터베이스 시스템에서 쓰기를 승인하기 때문에 행이 디스크에 성공적으로 쓰여진 것처럼 보이는 것을 의미합니다. 이 쓰기를 트리거하는 호스트는 데이터베이스에서 쓰기가 성공했다는 확인을 받지만, 실제로는 데이터베이스가 데이터를 디스크에 쓴 것이 아니라 메모리나 파일 시스템 캐시와 같은 중간 계층에 썼을 뿐입니다. 실제 디스크에 대한 쓰기는 대기열에 대기하며 비동기적으로 이루어집니다.
즉시 지속성은 디스크에 대한 쓰기가 동기식이며 데이터가 디스크에 쓰여진 후에만 쓰기가 승인된다는 의미입니다.
3NF(관계형 데이터베이스 사용자를 일컫는 제 이름)들에게 이 내용이 언급되고 몇 초가 지나면 회의는 매우 빠르게 끝나거나 최종 지속성을 제공하는 데이터베이스 솔루션은 실행 불가능한 솔루션으로 무시됩니다. 디스크에 지속된 후 쓰기를 승인하는 것이 유일한 방법이었습니다.
이 블로그에서는 초기 쓰기가 여러 계층의 고가용성 옵션을 갖춘 신뢰할 수 있고 완전히 이중화된 장애 안전 계층에 이루어지는 경우 특정 워크로드가 성능과 비용 측면에서 디스크에 대한 지연된 쓰기를 통해 작동할 수 있는지 살펴봅니다.
고려해야 할 요소
올바른 지속성 선택
옵션
많은 시나리오에서 성능과 비용을 위해 결국에는 지속성을 유지할 수 있다고 생각합니다. 살펴보겠습니다.
이에 대해 더 자세히 알아보기 전에 내구성은 훌륭한 기능이지만 성능과 높은 CAPEX/OPEX를 희생해야 한다는 점을 분명히 말씀드리고 싶습니다. 더 나은 성능을 제공하기 위해 더 빠른 스토리지에 투자해야 하므로 CAPEX/OPEX가 높아집니다. 제품에 다른 이중화 기능이 내장되어 있고 성능이 중요한 고려 사항이기 때문에 견딜 수 있다면, 궁극적인 해결책으로 이벤트 지속성을 고려해야 합니다.
잠시 기본으로 돌아가서 애플리케이션 사용자가 데이터베이스와의 상호 작용에서 실제로 원하는 것이 무엇인지 살펴보겠습니다.
- 빠른 데이터 쓰기
- 매번 일관된 답변으로 제가 작성한 데이터 읽기
- 내가 작성한 내용을 절대 잃어버리지 않습니다. 이것이 실제로 의미하는 바는 데이터 손실을 최소화한다는 것입니다. 제가 최소화라는 단어를 사용한 이유는 RDBMS 데이터베이스의 "철통 같은" 보장도 무너질 수 있는 시나리오가 몇 가지 있기 때문입니다.
RDBMS 데이터베이스는 오랫동안 사용되어 왔습니다. 그리고 이러한 오류를 최소화하고 해결해 왔습니다. 일관되지 않은 결과로 인해 기회를 잃을 수 있는 매우 민감한 워크로드에 매우 적합합니다. 제 요점은 이것이 전부 아니면 전무의 솔루션이라는 것입니다. 이러한 종류의 내구성이 실제로 필요하지 않은 애플리케이션의 경우 성능에 대한 트레이드오프는 값비싼 대가를 치르게 됩니다.
데이터베이스 솔루션을 통해 데이터를 빠르게 쓰고, 읽은 내용을 일관되게 읽고, 쓴 내용을 잃지 않으며, 현재보다 훨씬 적은 비용으로 속도와 성능 저하 없이 트랜잭션 격리를 제공할 수 있다면 어떨까요? 공감이 되시나요? 그럴 것 같습니다.
데이터베이스 솔루션이 다음과 같은 경우
- 메모리 중심을 통해 다음을 수행할 수 있습니다. 매우 빠른 데이터 쓰기.
- 데이터를 메모리에 보관하여 다음을 수행할 수 있습니다. 메모리에서 매우 빠르게 읽습니다, 본질적으로 일관되게 작성한 내용을 읽습니다.
- HA 기능 구축 어느 렛츠 랙 인식, 데이터센터 인식 구현에 데이터 복사본이 있으므로 디스크에 쓰기가 지속되기 전에 노드가 다운되는 경우 언제든지 다른 노드나 다른 클러스터에 의존하여 여유를 확보할 수 있습니다.
이 아키텍처의 장점은 다음과 같습니다.
- 매우 드물게 데이터가 삭제되는 경우를 견딜 수 있는 애플리케이션은 여러 수준의 중복성이 내장되어 있기 때문에 여전히 작동할 수 있습니다.
- 속도와 성능은 희생되지 않습니다.
- 솔루션 비용이 저렴합니다.

어떤 경우에도
시스템의 데이터 손실
관계형 또는 NoSQL 시스템?
오류를 완전히 제거할 수는 없고 오류의 수를 최소화할 수 있을 뿐이기 때문에 대답은 사실 '아니요'입니다. 많은 사람들이 디스크에 쓰는 것이 데이터를 보호하는 가장 안전한 방법이라고 주장하지만, 저는 이 분야에서 일하면서 불량 드라이브, 데이터 손상, ETL 작업 실패 등으로 인해 데이터가 손실된 여러 시나리오를 보고 복구해 왔습니다. 기존 솔루션이 반드시 데이터의 안전을 100%로 보장하는 것은 아닙니다. 중요한 것은 관련된 다양한 측면과 장단점을 고려해야 한다는 점입니다.
궁극적인 지속성을 선택하는 경우 다음을 보장하는 것이 필수적입니다.
1) 클러스터 간 고가용성 기능을 내장하여 데이터를 지속할 수 없어 발생하는 데이터 손실을 보완합니다.
2) 클러스터 간 HA 기능 또는 대체 데이터 센터로의 복제를 통한 여러 계층의 중복성 확보
3) 오류 또는 손실된 데이터를 신속하게 감지하고 복구할 수 있는 강력한 QA 프로세스?
4) 비즈니스에서 성능, 속도, 비용이 가장 중요한가요?
카우치베이스 서버는 기존 데이터베이스 솔루션에 비해 훨씬 적은 비용으로 놀라운 성능을 제공하는 푸시 버튼 스케일업 및 스케일아웃 기능과 함께 기존의 내구성 기능을 제공합니다.
결론
내구성이 바람직하지만 지연 시간 요구 사항, 애플리케이션 프로필 및 감수할 수 있는 비용에 따라 최종적으로 지속성을 유지할 수도 있습니다. 데이터베이스 솔루션에 다음과 같은 기능이 있는 경우
- 데이터 손실을 최소화하는 이중화 및 여러 수준의 고가용성 기능이 내장되어 있습니다.
- 놀라운 성능 제공 가능
- 현재 사용 중인 솔루션 비용의 일부만 지불하면 됩니다.
그렇다면 결국 지속성은 실행 가능한 솔루션 그 이상입니다.
완전히 내구성이 뛰어난 시스템에서 애플리케이션이 데이터 손실을 경험할 가능성은 비용, 성능 및 확장성에 대한 추가 오버헤드가 있는 영구적인 시스템에서 발생하는 것과 거의 비슷합니다. 그렇다면 내구성이 과대평가된 것 아닌가요?
_____________________________________________________________________________________
이 글은 산디아 크리슈나무르티(Sandhya Krishnamurthy) 수석 솔루션 엔지니어가 작성했습니다. 카우치베이스는 NoSql 데이터베이스의 선도적인 제공업체입니다.
작성자에게 문의 sandhya.krishnamurthy@couchbase.com
- 포럼에서 문의하기
- 팔로우하기 https://twitter.com/couchbasedev 그리고 https://twitter.com/couchbase
무료 제품 다운로드 및 무료 교육을 받으려면 아래 사이트를 방문하여 Couchbase 제품에 대해 자세히 알아보세요.