많은 데이터베이스 관리 시스템이 다중화를 지원한다.
보통은 서버사이에 주(master)-부(slave) 관계를 설정하고 데이터 원본은 주서버에, 사본은 부 서버에 저장하는 방식이다.
- 쓰기 연산(write operation)은 마스터에서만 지원한다.
- 부 부데이터베이스 주 데이터베이스로부터 그 사본을 전달받으며, 읽기 연산(read operation)만을 지원한다.
- 장점
- 성능향상 : 주-부 다중화 모델에서 모든 데이터 변경 연산은 주 데이터베이스 서버로만 전달되는 반면 읽기 연산은 부 데이터베이스 서버들로 분산되므로 병렬로 처리될 수 있는 query의 수가 늘어나므로 성능이 좋아진다.
- 안정성 : 데이터베이스 서버 일부가 물리적으로 파괴되어도 데이터는 지역적으로 다중화시켜 놓았다면 데이터는 보존될 수 있다.
- 가용성 : 데이터베이스 서버가 장애가 발생하더라도 복제해 둠으로써 다른 서버에 있는 데이터를 가져와 계속 서비스할 수 있다. 0 ※ 주-부가 한대씩인 상황에서 주 데이터베이스 서버가 다운되면, 부 데이터베이스가 새로운 주 서버가 될 것이며, 모든 연산은 새로운 주 서버상에서 수행될 것이다.
값비싼 연산 결과 또는 자주 참조되는 데이터를 메모리 안에 두고 빨리 처리될 수 있도록 하는 저장소이다.
어플리케이션의 성능은 데이터베이스를 얼마나 자주 호출하느냐에 크게 좌우되는데, 캐시는 그런 문제를 완화할 수 있다.
- 흐름
- 서버가 캐시에 데이터 유무를 확인
- 캐시에 데이터있으면 데이터베이스를 거치지않고 데이터를 반환
- 데이터가 없다면 데이터베이스에 접근하여 캐시에 씀
- 데이터베이스로부터 읽어온 데이터를 반환
- 사용 시 유의점
- 갱신은 자주 일어나지 않지만 참조는 빈번하게 일어나는 경우
- 캐시는 휘발성 메모리에 데이터를 저장하므로 영속적으로 보관할 데이터를 캐시에 두는것은 바람직하지 않다.
- 원본 갱신과 캐시 갱신 연산이 단일 트랜잭션으로 처리되지 않는 경우 일관성이 깨질 수 있다.
- 단일 장애 지점(Single Point of Failure, SPOF)이 될 수 있기에 캐시 서버를 여러 지역에 걸쳐 분산시켜야 한다.
- 메모리가 너무 작으면 데이터가 자주 캐시에서 밀려나버려(eviction) 캐시의 성능이 떨어지게된다. 방법으로 과할당(overprovision)으로 방지 할 수 있다.
- 데이터 방출(eviction) 정책 : 데이터가 꽉 차버리면 기존 데이터를 내보내야한다. 아래 정책 외에도 경우에 맞게 적용하면 된다.
- LRU(Least Recently Used) : 마지막으로 사용딘 시점이 가장 오래된 데이터를 내보내는 정책.
- LFU(Least Frequently Used) : 사용 빈도가 가장 낮은 데이터를 내보내는 정책.
- FIFO(First In First Out) : 가장 먼저 캐시에 들어온 데이터를 내보내는 정책.
정적 콘텐츠를 전송하는 데 쓰이는, 지리적으로 분산된 서버의 네트워크
- 로딩시간 개선 예시
- 사용 시 고려해야 할 사항
- 비용 : 보통 제3 사업자에 의해 운영되며, CDN에 들어가고 나가는 데이터 전송 양에 따라 과금이되므로 자주 사용되지 안흔 콘텐츠를 캐싱하는 것은 이득이 크지 않으므로 CDN에서 뺴는 것을 고려해야한다.
- 만료 시한 설정 : 길면 콘텐츠의 신선도가 떨어질 것이고, 짧으면 원본 서버에 빈번히 접속하게 되므로 충분히 고려되야 한다.
- 장애에 대한 대처 방안 : 가령 일시적으로 CDN이 장애가 발생할 경우 해당 문제를 감지하여 원본 서버로부터 직접 콘텐츠를 가져오도록 구성하는 것이 필요할 수 있다.
- 콘텐츠 무효화(invalidation) 방법
- CDN 서비스 사업자가 제공하는 API를 이용하는 방법
- 콘텐츠의 다른 버전을 서비스하도록 오브젝트 버저닝이용, 콘텐츠의 새로운 버전을 지정하기 위해서는 URL 마지막에 버전 번호를 인자로 주면 된다 예를 들어inmage.png?v=2와 같은 식이다.
- CDN이 추가된 설계
- ① 정적 콘텐츠(JS, CSS, 이미지 등)는 더 이상 웹 서버를 통해 서비스하지 않으며, CND을 통해 제공하여 더 나은 성능을 보장한다.
- ② 캐시가 데이터베이스 부하를 줄여준다.
'시스템설계' 카테고리의 다른 글
2장. 개략적인 규모 측정 (0) | 2024.12.30 |
---|---|
1. 사용자 수에 따른 규모 확장성(무상태 웹 계층, 데이터 센터, 메시지 큐, 로그, 메트릭, 자동화, 샤딩) (1) | 2024.12.10 |
1. 사용자 수에 따른 규모 확장성(단일서버, 데이터베이스, 규모확장) (0) | 2024.12.10 |