콘텐츠로 이동

대규모시스템설계기초 ch2

대규모 시스템 설계 기초 ch2. 계략적인 규모 추정

  • 개요
    • 추정치를 계산하는 행위로써, 어떤 설계가 요구사항에 부합할 것인지 보기 위한 것
  • 2의 제곱수
    • 제대로된 계산 결과를 얻으려면 데이터 볼륨의 단위를 2의 제곱수로 표현한 결과를 알자
      • 2^10 = 1KB
      • 2^20 = 1MB
      • 2^30 = 1GB
      • 2^40 = 1TB
      • 2^50 = 1PB
  • 모든 프로그래머가 알아야 하는 응답지연 값
    • 2020년 기준 연산 처리속도)
      • L1 캐시 참조: 1ns
      • L2 캐시 참조: 4ns
      • 뮤텍스 락/언락: 17ns
      • 일반 상용 네트워크에서 2kb 전송: 44ns
      • 주 메모리 참조: 100ns
      • Zippy로 1kb 압축: 2μs
      • 메모리에서 1M 순차적 읽기: 3μs
      • SSD에서 임의 위치 데이터 읽기: 16μs
      • SSD에서 1M 순차적 읽기: 49μs
      • 동일 데이터 센터 내 패킷 왕복 지연시간: 500μs
      • 디스크 탐색: 2ms
      • 디스크에서 1M 순차적 읽기: 2ms
      • CA - 네덜란드 패킷 왕복 지연시간: 150ms
    • Tip)
      • 메모리는 빠르지만 디스크는 아직도 느리다
      • 디스크 탐색은 가능한 한 피하라
      • 단순한 압축 알고리즘은 빠르다
      • 데이터를 인터넷으로 전송하기 전에 가능하면 압축하라
      • 데이터 센터는 보통 여러 지역에 분산되어 있고, 센터들 간에 데이터를 주고 받는데는 시간이 걸린다.
  • 가용성에 관련된 수치들
    • 가용률은 관습적으로 9를 사용해 uptime을 표현. 99.999% => 하루 장애시간 864ms
    • QPS/저장소 요구량 측정 문제)
      • 조건
        • 서비스의 MAU, DAU
        • Active User 당 하루 평균 x건의 행동 y를 한다.
        • 행동 y 중 특수한 행동은 z% 이다.
        • 데이터는 a년간 보관된다.
      • QPS 구해보기
        • 행동 y는 2건의 Query
        • 행동 y 중 특수한 행동은 3건의 Query
        • 총 행동 y = (2 * (100 - z)/100) + (3 * z/100) Query로 산정...
        • DAU * x * {(2 * (100 - z)/100) + (3 * z/100)} = QPS
        • 피크 시간대에 데이터 분포가 ~~ 한 경우가 있으니 해당 시간대엔 QPS * 3 => Max QPS
      • 저장소 요구량
        • 평균 x건 행동에 대한 데이터 크기 (200byte)
        • DAU * x * 200byte = 하루에 저장되는 데이터 크기 => 5년치 계산
    • 결국 논리적 사고력이 중요하다. 문제를 풀어나가는 절차. 올바른 절차 > 정확한 계산
      • 숫자/시간은 근사치여도 괜찮다
      • 가정을 적어두자
      • 단위를 기록하자
      • QPS 측정하는 연습해보자
  • 질문
    • 각자 맡고 있는 모듈의 QPS를 한번 논리적으로 추론해볼까요?

스터디