Contents
개요
AWS 인스턴스에는 사용할 수 있는 성능이 정해져 있다.
보통 어떤 인스턴스 유형을 사용할지 정할 때 CPU나 Memory, Network Bandwidth 같은 성능을 주로 볼 텐데 간과하기 쉬운 성능인 인스턴스 → EBS 구간의 성능에 대해 알아보자.
인스턴스의 EBS 성능
AWS에서 대부분의 인스턴스들은 EBS에 최적화된 인스턴스로 분류된다.
EBS 최적화 인스턴스는 인스턴스와 EBS 간의 전용 대역폭을 제공하고 트래픽 경합을 최소화하여 EBS에 최상의 성능을 제공한다.
- EBS 최적화 인스턴스 목록은 아래의 문서에서 확인할 수 있다.
인스턴스 목록 표를 보면 인스턴스 유형이 나와있고 유형별로 대역폭, 처리량, IOPS가 나와있다. 이 세 가지 항목이 인스턴스와 EBS 간의 성능을 나타낸다.
이 성능은 또 기준(Baseline) 성능과 최대(Maximum) 성능으로 나뉘게 된다.
기준(Baseline) 성능
기준 성능은 인스턴스가 보장하는 최소 성능을 뜻한다.
최대(Maximum) 성능
인스턴스가 낼 수 있는 최대 성능이다.
❗유의사항
그러나 여기서 유의해야 할 점이 한 가지 있다. Bursting이 되었을 때만 최대 성능을 낼 수 있다는 점이다.
Bursting을 하기 위해서는 Burst Credit이 필요하다. 그 말인즉슨 Burst Credit이 모두 소진될 경우 더 이상의 Bursting이 불가능 해지고 기준 성능까지만 낼 수 있다는 점이다. 이 점을 꼭 유의하자.
- 최대 성능이라고 명시되어 있어서 (원문으로 봐도 Maximum) 당연히 아무런 대가 없이 최대 성능을 낼 수 있다고 이해를 했었으나 Bursting 시 최대 성능을 낼 수 있다는 사실은 인지하지 못했다.
- 공식문서에 ‘(Bursting 시) 최대 성능’이라고 써져 있었어도 이해가 훨씬 쉬웠을 것이다.
정리
t3a.large 인스턴스 타입을 예시로 들어 다시 정리해 보겠다.
- 기준 IOPS 성능은 4,000 IOPS이고 최대 성능은 15,700 IOPS이다.
- IOPS가 기준 성능인 4,000 IOPS보다 초과되는 순간 Bursting이 되어 최대 성능까지 낼 수 있다.
- 그러나 **Burst Credit (I/O)**이 다 소진될 경우 그 순간부터 최대 성능을 못 내게 되므로 인스턴스는 기준 성능인 4,000 IOPS까지 밖에 처리하지 못하게 된다.
💡 Bursting 이란? : EC2, EBS, RDS, EFS와 같은 AWS의 주요 서비스에서 평상시 리소스를 사용하지 않을 때 시간에 비례하여 Credit이라는 자원을 쌓아두었다가 순간적으로 리소스가 많이 필요할 때 Credit을 소진하여 부족한 리소스를 충당해 주는 역할을 한다. (출처 : https://sarc.io/index.php/aws/2028-aws-bursting-credit)
Bursting 관련 Cloudwatch 메트릭
Burst Credit이 모두 소진된다면 기준 성능으로 제한되기 때문에 서비스 장애나 다름없는 상황이 발생할 수 있다. 따라서 Bursting에 대한 모니터링은 필수이다.
AWS에서 제공해 주는 Bursting 관련 Cloudwatch 메트릭을 소개한다.
EBSIOBalance%
Burst Bucket에 남아있는 I/O Credit의 비율에 대한 정보를 제공하는 지표이다.
만약, 해당 지표가 0%에 가깝다면 IOPS 성능은 인스턴스의 기준 IOPS 성능으로 제한된다.
- 해당 지표는 인스턴스에서 사용되는 지표이다. (Nitro System 기반 인스턴스만 해당된다.)
EBSByteBalance%
Burst Bucket에 남아있는 Throughput Credit의 비율에 대한 정보를 제공하는 지표이다.
만약, 해당 지표가 0%에 가깝다면 Throughput 성능은 인스턴스의 기준 Throughput 성능으로 제한된다.
- 해당 지표는 인스턴스에서 사용되는 지표이다. (Nitro System 기반 인스턴스만 해당된다.)
Burstbalance
Burstbalance는 EBS의 Burst Credit 비율을 나타내는 메트릭이다.
만약, 해당 지표가 0%에 가깝다면 EBS의 기준 수준으로 제한된다.
- EBS에서 사용되는 지표이다.
💡 EBS의 Bursting은 최대 3,000 IOPS로 성능을 끌어올려주는 것이라 3,000 IOPS 이상인 EBS일 경우에는 Bursting이 의미가 없다.
마치며
인스턴스의 기준 성능과 최대 성능이 어떤 메커니즘으로 동작하는지 잘 모르고 있어서 실서비스에 장애를 초래했다. 어쩌면 아주 기본적인 AWS의 기초적인 개념인데 나 스스로 AWS에 대해 잘 알고 있다고 자만을 해서 이런 장애를 초래한 것 같다. 다시금 기초 개념이 중요하다는 것을 깨달았다.
Reference
- Amazon EBS 최적화 인스턴스
- 인스턴스의 유형별로 처리량, IOPS, 대역폭 지표에 대해 기준, 최대 수치 확인가능함.
- Amazon EBS 지표
- EBS에 관한 지표에 대해 간략한 설명
- 인스턴스에 사용 가능한 CloudWatch 지표 나열
- ‘Nitro 기반 인스턴스용 Amazon EBS 지표’ 항목에서 EBSIOBalance% 지표 설명 확인가능
- Improving application performance and reducing costs with Amazon EBS-Optimized Instance burst capability
- Nitro System 인스턴스에 IOPS 발생 후 EBSISBalance% 및 EBSByteBalance% 지표 테스트
- 기준 IOPS 미만일 경우 Burst Bucket이 다시 채워진다는 정보 확인 가능
- 반대로 기준 IOPS 이상일 경우 Burst Bucket이 사용된다는 뜻으로도 해석 가능
- Stackoverflow - 왜 EBS를 1 TiB 이상 사용하는데 Burstbalance가 떨어지나요?
'AWS > 컴퓨팅' 카테고리의 다른 글
[Lambda] Lambda의 네트워크 모드 (no-VPC, VPC) (0) | 2023.06.11 |
---|---|
[ECS] OOME (OutOfMemoryError) 최소화 해보기 (0) | 2023.02.09 |
[ALB] 왜 ALB는 고정 IP의 할당이 불가능할까? (0) | 2023.01.31 |