1. 사용자 수에 따른 규모 확장성
단일 서버
![[Pasted image 20250706203926.png]]
도메인 주소(api.mysite.com) 를 입력하면 DNS (Domain Name Service) 를 통해 IP 주소로 변환
IP 주소를 통해 HTTP 요청 전달
요청 받은 웹서버는 HTML 이나, Json 형태의 응답을 반환
데이터베이스
![[Pasted image 20250706204153.png]]
관계형
RDBMS
자료를 테이블과 열, 칼럼으로 표현
SQL 을 통해 Join할 수 있음.
e.g. mysql, postgresql
비관계형
NoSQL
그래프 저장소, 칼럼 저장소, 문서 저장소
e.g. Cassandra, redis..
비 관계형은 언제 사용해야할까?
아주 낮은 응답 지연시간이 요구될 때
다루는 데이터가 비정형 데이터
데이터(Json, Yaml, XML) 을 직렬화하거나 역직렬화 할 수 만 하면 됨.
아주 많은 양의 데이터를 저장할 필요가 있을 때
수직적 규모 확장, 수평적 규모 확장
수직적 -> scale up
고사양의 자원을 사용하 는 것.
한계가 있음.
즉 무한대로 CPU나 메모리를 늘릴 순 없다.
수평적 -> scale out
더 많은 서버를 추가하여 성능 개선을 노린다.
대규모 애플리케이션을 지원하는 데는, 수평적 규모확장법이 적절
로드 밸런서
![[Pasted image 20250706204603.png]]
웹 서버는 클라이언트의 요청을 직접처리 하지 않음.
왜? 보안을 위해
로드밸런서를 추가하하면 no fail over 이슈가 해결됨.
즉 장애를 자동복구하지 못하는 이슈
가용성이 향상 된다. (availability)
데이터베이스 다중화
![[Pasted image 20250706204902.png]]
master - slave
쓰기 연산은 마스터만
사본은 읽기 연산만
더 나은 성능
안정성
가용성
로드밸런서 + 데이터베이스 다중화 고려 ![[Pasted image 20250706204951.png]]
캐시
계시 계층은 데이터가 잠시 보관되는 장소.
데이터베이스보다 훨씬 빠르다
캐시를 두면 성능 개선 + 데이터베이스의 부하를 줄일 수 있음.
그리고 캐시 계층의 규모를 독립적으로 확장시키는 것도 가능해진다.
캐시 사용 시 유의할 점
캐시는 어떤 상황에서 사용이 바람직함?
데이터 갱신이 자주 일어나진 않지만, 참조가 빈번히 일어날 때
어떤 데이터를 캐시에 두어야함?
휘발성 데이터
캐시에 보관된 데이터는 어떻게 만료?
정책을 정해둬야함.
만료 없이 두면 안된다.
일관성?
일관성이 다소 깨질 수 있음.
이 점은 인지해야한다.
장애에 어떻게 대처?
캐시 서버를 여러대 둔다.
한대만 두면 단일 장애 지점이 될 수 있음.
캐시 메모리 얼마나 크게?
과할당 해야한다.
데이터 방출 정책?
캐시가 꽉 차면 기존에 있는 데이터를 어떻게 처리함?
LRU
Least Recently Used
마지막으로 사용된 시점이 가장 오래된 데이터를 내보내는 것
LFU
Least Frequently Used
사용 빈도가 가장 낮은 데이터를 내보내는 정책
CDN
정적 콘텐츠를 전송하는 데 쓰이는 네트워크
비디오, CSS, Javascript 같은 파일 캐싱-
![[Pasted image 20250706205414.png]]
CDN 사용 시 고려해야할 사항
비용
만료 시한 설정해야함
장애에 대한 대처 방안
콘텐츠 무효화 방법
![[Pasted image 20250706205527.png]]
CDN을 통해 더 나은 성능 보장
캐시가 데이터베이스의 부하를 줄여줌
stateless 웹계층
sticky session
같은 서버로 요청이 갈 수 있도록 로드 밸런스 차원에서 지원
단 로드 밸런스에 부하를 줌
판단해야하므로
데이터 센터
![[Pasted image 20250706205834.png]]
geo dns routing
사용자 가까운 데이터 센터로 안내
IP에 따라서..
메세지 큐
메세지 무손실, durability, 메세지 큐에 일단 보관된 메세지는 소비자가 꺼낼때 까지 안전히 보관된다.
비동기 컴퍼넌트
메세지 버퍼역할
생산자 or 발행자 - 소비자 or 구독자 구조
메세지 큐를 사용하면 서비스 또는 서버 간 결합이 느슨해져서 규모 확장성이 보장되어야하는 안정적인 애플리케이션을 구성하기 좋음
로그, 메트릭 그리고 자동화
데이터베이스 규모의 확장
![[Pasted image 20250706210222.png]]
수직적 확장
scale up
고성능 자원 사용
수평적 확장
sharding
더 많은 서버 사용
모든 샤드는 같은 스키마를 쓰지만, 샤드에 보관되는 데이터 사이에는 중복이 없다.
샤딩 전략에서 가장 중요한 것은 샤딩 키 (sharding key)
partition key
문제점
데이터의 재 샤딩
데이터가 많아서 하나의 샤드로는 더 이상 감당하지 못할 때
유명인사 문제, hotspot key
특정 샤으데 질의가 집중 되어 과부하가 걸리는 문제
조인의 비정규화
여러 샤드에 걸친 데이터를 조인하기가 힘듬.
해결 방법은 데이터베이스 비정규화
백만 사용자, 그리고 그 이상
• 웹 계층은 무상태 계층으로 • 모든 계층에 다중화 도입 • 가능한 한 많은 데이터를 캐시할 것 • 여러 데이터 센터를 지원할 것 • 정적 콘텐츠는 CDN 을 통해 서비스할것 • 데이터 계층은 샤딩을 통해 그 규모를 확장할 것 • 각 계층은 독립적 서비스로 분할할 것 • 시스템을 지속적으로 모니터링하고, 자동화 도구들을 활용할것
참고
https://www.yes24.com/product/goods/102819435
Last updated
Was this helpful?