IT STUDY LOG
[성능 테스트] 03. 병목 찾기 본문
# 학습 목표
- 시스템의 가용성과 확장성을 평가할 수 있다.
- 부하 테스트의 목적을 이해할 수 있다.
- Throughput과 Latency의 개념을 이해할 수 있다.
- 시스템의 병목이 발생하는 주요 원인과 대책을 이해할 수 있다.
- SLO를 설정하고, 이를 기반으로 부하 테스트를 진행하고, 달성 여부를 파악할 수 있다.
# 학습 내용
1. 병목 구간의 확인과 개선 기본 지식
Throughput 개선
- 만일 하위 시스템 A-B-C 구간에서 A-B 구간의 처리량이 1000건이고, B-C 구간의 처리량이 200건일 경우 최소값을 개선하는 것으로 병목 해결
- 병묵이 아닌 구간을 개선하는 것은 전체 throughput을 개선하는데 도움이 되지 않음
- throughput 개선을 위해서는 병목 구간이 어디인가를 먼저 파악하는 것이 중요
Latency 개선
애플리케이션 개선
- Latency의 개선은 개발된 애플리케이션을 개선하는 것으로 시작
- 애플리케이션 성능 최적화는 현상을 파악(APM, Application Performance Monitoring)으로 시작해, 알고리즘 개선, I/O 최소화 등의 개선 방안이 뒤따름
- DevOps가 이를 모니터링할 수는 있으나, 결국 개발자가 APM 도구와 프로파일러 등을 이용해 이를 개선해야 함
(애플리케이션 성능 향상을 위한) 하위 시스템의 확장
- througput 개선 예시와 같이 Throughput의 개선이 Latency의 개선으로 이어짐
- 즉 "대기 시간"에 문제가 있다는 의미이므로, 만일 애플리케이션이 실행 환경(하위 시스템)의 성능을 최대한 활용할 수 있다면, 하위 시스템의 확장에 따라 Throughput도 개선되며, 대기 시간도 줄어듦
- 즉 많은 경우 Throughput이 개선되면 Latency도 개선됨
2. 응답 성능의 병목 원인과 대책
응답 성능의 병목 원인과 대책
- 서비스를 시작한 후 발생할 수 있는 문제 시나리오는 다양하며 이러한 문제는 응답 성능의 병목 발생
- 아래 제시된 시나리오는 매우 일반적이며, 부하 테스트를 통해 응답 성능을 예측 가능
- 애플리케이션 수준에서의 대책을 온전히 이해하기는 어렵지만, 주요 키워드를 학습하여 개발자에게 솔루션을 제공할 수 있어야 함
- 많은 사용자의 서비스 등록
- 많은 데이터의 저장
- 1,2번과 같은 경우 DB에 데이터가 증가하므로 secondary 복제본 등을 이용해 읽기/쓰기를 분리하거나, 검색에 최적화된 인덱스 사용을 고려
- 단기간 동안의 사용자 요청 증가(peak traffic)
- Auto Scaling이 해결책이 될 수 있으나 버스트 성능에 대해 이해해야 함
- 배치 작업을 진행하는 데이터베이스
- DB가 주기적으로 스냅샷을 만들거나, 데이터 일관성을 위해 레플리카와의 sync 과정을 진행하는 등의 배치 작업이 이루어질 경우, primary DB는 성능 저하가 발생할 수 있으며 이때 사용자들의 요청과 맞물려 서비스 수준을 맞추기 어려울 수 있음
- 많은 양의 로그 수집 처리
- 애플리케이션이 잘 작동할 때에는 로그를 많이 남기지 않지만, 애플리케이션에 문제가 발생하면 추적을 위해 많은 로그를 남기게 됨. 만일 이러한 상황이 반복적으로 진행될 경우, 에러 로그 수집 그 자체가 애플리케이션 병목을 일으킬 수 있음
- 시스템 재시작 후의 캐시 초기화
- 큰 문제를 발생시키는 것은 아니지만, 캐시가 초기화되면서 시스템으로 직접적인 요청 횟수가 증가할 수 있음
주요 병목 구간과 부하 테스트 시 고려해야 할 부분
- 병목 구간을 확인하는 것은 부하테스트의 주요 목적이며, 좋은 부하 테스트를 만드는 기본
시스템에 문제가 발생할 수 있는 부분을 다이어그램으로 표현한 예시
# references
https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/burstable-credits-baseline-concepts.html
'devops bootcamp 4 > DevOps 인프라 관리' 카테고리의 다른 글
[성능 테스트] 04. 부하 테스트 도구와 활용 (1) | 2023.06.06 |
---|---|
[성능 테스트] 02. 부하 테스트 기본 (0) | 2023.06.06 |
[성능 테스트] 01. 가용성과 확장성 (0) | 2023.06.06 |
[서비스 모니터링] 04. 서비스 수준 목표 (0) | 2023.06.05 |
[서비스 모니터링] 03. Prometheus + Grafana (0) | 2023.06.02 |