목차
비녀장머리말
데이터 양이 증가하고 데이터베이스의 읽기 및 쓰기 트래픽이 증가함에 따라 기존 데이터베이스의 일반적인 병목 현상이 나타나기 시작합니다. 데이터 복제는 여러 노드에 데이터를 복제하여 병목 현상을 해결하고 데이터베이스의 성능, 확장성 및 가용성을 향상시키는 효과적인 방법입니다. 이 기사에서는 데이터 복제의 세 가지 주요 모델인 마스터-슬레이브 복제(단일 리더 복제), 다중 리더 복제(다중 리더 복제) 및 지점 간 복제(리더리스 복제)를 소개하고 이들의 장점을 분석하고 단점.
기본적인 데이터베이스 지식에 익숙하지 않은 독자는 이 기사를 참조할 수 있습니다. 데이터베이스 기초 입문 - 시스템 설계 08. 확장성과 사용성에 익숙하지 않은 독자도 이 기사를 참고할 수 있습니다. 소프트웨어 설계의 비기능적 특징 – 시스템 설계 03.
데이터복사(데이터 복제)
데이터 복제는 주로 다음 목적을 달성하기 위해 여러 노드에 데이터 복사본을 유지하는 기술입니다.
- 향상된 성능: 여러 노드에 데이터를 분산함으로써 데이터베이스 읽기 및 쓰기 성능을 향상시킬 수 있습니다.
- 확장성 향상: 데이터 양이 증가함에 따라 더 많은 노드를 추가하여 데이터베이스를 확장할 수 있습니다.
- 가용성 향상: 한 노드에 장애가 발생해도 다른 노드는 계속 데이터 서비스를 제공할 수 있습니다.
데이터 복제는 다음과 같은 다양한 애플리케이션에서 사용됩니다.
- OLTP(온라인 트랜잭션 처리): OLTP 시스템에서는 데이터 복제를 사용하여 데이터베이스의 성능과 가용성을 향상시켜 높은 동시성(High Concurrency) 읽기 및 쓰기 요구 사항을 충족할 수 있습니다.
- 재해 복구: 경고가 없는 재해 발생 시 데이터 복제를 사용하여 데이터를 오프사이트 백업에 복사하여 데이터 손실을 방지할 수 있습니다.
클론(복제)
복제는 각 노드에 여러 데이터 백업을 유지하는 것을 의미하며, 서로 다른 국가의 데이터베이스 백업과 같이 지리적으로 다른 노드에 보관하는 것이 좋습니다. 이러한 데이터는 가용성, 확장성 및 성능을 달성하기 위해 복제됩니다.
독자들은 오늘날 단일 데이터베이스의 경우 데이터베이스가 손상되면 전체 시스템이 영향을 받는 경우를 생각해 볼 수 있습니다. 반대로, 서로 다른 데이터베이스에 여러 개의 데이터 사본이 복사되어 있는 경우, 하나의 데이터베이스가 손상되더라도 전체 시스템에는 영향을 미치지 않습니다.
그러나 위의 내용은 모두 데이터 복제의 장점이지만 데이터 복제도 복잡성을 가져옵니다. 다음은 제가 제시한 복잡성의 간단한 예입니다.
- 여러 데이터를 서로 일관성 있게 유지하는 방법은 무엇입니까?
- 동기식 복제를 사용해야 합니까, 아니면 비동기식 복제를 사용해야 합니까?
- 동시 쓰기를 처리하는 방법은 무엇입니까?
이 문서에서는 동기 및 비동기 복제에 대한 설명을 시작으로 데이터 복제에 대해 자세히 설명합니다.
동기식 대 비동기식 복제
복제를 구현하는 경우에는 동기 복제와 비동기 복제의 두 가지 유형으로 구분됩니다.
둘 사이의 주요 차이점은 무엇입니까?
동기 복제에서는 기본 노드(리더 노드)가 데이터 업데이트를 위해 보조 노드(팔로어 노드)의 확인 요청을 기다립니다. 마스터 노드가 모든 보조 노드로부터 확인을 받으면 클라이언트(클라이언트 측)에 성공적인 확인을 보고합니다. 비동기식 복제에서는 기본 노드가 보조 노드의 확인을 기다리지 않고 직접 데이터를 업데이트하고 클라이언트에 성공을 보고합니다.
동기식 장단점 동기식 장단점
동기식 복제의 장점은 모든 보조 노드(팔로어 노드)가 기본 노드(리더 노드)와 완전히 동기화된다는 것입니다. 그러나 장점에는 단점이 따르는 경우가 많습니다. 보조 노드(팔로어 노드)가 실패 또는 기타 이유로 확인에 실패하면 마스터 노드는 성공적인 확인을 받을 때까지 사용자에게 응답할 수 없습니다. 따라서 이러한 단점으로 인해 마스터 노드에서 클라이언트로의 응답에 높은 대기 시간(High Latency)이 발생하게 됩니다.
비동기식 장단점
비동기 복제의 장점은 보조 노드(Follower Node)가 모두 다운되더라도 기본 노드(Leader Node)는 계속해서 작동할 수 있다는 점입니다. 반대의 단점은 기본 노드에 장애가 발생하면 보조 노드에 복제되지 않은 쓰기가 손실된다는 것입니다.
다음은 리더가 기본 노드이고 팔로어가 보조 노드인 데이터베이스 성경 데이터 집약적 애플리케이션 설계의 그림입니다.
데이터 복제 모델
다음으로, 다음 데이터베이스에서 복사한 모델의 장점과 단점을 비교해 보겠습니다.
단일 리더/1차-2차 복제
마스터-슬레이브 복제에서는 하나의 노드가 마스터 노드로 지정됩니다. 기본 노드는 쓰기를 처리하고 모든 쓰기를 보조 노드에 전송하며 동기화를 유지합니다.
마스터-슬레이브 복제는 읽기 로드가 클 때 매우 적합합니다. 예를 들어 YouTube에는 언제든지 동영상을 시청해야 하는 사람이 수천 명 있지만 동영상 시청에 비해 업로드되는 동영상의 양이 그리 많지 않기 때문에 마스터-슬레이브 복제는 슬레이브 복제 모델은 이와 같은 상황에 매우 적합합니다. 또한 이 모델을 사용하여 사용자 수가 증가함에 따라 데이터베이스를 확장하고 시스템의 확장성을 향상시킬 수 있습니다. 물론 데이터가 여러 보조 노드에 복제되면 병목 현상이 발생할 수도 있습니다. 마지막으로 쓰기 부하가 높으면 마스터-슬레이브 복제가 적절하지 않습니다.
마스터-슬레이브 복제의 또 다른 장점은 읽기 복원력이 있다는 것입니다. 예를 들어 기본 노드에 오류가 발생하는 경우 보조 노드가 여전히 읽기 요청을 처리할 수 있으므로 읽기 볼륨이 많은 시스템에 적합합니다. . 데이터베이스 모델에 대한 좋은 솔루션입니다.
또한 비동기 복제를 사용하면 일관성 없는 데이터 복제 문제가 발생합니다. 기본 노드에 오류가 발생하고 업데이트된 데이터를 보조 노드에 전달할 수 없는 경우, 다른 데이터베이스에서 읽은 데이터에 일관성이 없는 데이터가 표시될 수 있는 상황을 상상할 수 있습니다. 따라서 기본 노드에 장애가 발생하면 보조 노드가 아직 데이터 복제 업데이트를 수신하고 이에 응답하지 않은 경우 모든 데이터 복제 업데이트가 손실될 수 있습니다.
기본-보조 복제 방법
마스터-슬레이브 복제는 다양한 방법으로 구현할 수 있습니다.
명령문 기반 복제
이후에는 명령문 기반 복제를 (SBR)이라고 부르겠습니다. 중국어 번체에 대한 번역을 찾을 수 없기 때문입니다. SBR은 MySQL 데이터베이스에서 사용되는 방법입니다. 이 구현에서 마스터 노드는 INSERT, UPDATE, DELETE 등의 SQL 구문을 실행한 후 이러한 구문을 로그 파일에 쓸 수 있습니다. 다음으로 로그 파일은 실행을 위해 보조 노드로 전송됩니다.
SBR은 기본 노드에서 보조 노드로 데이터를 복사하는 문제를 해결할 수 있지만 실제로는 단점이 있습니다. 예를 들어, 비결정적 기능을 사용하면 기본 노드와 보조 노드에 대한 쓰기가 달라질 수 있습니다.
비결정적 함수란 무엇입니까? 예를 들어 NOW()는 현재 시간을 가져오고 RAND()는 난수를 가져옵니다. 모두 불확실한 함수이며 함수가 실행될 때마다 다른 결과를 얻습니다.
미리 쓰기 로그(미리 쓰기 로그)
Write-Ahead Log는 아래에서 (WAL)로 지칭됩니다. WAL은 PostgreSQL과 Oracle에서 사용되는 데이터 복제 기술입니다. WAL에서는 트랜잭션이 발생하면 처음에 트랜잭션 로그 파일에 기록된 다음 데이터베이스에 기록됩니다. 다음으로, 기본 데이터베이스에 대한 로깅 작업이 수행된 후 실행을 위해 보조 노드로 전송됩니다.
SBR과 달리 WAL은 SQL 구문 대신 트랜잭션 로그를 처리합니다. 이는 비결정적 함수가 발생할 때 일관성을 보장한다는 장점이 있습니다. 또한 WAL은 장애 발생 시 복구를 용이하게 하기 위해 데이터를 디스크에 직접 기록합니다.
예: PostgreSQL에서 UPDATE와 같은 작업을 수행할 때 데이터베이스를 처리하기 전에 먼저 트랜잭션 로그 파일과 디스크를 작성합니다. 트랜잭션 로그에는 트랜잭션 ID, 데이터 유형 및 영향을 받는 테이블이 포함되며 변경 사항은 보조 노드에 복사됩니다.
물론 장점과 단점이 있습니다. WAL의 단점은 데이터베이스의 내부 구조와 밀접하게 결합되어 있다는 점입니다. 기본 노드와 보조 노드가 소프트웨어를 업그레이드해야 하면 복잡해집니다.
논리적 복사(논리적 복제)
논리적 복사(논리적 복제) 어떤 사람들은 행 기반(Row-Based) 복제라고도 합니다. 이 방법은 PostgreSQL, MySQL을 포함한 다양한 관계형 데이터베이스에서 사용됩니다. 이 방법에서는 데이터베이스에 대한 작업 및 수정 사항이 기록된 다음 보조 노드에 복사됩니다.
예를 들어 INSERT나 UPDATE 등의 작업을 수행하면 해당 Row에 대한 모든 열 값이 포함된 기본 노드에서 영향을 받은 전체 Row가 검색됩니다. 그런 다음 가져온 변경 사항은 보조 노드에서 실행되어 데이터가 기본 노드의 데이터와 일치하는지 확인합니다.
다중 리더 복제
앞서 마스터-슬레이브 복제를 소개한 후에 비동기 복제를 사용한 마스터-슬레이브 복제에는 치명적인 단점이 있다는 점도 발견해야 합니다. 마스터 노드가 하나만 있으면 모든 쓰기 작업이 이를 거쳐야 하므로 성능이 크게 저하됩니다. 기본 노드에 장애가 발생하면 보조 노드가 데이터베이스를 업데이트하지 못할 수 있습니다.
다중 리더 복제는 이러한 동시성 시스템의 문제를 해결하는 데 사용할 수 있는 또 다른 모델입니다. 이름에서 알 수 있듯이 다중 리더 복제에는 쓰기를 처리하고 복제를 위해 이를 다른 기본 및 보조 노드로 보내는 여러 기본 노드가 있습니다.
이 복제 모델은 오프라인으로 계속 작동할 수 있는 시스템에 매우 유리합니다. 여러 데이터 센터를 유지 관리하고 운영하는 경우에도 이 모델을 사용할 수 있으므로 각 데이터 센터에는 마스터 노드가 있습니다.
갈등
다중 리더 복제는 단일 리더 복제보다 더 나은 성능과 확장성을 제공하지만 이 모델에도 단점이 있습니다. 모든 마스터 노드는 동시에 쓰기 요청을 처리할 수 있으므로 동일한 데이터를 수정할 수 있습니다. 이러한 상황을 충돌이라고 합니다.
예: 두 명의 사용자가 동시에 동일한 데이터 필드를 편집한다고 가정합니다. 이 경우 추가적인 상황 처리 없이는 최종 데이터의 정확성을 알 수 없습니다. 충돌을 처리하는 몇 가지 일반적인 방법은 다음과 같습니다.
갈등을 피하다
아주 간단한 생각입니다. 갈등을 다루려면 먼저 갈등이 발생하지 않도록 해야 합니다. 시스템이 특정 레코드에 대한 모든 쓰기가 동일한 마스터 노드를 통과하도록 보장할 수 있으면 충돌 문제가 발생하지 않습니다. 클라이언트 요청을 동일한 데이터 센터로 보낼 수 있으므로 서로 다른 데이터 센터에 있는 두 명의 사용자가 동일한 문서를 수정하지 않습니다.
그러나 사용자가 다른 위치로 이동하여 현재 다른 데이터 센터 근처에 있는 경우 여전히 충돌이 발생합니다. 이런 일이 발생하면 요청된 트래픽을 다시 처리해야 합니다. 이 경우 충돌 방지 방법이 실패하고 동시 쓰기가 발생합니다.
마지막 쓰기 승리
모든 노드는 노드 자체의 현지 시간을 사용하여 각 업데이트에 타임스탬프(Timestamp)를 할당합니다. 충돌이 발생하면 업데이트를 위해 최신 타임스탬프가 선택됩니다. 그러나 이 방법에도 사각지대가 있습니다. 왜냐하면 분산형 시스템에서는 노드 간 시간이 다를 수 있고 시간 동기화를 달성하기 어려울 수 있기 때문입니다. 또한 시간이 다를 수 있으므로 시간 차이로 인해 데이터가 손실될 수 있습니다.
다중 지시선 복제 토폴로지(Topology)
다음은 링 토폴로지, 스타 토폴로지, 전체 토폴로지 등을 포함한 다중 리더 복제를 위한 토폴로지입니다. 가장 일반적인 것은 all-to-all 토폴로지입니다. 별형 및 원형 토폴로지에도 비슷한 단점이 있으며, 노드 중 하나에 오류가 발생하면 전체 시스템에 영향을 미칠 수 있습니다. 이것이 바로 All-to-All 토폴로지가 가장 일반적으로 사용되는 이유입니다.
피어 투 피어/리더 없는 복제
마스터-슬레이브 복제에서는 마스터 노드에 문제가 발생하면 데이터베이스 오류가 발생합니다. 다중 리더 복제 외에도 시스템과 데이터베이스가 읽기 확장성을 달성하는 데 도움이 될 수 있지만 쓰기 확장성을 제공할 수 없는 또 다른 모델인 피어 투 피어 복제가 있습니다. 즉, 트래픽이 많은 읽기에 대한 확장성을 제공할 수 있습니다.
지점간 복제 모델은 기본이 아닌 노드를 통해 이러한 문제를 해결합니다. 모든 노드는 동일한 가중치를 가지며 읽기 및 쓰기 요청을 수락할 수 있습니다. Cassandra는 이 데이터베이스 복제 모델을 사용합니다.
마스터-슬레이브 복제와 마찬가지로 이러한 유형의 복제도 여러 노드가 쓰기 요청을 수락하면 동시 쓰기가 발생할 수 있으므로 불일치가 발생할 수 있습니다.
결론
데이터베이스 복제는 데이터베이스 병목 현상을 해결하는 효과적인 방법이며 데이터베이스의 성능, 확장성 및 가용성을 향상시킬 수 있습니다. 그러나 다양한 복제 모델에는 서로 다른 장점과 단점이 있으므로 복제 모델을 선택할 때 특정 요구 사항에 따라 장단점을 비교해야 합니다. 시스템 설계 내용을 좋아하는 독자는 다른 관련 기사를 참조할 수 있습니다.
관련 기사
DNS란 무엇입니까? 도메인 이름 시스템 소개 - 시스템 설계 06
시스템 설계 구성 요소 빌딩 블록 소개 - 시스템 설계 05
인용하다