저장소와 검색

‘데이터 중심 애플리케이션 설계’를 읽고 정리하고자함


저장소와 데이터 검색에 여러 장비가 관여한다면..?

여러 장비 간 분산 데이터베이스를 필요로 하는 이유

  1. 확장성
    • 데이터 크기, 읽기 부하, 쓰기 부하가 단일 장비에서 다룰 수 있는 양보다 많으면 부하를 여러 장비로 분배할 수 있음
  2. 내결함성/고가용성
    • 장비 하나가 죽더라도 애플리케이션은 계속 동작해야한다면 여러 장비를 사용해 중복성 제공할 수 있음
    • 장비 하나가 실패하면 다른 하나가 이어받는 방식으로
  3. 지연시간
    • 사용자와 지리적으로 가까운 곳에서 서비스를 제공하여, 네트워크 패킷을 기다리는 시간을 줄임

고부하로 확장

공유 아키텍쳐

  • 수직 확장 (용량확장, Scale-Up)
    • 많은 CPU, 메모리, 디스크를 하나의 OS로 결합해서 사용
  1. 공유 메모리 아키텍처(shared-memory architecture) 이라고도 함
    • 모든 CPU가 메모리나 디스크의 모든 부분을 접근할 수 있어, 모든 구성요소를 단일 장비처럼 다룸
    • 문제점
      • 비용이 비쌈
      • 병목 현상으로 두배 크기의 장비가 반드시 두배의 부하를 처리할 수 있는 것도 아님
    • 제한적인 내결함성을 제공
      • ‘핫 스왑’ : 장비를 중단시키지 않고 디스크,메모리,CPU까지도 교체할 수 있음
  2. 공유 디스크 아키텍처(shared-disk architecture) 방법도 있음
    • 독립적인 CPU, 메모리를 탑재한 여러 장비를 사용하지만, 디스크는 공유
    • 여러 장비를 고속 네트워크로 연결 ( NAS,SAN 같이)
    • 일부 DW 작업부하에 이 아키텍쳐를 활용하지만, 잠금 경합과 오버헤드가 공유 디스크 접근 방식의 확장성을 제한한다는 단점이 있음

비공유 아키텍쳐

  • 수평 확장 (규모확장, Scale-Out)
  • 각 노드는 CPU, 메모리, 디스크를 독립적으로 사용함
  • 노드 간 코디네이터는 일반적인 네트워크를 사용해 SW수준에서 수행함
  • 가격 대비 성능이 가장 좋은 시스템을 사용할 수 있음
  • 데이터를 여러 노드에 분산하려면, 분산 시스템에서 발생하는 제약 조건과 trade-off를 알아야함!

  • 비공유 아키텍처는 애플리케이션의 복잡도를 야기하고 사용할 수 있는 데이터 모델의 표현이 제한 적

복제 대 파티셔닝

여러 노드에 데이터를 분산하는 방법

  1. 복제
    • 같은 데이터의 복제본을 여러 노드에 유지
    • 중복성 제공해, 일부 노드가 사용불가라면 해당 데이터는 남은 노드에서 여전히 제공 가능
    • 성능 향상에도 도움을 줌
  2. 파티셔닝
    • 큰 데이터베이스를 파티션이라는 작은 서브셋으로 나눔
    • 각 파티션은 각기 다를 노드에 할당함 (샤딩이라고도 함)