견고하고 고속의 시스템을 위한 데이터베이스 아키텍처 구성
다중화 (= 고가용성)
: 문제가 발생했을 때 정지없이 시스템을 동작하게 만드는 개념.
아키텍처 (= 시스템 구성)
: 시스템을 만들기 위한 물리 레벨의 조합 = 하드웨어와 미들웨어의 구성
: DB, 서버, OS, 미들웨어, 저장소, 로드밸런서, 방화벽 등 폭넓은 지식이 필요
: 특정 시스템의 목적과 기능을 표현한다
: 시스템 요구 조건의 충족을 위해 시스템 개발 초반에 설계를 시행하며, 프로젝트 후반에서는 변경하기 어렵다.
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)
Replication : DB 서버와 데이터의 다중화
주의
(1) Active의 데이터는 항상 사용자로부터 갱신된다
(1-1) 정합성 유지를 위해 Standby에 갱신 반영 = 동기화 필요
(2) 동기화 과정에서 갱신 주기와 성능과 트레이드오프 관계 생긴다
(3) 레플리케이션 구성이 차례로 손자나 증손사 세트를 가질 수 있다
(3-1) 피라미드형 : 데이터가 오래되어도 참조만 하면 되는 경우 사용. 부모의 부하 분산 가능
레플리케이션 구조에서 동기화하는 Active를 Master, 동기화되는 Standby를 Slave라고 부른다.
Shared Nothing : 성능을 추구하기 위한 다중화
아키텍처의 변경
: 한번 결정하여 시스템을 구축하면 이후 변경이 어렵다
: 구축 후 서버 추가, 클러스터 구성 변경은 매우 큰 작업 = 처음부터 잘해라
비용, 시간, 인적자원
: 최근 VM, 클라우드 발달로 다소 완화
: 물리적 변경 작업에 비용, 시간이 필요
: 고기능 아키텍처 채용 시 비용을 고려한 예산, 시간, 인적자원의 제약요건 고민 필요