개발 공부 & 정리
[데이터베이스 첫걸음] 4장 데이터베이스와 아키텍처 구성 본문
- 데이터베이스는 견고하게 유지되는 것이 요구된다. 이로인해 '다중화'(고가용성)가 중요하다.
- 가용성(Availability): 시스템이 서비스 제공시간에 장애 없이 서비스를 계속 지속할 수 있는 비율이 어느정도 인지를 나타내는 개념
- 아키텍처 : 아키텍처란 시스템의 구성에 관한것이다.
- 시스템을 만들기 위한 물리 레벨의 조합으로 시스템이 완수해야할 목적과 비교해가면서 결정하는것을 아키텍처를 설계한다고 한다.
- 시스템의 뼈대를 생각하는 상위설계라는 뜻도 포함한다.
- 아키텍처를 보면 시스템의 용도와 목적을 어느정도 추측할 수 있다.
- 시스템이 충족해야하는 요건에 따라 결정 → 요건 결정이 먼저 되어야한다.
- 가용성, 신뢰성, 재해대책, 성능, 보안등의 다양한 기능이외의 요건에 따라 아키텍처가 변경될 수 있다.
아키텍처는 단계별로 Stand-alone, 클라이언트/서버, Web 3계층으로 나뉜다.
Stand-alone :
문자 그대로 혼자이다. 데이터베이스가 동작하는 머신이 네트워크에 접속하지 않고 '독립되어'동작하는 구성이다.
DBMS와 애플리케이션 소프트웨어가 같은 DB 서버에서 동작한다.
물리적으로 DB 서버가 설치된 장소까지 물리적으로 접근하여 서버앞에서 데이터베이스를 이용해야한다.(네트워크에 연결되어 있지 않기 때문)
단점
물리적으로 떨어진 장소에서 접근할 수 없다.( 네트워크 연결되어 있지 않기 때문)
같은 이유로 동시에 서버를 이용할 수 있는 사람의 수가 1명으로 제한된다.
1대의 서버에서 운용중이므로 해당 서버 장애시 서비스가 정지된다. 가용성이 매우 낮다.
확장성이 부족하다. 성능이 나쁠때 개선수단이 해당 머신의 성능향상(스케일 업)이외에는 없다.
장점
구축이 매우 간단하다.(소규모 작업, 테스트를 빠르게 해볼 수 있다.)
보안이 매우 높다( 네트워크 연결이 안됨)
클라이언트/서버
데이터베이스를 네트워크에 연결하여 복수의 사용자의 단말이 접속을 가능하게한 구성
2계층(클라이언트와 서버) 구성 - DB 서버에서 DBMS 동작 / 애플리케이션 클라이언트에서 동작
클라이언트란? 엔드 유저가 직접 조작해서 수행하고 싶은 처리 명령을 보내는 머신
주로 기업 혹은 조직내에 닫힌 네트워크(LAN)에서 이용 - 데이터베이스가 중요한 정보를 많이 축적하고 있으므로 외부 접속 허가시 보안상의 문제 야기
조직내 제한된 용도의 시스템에서 이용
단점
인터넷에서 직접 데이터베이스에 접근하는 것에 대한 보안 위험
불특정 다수의 이용자가 사용하는 클라이언트에서 애플리케이션 관리 비용 문제
(불특정 다수의 애플리케이션 환경에 댛나 애플리케이션 개발 및 관리, 버그 수정 문제 → 비즈니스로직 실행하는 애플리케이션을 서버에서 관리해 비용 절감 요구 발생)
Web 3계층 구성 (웹 서버, 애플리케이션, 데이터베이스로 구성)
- 웹 서버 : 클라이언트로 부터 접속 요청[HTTP Request]을 받아서 처리를 뒷단의 애플리케이션 계층에 전달& 결과를 클라이언트에 반환 - EX Apache
- 애플리케이션 : 비즈니스 로직을 구현한 애플리케이션이 동작하는 층 , 중계된 요청 처리, 필요시 데이터베이스 계층에 접속하여 데이터베이스 추출 & 가공하여 웹서버에 반환 - EX Tomcat
- 사용자로부터 직접적인 접속 요청을 받는 역할을 웹서버 계층에 한정하여 애플이케이션과 데이터베이스 계층의 보안을 높일수 있고, 애플리케이션 계층에 비즈니스 로직을 집중하여 관리비용을 낮추는 구성이될 수 있다.
- 현재 주류
아키텍처에서 견고한 시스템을 만들기위해 중요한 점 - 가용성
가용성을 높이는 2가지 전략
- 심장 전략 : 시스템을 구성하는 컴포넌트의 신뢰성을 높여 장애발생률을 낮게 억제(소수정예, 고품질-소수)
- 신장 전략 : 사물은 언젠가 망가진다는 전제로 여분을 준비(물량, 저품질-다수)
- 동일한 기능의 컴포넌트 병렬화 → 클러스터링
- 클러스터링 구성으로 시스템의 가동률을 높이는것을 여유도(Redundancy)확보 한다고 한다.
- 일정 수준의 서버 대수를 넘어가면 서버를 증설해도 시스템 가동률은 크게 상승하지 않는다.
단일 장애점(Single Point Of Failure-SPOF) : 다중화되어 있지 않아서 시스템 전체서비스의 지속성에 영향을 주는 컴포넌트 '단일 장애점의 신뢰성이 시스템 전체의 가용성을 결정'
신뢰성 : 고장나는 빈도나 기간 but 가용성 : 사용자 입장에서 얼마나 사용할수 있는지.
DB 서버의 다중화 -클러스터링
- 간단히 병렬화를 통한 대수증가로 다중화하는 웹/애플리케이션 서버와 달리 데이터를 보존하는 영속계층(Persistence- 데이터를 생성한 프로세스가 종료되어도 사라지지않는 데이터의 특성)이므로 다중화가 쉽지 않다.
- 다른 서버와 다르게 요청처리에서 나아가 데이터를 장기간 보존해야 한다.
- 데이터는 항상 갱신되므로 다중화 유지중 정합성의 문제도 발생 가능
Active-Active : 클러스터 구성 컴포넌트 동시 가동 (Oracle, DB2)
- 시스템 다운 시간이 짧다 : 한 대가 다운되어도, 나머지가 처리 → 시스템 전체 정지 방지
- 성능이 좋다 : 동시에 가동하는 CPU, Memory 증가 하므로 성능 향상 가능 But 저장소에 병목발생이 성능 향상이 되지 않을 수도 있다.
Active-StandBy : 실제 가동 클러스터는 Active, 남은 것은 대기(StandBy)
- StandBy가 대기하다가 Active 서버 다운시 사용. 이때 전환할 때 걸리는 시간 동안 시스템은 서비스가 중지된 다운상태가 된다.
- Cold-StandBy : 평소 StandBy DB 동작하지 않다가 Active 다운시 작동
- Hot-StandBy : 평소에도 StandBy DB 동작. 전환시간이 짧지만 비싸다.
성능순
- Active-Active
- Active-StandBy(Hot-StandBy)
- Active-StandBy(Cold-StandBy)
리플리케이션(Replication 복제) : Active-Active, Active-StandBy 모두 서버 다중화. 데이터 다중화하지 못함. 저장소가 SPOF. 이를 해결하기 위한 클러스터 구성
- Active 저장소의 데이터는 항상 갱신되기 때문에 StandBy측 데이터에 갱신을 반영하여 최신화(동기화)하여 데이터의 정합성을 유지하는것이 중요!
- 일정 주기로 Active DB 서버의 갱신된 데이터를 StandBy DB 서버에 쓴다.(갱신주기에 따라 성능과 데이터 보호의 트레이드오프 발생)
RAID - 저장소 내부 컴포넌트(HDD) 다중화 기술, 기본적으로 클러스터링과 동일하게 SPOF 제거하기 위함. 디스크를 병렬로 나열해 하나의 디스크 손실에 의한 데이터 손실을 막은것.
성능을 추구하기 위한 리플리케이션,다중화 -Shared Nothing
Shared Disk : 복수의 서버가 1대의 디스크를 사용하는 구성
Shared Disk 타입의 Active-Active 구성은 DB서버를 무한 늘려도 처리율의 향상이 한계점을 맞이함.
- 저장소가 공유자원이라, 쉽게 늘리기 어렵고, DB서버간의 정보공유에 따른 오버헤드가 크기 때문
Shared Nothing : 아무것도 공유하지 않아서 네트워크 이외의 자원을 모두 분리, 서버와 저장소의 세트를 늘려 병렬처리를 통한 선형적 성능 향상이 가능한 아키텍처
→ 저장소의 병목을 방지하여 처리율이 저장소,서버 세트에 비례하여 증가
샤딩(Sharding) :구글에서 자체적으로 개발한 Shared Nothing 구조
단점 :
- 각각의 DB서버가 동일한 1개의 데이터에 엑세스 하지 못하여 다른 서버나 저장소가 다운되었을 다른 서버가 이를 이어받아 처리할수 있는 커버링 구성을 고려해야한다.
- 전체 데이터의 집계시 각각의 세트별 데이터를 합산,집계를 하는 서버가 필요하다.
'공부 > DB' 카테고리의 다른 글
[데이터베이스 첫걸음] 6장 SQL문의 기본 (0) | 2022.06.16 |
---|---|
[데이터베이스 첫걸음] 5장 DBMS를 조작할 때 필요한 기본 지식 (0) | 2022.06.16 |
[데이터베이스 첫걸음] 2장 관계형 데이터베이스란 (0) | 2022.06.16 |
[데이터베이스 첫걸음] 1장 데이터 베이스란 (0) | 2022.06.16 |
[SQL첫걸음] 36강 트랜잭션 (0) | 2022.06.16 |