가상면접 사례로 배우는 대규모 시스템 설계 기초(2) - 개략적인 규모 추정

2장 개략적인 규모 추정
김주혁's avatar
Mar 09, 2024
가상면접 사례로 배우는 대규모 시스템 설계 기초(2) - 개략적인 규모 추정

 
 
개략적인 규모 추정(back-of-the-envelope estimation)은 보편적으로 통용되는 성능 수치상에서 사고 실험(thought experiments)를 행하여 추정치를 계산하는 행위로서, 어떤 설계가 요구사항에 부합 할 것인지 보기 위한 것이다.
 
책 2장 서론부분에서 위와 같은 개략적인 규모 추정에 대해 나온다.
 
개략적인 규모 추정, 그러니까 back-of-the-envelop estimation은 직역하면 봉투 뒷면의 계산인 어림잡은 혹은 대략적인 추정이나 계산정도이다. 어떤 설계가 요구 사항을 충족하는지 파악하기 위해 사고 실험과 일반적인 성능 수치를 조합하여 생성한 추정치로서, 시스템 면접에서 성능 요구사항을 파악하기 위해 대략적 규모 추정을 효과적으로 하려면
 
2의 제곱수나 응답지연 값 그리고 고가용성과 관계된 값들을 잘 이해하고 있어야 한다.
 

2의 제곱수

분산 시스템에서 다루는 데이터는 매우 클 수 있지만 계산법은 기본으로 귀결된다.
 
올바른 데이터 계산 결과를 위해선 2의 거듭제곱을 사용하여 데이터 볼륨 단위를 아는 것이 중요하다.
notion image
 

모든 프로그래머가 알아야 하는 응답지연 값

 
https://www.linkedin.com/posts/alexxubyte_systemdesign-coding-interviewtips-activity-7126968760971714560-aZ7T/?trk=public_profile_like_view
 
제프 딘은, 2010년에 통상적으로 구현된 연산들의 응답지연 값을 공개했다.
 
사실 이런 지연시간에 대한 정확한 숫자를 외우는 것은 중요하지 않다. 중요한 것은 감각을 키우는 것이다.
 
디스크 탐색시간과 같은 일부 수치는 기술의 발전에 따라 크게 변화했다. 예를 들면 HDD ⇒ SDD와 같은 식으로 발전했고, 국가간 네트워크 지연시간 같은 것들은 AWS의 Global Accelerator같은 것들로 향상시킬 수 있었다.
 
이 지연시간의 기본을 위해 이런 시간 단위는 무엇을 의미하는지 살펴보면,
 
  • 1ns = 10^-9로서 1나노초인 10억분의 1초
  • 1μs = 10^-6로서 1마이크로초인100만분의 1초
  • 1ms = 10^-3로서 1밀리초인1000분의 1초
 
2020년 기준으로,
 
https://www.youtube.com/watch?v=FqR5vESuKe0
1ns 미만의 범위의 동작에는
  • CPU 레지스터에 엑세스하는 속도는 나노초 미만이다.
  • 최신 CPU의 clock cylcle또한 나노초 미만의 범위다.
    • 💡
      CPU 클럭 사이클은 중앙 처리 장치 (CPU)가 명령어를 실행하는 데 필요한 기본 단위
 
1~10 ns범위에는
  • L1 Cache및
  • L2 Cache가 있다.
  • 비용이 많은 CPU작업도 이 범위
  • 잘못된 분기 예측 페널티는 최대 20개의 cpu clock cycle이 소요될 수 있고 이 범위다.
 
10~100ns 범위에는
  • L3 Cache가 있는데, 이 범위 내에선 가장 빠른 동작이다.
  • Apple M1과 같은 최신 프로세스의 경우, 주 메모리 참조가 이 범위의 가장 느린 부분에 있다.
 
즉, 최신 CPU의 주 메모리 엑세스는 CPU 레지스터 엑세스보다 수백 배 느리다.
 
100~1000ns 즉, 1μs(마이크로초)의 범위에는
  • 시스템 호출 비용이 있는데, Linux에서는 간단한 시스템 호출을 수행하는 데 수백 나노초가 걸린다.
  • md5가 64비트 숫자를 해쉬하는 데 약 200ns가 걸린다.
 
1~10 μs의 범위(약 CPU 레지스터 엑세스보다 1000배 느린 수준) 에는
  • Linux 스레드 간의 컨텍스트 전환에는 최선의 시나리오로 계산해도 최소 몇 마이크로초가 걸린다. 사실 64kb의 데이터 하나를 다른 메모리 위치로 옮기는데 만, 몇 마이크로초가 걸린다.
    • https://www.youtube.com/watch?v=FqR5vESuKe0
 
10~100 μs의 범위에는
  • Nginx와 같은 네트워크 프록시는 일반적인 HTTP 요청을 처리하는데, 50μs가 걸린다.
  • 기본 메모리에서 1mb의 데이터를 순차적으로 읽는 데 50μs가 걸린다.
  • ssd의 읽기 지연시간은 이 범위에 속하며 8k 페이지를 읽는데, 100μs가 걸린다.
 
100 ~ 1000 μs의 범위에는
  • ssd 쓰기 latency는 읽기보다 약 10배 느리며, 페이지를 하나 쓰는데 1ms에 가까워 이 범위 맨 위에 있다.
  • 최신 Cloud 제공업체의 영역에서의 네트워크 왕복에는 과거에는 수백 μs가 걸렸다. 점점 더 빨라지는 추세이며 일부는 100μs 미만으로 걸린다.
  • 일반적인 Memcache 또는 Redis read 작업은 1ms정도 걸린다.
https://www.youtube.com/watch?v=FqR5vESuKe0
 
1 ~ 10ms의 범위에는
  • 최신 Cloud 업체의 각 영역간 네트워크 왕복은 요즘에는 이 범위에 속한다.
  • 하드디스크 탐색 시간은 5ms다.
https://www.youtube.com/watch?v=FqR5vESuKe0
 
10 ~ 100ms의 범위에는
  • 미국서부와 미국 동부 해안 그리고 미국 동부와 유럽 간 네트워크 왕복이 이 범위에 속한다.
  • 메인 메모리에서 1GB 데이터를 순차적으로 읽는 것도 이 범위에 속한다.
 
https://www.youtube.com/watch?v=FqR5vESuKe0
 
100 ~ 1000ms의 범위에는
  • 동영상 중 하나에서 bcrypt와 같은 느린 해시 기능을 이용하여 비밀번호를 암호화하는 방법, 비밀번호를 복호화하는데 300ms가 걸린다.
    • notion image
  • TLS 핸드셰이크는 일반적으로 250ms ~ 500ms의 범위에 있다. 여러 네트워크 왕복 처리가 있기 때문에, 이 속도는 각 네트워크 왕복 처리 기기 간 거리에 따라 달라진다.
    • notion image
  • 혹은 미국 서부에서 싱가폴로의 네트워크 처리가 이 범위에 속한다.
  • SSD에서 1GB를 순차적으로 읽는 것도 이 범위에 속한다.
 
마지막으로 1ms이상 걸리는 작업에는
  • 동영상을 같은 내트워크 내로 전송하는데 1ms이상 걸린다.
 
이렇게 응답 지연시간에 대한 구체적인 예시와 개념으로, 대략적 규모 추정에 관하여 도움이 될 개념에 대해 학습했다.
 

가용성에 관계된 수치들

 
고가용성은 시스템이 오랜 시간 동안 지속적으로 중단 없이 운영될 수 있는 능력이다. 가용성은 퍼센트(%)로 표현하는데, 100%는 시스템이 한 번도 중단되 적이 없었음을 의미하며 대부분은 99% ~ 100% 사이의 값을 갖는다.
 
SLA는 서비스 사업자가 보편적으로 사용하는 용어로서, 사업자와 고객간의 합의를 의미하고 가용성에 관한 서비스 사업자가 제공하는 가용시간은 공식적으로 기술되어 있다.
 
AWS, GCP, Azure는 전세계 클라우드 시장의 70%이상을 차지하고 있는 벤더사다. 각 클라우드 사는 클라우드 환경에서 가용성에 대하여 다음과 같이 안내하고 있다.
 
 
 
 

 
출처:
Share article

vlogue