일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 타입 챌린지
- 프로그래머스 레벨 2
- javascript
- 프로그래머스
- dfs
- 그래프
- type challenge
- BFS
- Crawling
- 알고리즘
- 크롤링
- ip
- HTTP
- Node.js
- socket
- 가천대
- HTTP 완벽 가이드
- 쉬운 문제
- 수학
- 소켓
- 자바스크립트
- Algorithm
- 문자열
- 백준
- TCP
- 타입스크립트
- dp
- Nestjs
- 레벨 1
- typescript
- Today
- Total
kakasoo
부하 대응 접근 방식 본문
수직확장과 수평확장
사람들은 확장성과 관련해 용량 확장(수직 확장), 규모 확장(수평 확장) 을 말한다.
수직 확장은 좀 더 강력한 장비로 이동하는 것이고, 수평 확장은 여러 기기들로 부하를 분산하는 것을 말한다.
서로 다른 기기로 부하를 나누기 때문에 수평 확장은 다시 비공유 아키텍처라고 부르기도 한다.
단일 장비에서 수행하는 시스템이 비교적 간단하기는 하지만, 고사양 장비는 매우 비싸 대개 규모 확장을 택한다.
적절한 장비 몇 대가 다량의 낮은 사양 가상 장비, 또는 몇 대의 높은 사양 가상 장비보다 저렴하고 효율적이다.
탄력적 (Elastic)
일부 시스템은 탄력적(elastic)이다.
즉, 부하 증가를 감지하면 컴퓨팅 자원을 자동으로 추가할 수 있다.
탄력적인 시스템은 부하를 예측할 수 없을 경우 무척이나 유용하지만 더 복잡한 아키텍처를 만들게 된다.
분산 데이터시스템
다수의 장비에 상태 비저장 서비스를 배포하는 일은 상당히 간단하다.
하지만 단일 노드에 상태 유지 데이터 시스템을 분산 설치하는 일은 많은 복잡도가 추가적으로 발생한다.
이런 이유로 확장 비용이나 데이터베이스를 분산으로 만들어야 하는 고가용성 요구가 있을 때까지 단일 노드에 데이터베이스를 유지하는 것이 최근까지의 통념이다.
하지만 분산 시스템을 위한 도구와 추상화가 좋아지면서 이 통념이 적어도 일부 애플리케이션에서는 바뀌었다.
추후 대용량 데이터와 트래픽을 다루지 않는 사용 사례에서도 분산 데이터 시스템이 기본 아키텍처로 자리 잡을지도 모른다.
대개 대규모로 동작하는 시스템의 아키텍처는 해당 애플리케이션에 특화되어 있다.
범용적이고 모든 상황에 맞는 (one-size-fits-all) 확장 아키텍처는 존재하지 않는다.
아키텍처를 결정하는 요소는 읽기의 양, 쓰기의 양, 저장할 데이터의 양, 데이터의 복잡도, 응답시간 요구사항, 접근 패턴 등이 있다.
혹은 이 요소 중 일부 조합에 더 많은 문제가 추가되기도 한다.
예를 들어 각 크기가 1kB인 초당 100,000건의 요청을 처리하도록 설계한 시스템과 각 크기가 2GB인 분당 3건의 요청을 처리하기 위해 설계한 시스템은 서로 같은 데이터 처리량이라 해도 매우 다르다.
특정 애플리케이션에 적합한 확장성을 갖춘 아키텍처는, 주요 동작이 무엇이고 잘 하지 않는 동작이 무엇인지를 무엇인지에 대한 가정을 바탕으로 설계된다.
'프로그래밍 > Backend' 카테고리의 다른 글
Express 내부 코드 들여보기 (0) | 2022.10.02 |
---|---|
HATEOAS을 이용한 유저 권한(Authorization) 설계 (0) | 2022.10.02 |
커머스에서의 장바구니 금액 계산법 (0) | 2022.08.27 |
Node.js에서 동시성 다루기와 예제 (0) | 2022.08.24 |
성능 기술과 백분위 ( percentile ) (0) | 2022.07.02 |