Cloud Architecture

CAP 이론, ACID, Eventual Consistency VS Strong Consistency

백셀건전지 2022. 6. 16. 17:32

CAP 이론

  • 시스템은 일관성(Consistency), 가용성(Availability), 분단 허용성(Partition tolerance) 중 두 가지만 가질 수 있다는 이론
  • 위의 그림처럼 C+A , C+P, A+P의 조합만 가능하지, C+A+P 모두를 만족하는 시스템은 존재할 수 없음

Consistency

  • 데이터를 저장하는 장비가 많든 적든 모든 장비에서 동일한 데이터가 저장되어 있어야 한다는 것
  • DB 속성에 Consistency가 있다면, 트랜잭션 기능 혹은 그에 준하는 매커니즘이 존재한다

Availability

  • 죽지 않은 상태의 모든 서버는 클라이언트에게 항상 정상 처리 응답을 보내주여야 한다는 것
  • 현재 시스템에 문제가 있어서 읽을 수 없다고 보내면 가용성이 보장되지 않는 것

Partition Tolerance

  • 클러스터가 여러 대 동작하고 있을 때, 해당 클러스터 사이에 접속이 단절되어 서로 통신을 할 수 없는 상황에서도 시스템이 잘 동작해야 한다

 

  • 관계형 DB는 CA 시스템, NoSQL은 CP나 AP 시스템
  • DBMS성능은 초당 트랜잭션 실행 수(TPS)로 측정함

데이터베이스는 ACID라는 네 개의 원칙을 준수해야 함

ACID 트랜잭션

  1. 원자성(Atomicity)
    • 트랜잭션과 관련되 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 것
    • 중간단계까지만 실행되고 실패하는 일이 없도록 보장해야 한다
    • 처리 중인 트랜잭션에서 오류가 발생했을 때에 현재의 처리 중인 내용을 취소하고 트랜잭션 실행 시 임시 영역에 저장해 두었던 이전의 상태를 다시 불러와서 rollback
  2. 일관성(Consistency)
    • 트랜잭션의 실행이 성공적으로 완료되면 데이터베이스를 항상 일관성있게 유지해야 한다.
    • 무결성(DB의 데이터 값과 현실 세계의 실제값이 일치해야 한다라는 정황성을 가지는 조건) 제약이 있다면 이를 위반하는 트랜잭션은 모두 중단되어야 한다
    • 트랜잭션 실행 시 미리 정의된 트리거를 통해 한 쪽 DB의 수정이 발생했을 때 다른 DB도 함께 수정될 수 있도록 하여 일관성 보장
  3. 독립성 or 고립성(Isolation)
    • 트랜잭션 중 다른 연산 작업이 중간에 끼어들어 기존 트랜잭션의 작업에 영향을 주지 못하도록 독립성을 보존하는 것
    • 기존 트랜잭션이 완료되고 나서 추가 쿼리를 실행할 수 있도록 트랜잭션 처리는 순차적이어야 함
    • 트랜잭션 중 해당 영역에 lock을 걸고 unlock하는 방법.
    • lock & unlock은 deadlock 발생 위험이 있음.
  4. 지속성(Durability)
    • 성공적인 트랜잭션은 요청된 작업의 내용이 데이터베이스에 영원히 반영되어야 함
    • 시스템 문제나 데이터 일치 작업을 수행해도 내용은 기존과 같이 유지되어야 함
    • 모든 트랜잭션은 로그로 남겨져 시스템 장애 발생 전 상태로 되돌릴 수 있어야 함

 

Eventual Consistency VS Strong Consistency

Eventual Consistency

  • NoSQL의 특성
  • 항목이 새롭게 업데이트되지 않는다는 전제 하에 항목의 모든 읽기 작업이 최종적으로는 마지막으로 업데이트된 값을 반환한다는 것을 이론적으로 보장
  • 복제본을 읽는 것은 언제든 가능하지만 일부 복제본은 특정 시점에 상위 노드에 쓰여진 값과 일치하지 않을 수 있음
  • 오래된 데이터를 가져올 가능성이 있음에도 사용하는 이유는 '가용성'때문. ex) 소셜 미디어

Eventual Consistency

Strong Consistency

  • 즉각적 일관성
  • 업데이트 즉시 조회된 데이터는 항목을 보는 모든 사용자에게 일관성 있게 표시된다
  • 관계형 데이터베이스가 이 개념을 토대로 설계됨
  • strong consistency를 얻기 위해서는 개발자가 애플리케이션의 확장성과 성능을 어느정도 포기해야 함
  • 업데이트 또는 복제 프로세스 도중에는 데이터를 lock하여 다른 프로세스에서 동일한 데이터를 업데이트하지 않도록 해야 함

Strong Consistency

 

 

Reference

 

 

 

 

 

 

 

 

 

 

'Cloud Architecture' 카테고리의 다른 글

Service Mesh  (0) 2022.06.17
L4와 L7  (0) 2022.06.16
Proxy / Forward Proxy / Reverse Proxy  (0) 2022.06.15
TCP, UDP, TCP Window Size  (0) 2022.06.15
SAGA 패턴  (0) 2022.06.14