Amazon EBS 란? (EBS Deep Dive)
IT/AWS

Amazon EBS 란? (EBS Deep Dive)

반응형

안녕하세요 오늘은 AWS EBS에 대해서 알아보겠습니다.

 

AWS EBS는 Elastic Block Storage로 EC2 instance 에 직접 붙혀서 사용하는 볼륨형 스토리지 입니다.

2006년에 처음 만들어졌으며 그 이후로 Magnetic storage 부터 SSD, HDD 까지 다양한 타입이 개발되었습니다.

 

EBS type 으로는 SSD 형 스토리지로 Provisioned IOPS와, GP2(General Prupose SSD) 가 있고,

HDD 형 스토리지로 Troughput Optimized 와 Cold 형이 있습니다.

 

 

오늘은 SSD의 General Purpose SSD인 gp2에 대해 자세히 알아보겠습니다.

gp2는 GiB당 3 IOPS가 할당되며 최소 100 IOPS가 유지됩니다. 1:3 비율로 100GB 면 300IOPS의 성능을 낼 수 있겠죠. 

이것이 EBS IOPS의 Base Line 입니다. 

 

EBS 용량은 1GiB ~ 16TiB 를 할당할 수 있는데,  최대 16,000 IOPS 까지만 지원합니다. (최대 48,000IOPS가 아님)

* IOPS = 초당 입력/출력 (단위 : KiB)

 

여기서 EBS 최소용량 1GiB는 Root EBS볼륨에는 예외 입니다. Root EBS 볼륨은 OS가 포함되어있기 때문에 각 OS 마다 최소 용량이 정해져 있습니다.  일반적으로 Amazon linux는 8GB, Windows 는 20GB, Redhat 리눅스는 10GB 입니다.

 

gp2 타입은 위에서 설명드린 Base Line으로 제공되는 IOPS이상으로 성능을 낼 수가 있습니다.

이걸 가능하게 하는 것이 바로 버스트(Burst) IOPS 입니다.

 

버스트 IOPS는 최대 3,000IOPS 까지 가능합니다. 즉, 내가 100GiB의 gp2 타입 EBS를 생성했어도 Base line 인 300IOPS가 아닌 

 3000IOPS까지의 성능을 낼 수 있다는 것이죠. 물론 무제한은 아니고 제공되는 I/O크레딧이 소진되는 시간 동안만 가능합니다.

 

I/O크레딧은 EBS생성시 최초로 540만 I/O크레딧이 제공되며 그 이상을 넘을 순 없습니다.

Base line 이상의 IOPS를 소모할때 I/O크레딧이 차감되고, 동시에 Base line만큼 초당 IOPS의 I/O크레딧이 쌓이게 됩니다. 

 

 

따라서, Base line 사이즈가 크면 크레딧이 금방 쌓이게 되겠죠, 버스트의 최대 성능이 3,000IOPS 이기 때문에

EBS용량 1,000GiB 이상이되면 버스트가 의미가 없어지므로 버스트 IOPS가 적용되는 구간은 그 미만의 용량에만 해당됩니다.

 

I/O크레딧이 모두 소진되었을때를 가정해보았을때 EBS가 100GB일 경우 300IOPS가 Base line이 되기 때문에 

5,400,000크레딧 / 300IOPS = 18,000 초, 즉 5시간이 되는 것입니다.

 

향 후 지속적으로 Base line이상의 IOPS가 발생했을 경우 버스트 IPOS가 모두 소진이 되면 다시 쌓이는데 시간이 걸리므로 성능저하가 발생할 수 있습니다. 따라서 소모될 IOPS의 량과 소모하는 시간을 예상할 수 있으면 성능으로인한 서비스 장애를 피할 수 있겠죠.

 

하지만 아키텍팅을 할때 서비스 자체가 지속적인 IOPS가 발생하는 서비스라면 gp2 타입 보다는 io1 타입인 Provisioned IOPS SSD를 사용해야합니다.

 

사용하고자하는 용량에 따라 gp2의 볼륨 처리량(Throughput)을 아래와 같은 계산식으로 계산할 수 있습니다.

EBS의 최대 처리 한도는 250MiB/s 이며, 최대 256 KiB의 I/O크기를 지원합니다. 

 

Throughput in MiB/s = ( 볼륨크기(Volume size in GiB)  × I/O크기(I/O size in KiB)) × I/O속도(IOPS/ GiB)

( T = V * I * R )

 

[예시]

100GiB의 gp2 타입의 EBS를 사용할때 

 T(Mib/s) =  (100)*(2^30)(Bytes) * (256)(2^10)(Bytes) * (300 IOP/s)/(100)(2^30)(Bytes) =   256 * 300 * 2^10 Bytes/s = 75 MiB/s

가 됩니다.

 

20GiB의 gp타입의 EBS를 사용할때

 T(Mib/s) =  (20)*(2^30)(Bytes) * (256)(2^10)(Bytes) * (100IOP/s)/(100)(2^30)(Bytes) =   20 * 256 * 1 * 2^10 Bytes/s = 5 MiB/s

 

 

여기까지가 Genernal Purpose SSD 타입에 대한 상세 설명이었습니다.

다음 지속적인 IOPS가 발생할때 적합한 Provisined IOPS SSD타입 io1 에 대해서알아보도록 하겠습니다.

 

io1은 원하는 IOPS를 설정하여 일정한 IOPS를 유지할 수 있습니다. 

볼륨 크기는 4GiB ~ 16TiB 이며, Nitro 기반 인스턴스 에서는 최대 64,000IOPS, 다른 인스턴스에서는 32,000IOPS까지 프로비저닝할 수 있습니다.

 

설정하고자하는 볼륨 크기별로 최대로 설정할 수 있는 IOPS 비율이 1:50 으로 정해져있습니다.

io1 타입으로 100GiB으로 설정했다면 IOPS는 최대 5,000IOPS 까지 설정할 수 있겠죠.

 

처리량(throughput)에 대해 알아볼까요?

최대 32,000IOPS로 설정되어있다면 io1 볼륨은 최대 256KiB의 I/O크기를 지원하고, 최대 500MiB/s의 처리량을 제공합니다.

32,000IOPS 이상으로 프로비정된 볼륨은 최대 16KiB의 I/O크기를 지원하고, 최대 1,000MiB/s 의 처리량을 제공합니다.

 

그럼 처음에 EBS의 타입이 변경이 가능할까요?

네 가능합니다. 하지만 타입 변경을 포함한 EBS의 모든 변경은 수정이 완료된 6시간 이후에 다시 변경가능하므로 신중히 판단하셔야합니다. AWS콘솔에서 변경하려고하면 아래와 같은 메시지를 확인할 수 가 있을 것입니다.

 

 

 

오늘은 EBS의 SSD 타입인 gp2와 io1에 대해서 알아보았습니다.

gp2의 버스트 기능을 고려하고, 실제로 계산해보려할 때 쉽지 않을 것입니다.

일반적으로 속적인 IOPS에 대한 요구가 없다면 대부분 gp2로 커버가 가능할 것이므로 미리 계산해볼 필요는 없을 것 같습니다.

 

단, gp2의 Base line IOPS가 용량(GiB)에 3:1로 비례해서 설정된 다는 것 io1의 설정가능한 IOPS는 용량(GiB)에 50:1 까지만 설정가능하다는 것 정도는 꼭 염두해야겠습니다.

 

 

 

 

반응형