[4장] 데이터베이스와 아키텍처 구성 (1)

신은지·2021년 10월 10일
0

견고하고 고속의 시스템을 위한 데이터베이스 아키텍처 구성

다중화

  • 다중화 (= 고가용성)
    : 문제가 발생했을 때 정지없이 시스템을 동작하게 만드는 개념.

  • 아키텍처 (= 시스템 구성)
    : 시스템을 만들기 위한 물리 레벨의 조합 = 하드웨어와 미들웨어의 구성
    : DB, 서버, OS, 미들웨어, 저장소, 로드밸런서, 방화벽 등 폭넓은 지식이 필요
    : 특정 시스템의 목적과 기능을 표현한다
    : 시스템 요구 조건의 충족을 위해 시스템 개발 초반에 설계를 시행하며, 프로젝트 후반에서는 변경하기 어렵다.


DB의 아키텍처

  • Stand-alone : DB서버가 네트워크에 접속하지 않고 독립되어 동작하는 구성.
    (1) 장점 : 보안 높고 구축 간단
    (2) 단점
          (2-1) 물리적으로 떨어진 장소에서 접근 X
          (2-2) 복수의 사용자가 동시에 작업 X
          (2-3) 가용성 낮다 : 서버 1대밖에 없으니까
          (2-4) 확장성 부족 : 성능 개선 수단이 없음
  • 클라이언트/서버 (=2계층 구성)
    : DB서버를 네트워크에 연결, 1대의 DB서버에 복수의 사용자가 접속
    : DB서버에서는 DBMS가, 클라이언트에서는 업무 애플리케이션이 동작하는 분업체제
    : 외부 접속을 허가 = 보안상의 위험 증가 + 클라이언트 애플리케이션 관리 비용 증가
    : 기업이나 조직 내 닫힌 네트워크(LAN)에서 주로 사용
  • Web 3계층
    : 웹 서버 계층 + 애플리케이션 계층 + 데이터베이스 계층의 3계층 조합
    : 애플리케이션 계층 - 비즈니스 로직을 구현한 애플리케이션이 동작. 웹서버의 요청 처리
    : 직접적인 클라이언트 접속을 웹서버에 한정 = 보안 높고 관리비용 낮다
    : 웹 시스템에서 거의 표준으로 다루는 구성

가용성과 확장성 확보

  • Web 3계층의 단점
    : 가용성이 낮고 확장성이 부족하다

  • 가용성을 높이는 전략
    (1) 심장전략 (고품질-소수전략)
    : 시스템의 각 컴포넌트의 신뢰성을 높여 장애 발생률을 낮게 억제
    (2) 신장전략 (저품질-다수전략)
    : 시스템 각 컴포넌트가 언젠가 망가질거라는 전제하에 여분을 준비 = 컴포넌트 병렬화

  • 클러스터링 (Clustering)
    : 동일한 기능의 컴포넌트를 병렬화하는 것.
    : 클러스터 구성으로 시스템 가동률을 높이는 것 = 여유도(Redundancy) 확보 = 다중화
    : 다중화가 실현될 때 시스템의 내구성은 더 높고 견고해진다. 즉, 전체 장애 발생률이 낮아진다.
    : 단, 가동률 100%는 불가능하며 서버 대수가 증가할 수록 가동률 향상 폭이 작아진다.

  • 단일 장애점 (SPOF. Single Point Of Failure)
    : 다중화되어 있지 않아 시스템 전체 서비스의 계속성에 영향을 주는 컴포넌트
    : 예산 내에서 문제를 해결하기 위해 시스템 이중화는 해두지만, 더 다중화할 수 없을 때 발생


클러스터링 (다중화)

클러스터링 : DB 서버의 다중화

  • DB는 데이터를 보존하는 영속(Persistence) 계층 = 다중화에 대해 고민 필요
    : 데이터를 장기간 보존하는 매체가 필요 + 데이터 보존과 관리를 위한 성능 요구
        => 데이터 보존 목적으로 DB 서버 전용의 외부 저장소를 사용
    : 데이터가 항상 갱신되기 때문에, 다중화 유지 중 '데이터 정합성' 의식 필요

  • 다중화의 구조
    : DB서버만 다중화, 저장소는 여러개
    : 데이터 보존 장소가 1개 = 정합성 신경 X


다중화의 종류

가용성과 성능이 좋은 순서 (= 라이센스료 가격 순)
: Active-Active > Active-Standby(Hot-Standby) > Active-Standby(Cold-Standby)

  • DB 서버가 동시에 동작하는 것의 허락 여부로 종류 나뉜다
    • Active-Active : 클러스터를 구성하는 컴포넌트를 동시에 가동한다
      • 장점
        (1) 시스템 다운 시간 짧음 : 한대가 동작 불능 되어도 다른 한대가 대체 가능
        (2) 성능 좋음 : 동시에 가동하는 CPU, 메모리가 증가하니까. 단, 저장소 병목되는 경우 O
    • Active-Standby : 클러스터를 구성하는 컴포넌트 중 실제 가동하는 것은 Active, 남은 것은 Standby 한다.
      • 구성
        (1) Cold-Standby : 평소에 standby DB 동작 X, Active DB 다운되면 작동
        (2) Hot-Standby : 평소에도 standby DB 동작 O

레플리케이션

Replication : DB 서버와 데이터의 다중화

  • 레플리케이션
    : Active-* 클러스터 구성은 서버만 다중화하지 저장소는 다중화할 수 없다는 단점을 해결
    (저장소에 문제 발생하면 데이터를 잃기때문)
    : DB 서버와 저장소 세트를 복수개로 준비하여 이슈 처리
    : 재해에도 데이터 보존이 가능하기에, 가용성이 매우 높은 아키텍처
    • 주의
      (1) Active의 데이터는 항상 사용자로부터 갱신된다
          (1-1) 정합성 유지를 위해 Standby에 갱신 반영 = 동기화 필요
      (2) 동기화 과정에서 갱신 주기와 성능과 트레이드오프 관계 생긴다
      (3) 레플리케이션 구성이 차례로 손자나 증손사 세트를 가질 수 있다
          (3-1) 피라미드형 : 데이터가 오래되어도 참조만 하면 되는 경우 사용. 부모의 부하 분산 가능

      레플리케이션 구조에서 동기화하는 Active를 Master, 동기화되는 Standby를 Slave라고 부른다.

  • 100% 장애 대책은 불가능하므로, 짧은 시간 안에 복구하는 것을 고민해야한다.

샤딩

Shared Nothing : 성능을 추구하기 위한 다중화

  • 샤드 디스크 (Shared Disk)
    : 복수의 서버가 1대의 디스크를 사용하는 구성
    • 단점
      (1) Active-Active 구성에서 아무리 DB 서버를 늘려도 언젠가 한계점에 도달한다는 단점
      : 저장소가 공유자원이라 확장이 어려움
      : DB서버 대수 증가할 수록 DB서버 간 정보 공유를 위한 오버헤드 크게 발생
  • 샤딩 (Shared Nothing)
    : 네트워크 이외의 자원을 아무것도 공유하지 않고 모두 분리하는 방식
    : 서버와 저장소 세트를 늘리면 병렬처리 때문에 선형적으로 성능이 향상된다
    • 장점
      (1) 비용 대비 성능이 좋다
      (2) Shared Disk와 다르게 복잡한 동기화 필요 X, 횡 나열로 인해 구조 간단
    • 단점
      : 저장소를 공유하지 않아 DB서버가 동일한 1개의 데이터에 접근 X
    • 단점 해결
      : 커버링 (Covering) - DB 서버 하나가 다운되었을 때, 다른 DB서버가 이를 이어받아 계속 처리

적합한 아키텍처 설계

  • 아키텍처의 설계
    : 시스템이 충족해야 하는 요건에 따라 아키텍처 선택 (기능적 요건)
    : 가용성, 신뢰성, 재해대책, 성능, 보안 등 비기능적 요건도 고려 필요
  • 아키텍처의 변경
    : 한번 결정하여 시스템을 구축하면 이후 변경이 어렵다
    : 구축 후 서버 추가, 클러스터 구성 변경은 매우 큰 작업 = 처음부터 잘해라

  • 비용, 시간, 인적자원
    : 최근 VM, 클라우드 발달로 다소 완화
    : 물리적 변경 작업에 비용, 시간이 필요
    : 고기능 아키텍처 채용 시 비용을 고려한 예산, 시간, 인적자원의 제약요건 고민 필요

profile
호그와트 장학생

0개의 댓글