iops, ebs, storage, ssd, hdd, blocksize
1. 왜.
- aws instance를 만들다보면 저장장치를 추가할때 iops를 보장해주는 내용이있다.
- network와 같은 경우는 그 측정단위가 명확하다. 00mb/s와 같이 그러나 iops는 익숙치 않으며 애매하다.
- 그렇다면 iops는 무엇으로 측정될까? 내가 정말 서비스를 위해 컴팩트하게 iops를 설정한다면 어떠한 기준으로 iops를 정해야할지 궁금해졌다.
2. 그래서 무엇인가.
Iops란 무엇인가?
- input/output operations per second
- 저장장치의 속도를 나타내는 측정 단위
- 초당 데이터 전송량 = iops * block size
- iops 관점으로 보면
- iops = 초당 데이터 전송량/block size
- iops가 100을 보장한다 라고 하면, read/write에 있어 1초에 100* 블럭크기 만큼 보장한다고 생각하면된다.
- 그렇다면 중요한 것은 block size가 된다. block size를 알아야 초당 데이터가 실제로 얼마나 들어가게되는지 알게될 수 있기 때문이다.
Block
- 저장장치의 block은 해당 장치마다 사이즈가 다르다.
- 즉 읽고 쓰기 위한 최소 단위라고 생각하면 된다. aws는 ebs의 iops와 볼륨 당 최대처리량(초당처리량)을 보았을때 16k단위로 처리되는 것으로 보인다.(문서에 적어놨으니…일반적으로 적용될듯..)
2. 결론
- 장치마다 다르겠지만 iops를 본다면 * 블럭 사이즈의 용량을 초마다 read/write해준다고 생각하면 될듯 싶다.
- 블럭 사이즈를 직접 안다면 더욱 명확할테고 대부분은 스펙에 그 정보들이 나와있으므로 참고하여 read/write 사이즈를 예측하면 된다.
- 근데 network 처럼 초당 처리량으로 보여줘도 될거같은데 왜 io를 별도로 표시 해주지? 다음에 물어봐서 채워넣어야겠다.
3.마치며
- healthcheck는 discovery 서버의 가장 중요한 요소이다. 서비스의 상태 자체를 관리하기 때문이다.
- 상태를 관리하기 위한 조건이 중요할듯하다. 즉 bash 명령을 줄때 성공이 나오는 조건이 무엇이냐가 중요하다는 이야기다.
- 서비스가 상태가 passing인지 critical인지 등을 시스템의 민감도를 적당히 고민하여 정하여 할 것이다.
Ref