2. 개략적 규모 추정

💬 시스템 설계

  • 시스템 용량, 성능 요구사항을 추정해보며 시스템을 설계하는 것이 중요하다.

  • 개략적 규모 추정은 보편적으로 통용되는 성능 수치 상에서 머릿속으로 실험해보며 추정치를 계산하는 것을 의미한다.

  • 이를 효과적으로 해내려면, 2의 제곱수, latency 값, 가용성에 관련된 수치들을 잘 이해하고 있어야 한다.

💬 2의 제곱수

2의 제곱수와 근사치

  • 1 byte == 8 bits == ASCII 문자 한 개

  • Binary Prefix

    • 10진수 단위가 아닌 2진수 단위에는 binary prefix인 i 를 붙여 표현한다.

    • 2^10 (1,024) bytes를 KiB (Kibibyte), 2^20 (1,048,576) bytes를 MiB (Mebibyte) 라고 칭한다.

10의 제곱수

  • 10^3 - 1KB

  • 10^6 - 1MB

  • 10^9 - 1GB

  • 10^12 - 1TB

  • 10^15 - 1PB

  • 10^18 - 1EB

💬 응답 지연값 (latency)

  • 보편적으로 특정 연산에서 수행되는 작업 시간인 latency는 아래와 같다.

  • 이를 통해 얻을 수 있는 인사이트는 다음과 같다.

    • 메모리는 빠르지만 디스크는 느리다.

    • 디스크 탐색은 가능한 피하도록 한다.

    • 단순 압축 알고리즘은 빠르다.

    • 데이터 전송하기 전 가능하면 압축하도록 한다.

    • 데이터 센터들은 보통 여러 지역에 분산되어 있고, 데이터 센터 간 데이터를 주고받는 데에는 시간이 오래 걸린다.

💬 고가용성 관련 수치

  • 고가용성: 시스템이 오랜 시간동안 지속적으로 중단 없이 운영될 수 있는 능력

  • SLA (Service Level Agreement)

    • 서비스 사업자(Service Provider)와 고객 사이 맺어진 합의를 의미한다.

    • 서비스 사업자가 제공하는 서비스의 가용 시간(uptime)을 공식적으로 기술한다.

    • 대부분의 대기업은 99% 이상의 SLA를 제공한다.

    • SLA가 100%이라면, 한번도 중단된 적 없는 시스템인 것이다.

💬 QPS 계산

  • QPS

    • Query Per Second

    • 특정 쿼리 서버가 초당 처리하는 트래픽 양을 의미한다.

    • DNS 서버의 성능은 보통 QPS로 평가된다.

    • (일간 능동 사용자 * 사용자별 일간 평균 요청량)/24시간/3600초 로 계산한다.

    • Peak QPS의 경우 보통 QPS * 2 로 계산한다.

  • TPS

    • 서버가 초당 처리할 수 있는 트랜잭션 개수를 나타낸다.

    • 한 번의 요청에 여러 단계가 포함되는 경우 단순한 요청-응답 처리가 아니며, 이를 트랜잭션이라고 지칭한다.

    • 보통 시스템 성능 평가 시에 TPS를 사용한다.

    • 시스템의 처리 능력은 최소 처리 용량을 가진 모듈의 TPS 값에 의해 결정되며, 시스템 최적화를 통해 개선할 수 있다.

  • 연습문제

    • 10M명의 daily active users가 존재하고, 각 사용자마다 매일 평균 100개의 읽기 요청을 보내고, 매일 5개의 새로운 데이터를 생성하는 경우 QPS는?

      • QPS: 10M * 100 / 24h / 3600s ~= 11570.xx

      • Peak QPS: 11570*2 ~= 23,140

      • WPS(WritePerSecond): 10M * 5 / 24h / 3600s ~= 578.xx

    • 평균 메시지 읽기 크기는 50 bytes이고 메시지 쓰기 1kb인 경우 Throughput은?

      • Avg Read Throughput: 50 * QPS ~= 50byte * 12 * 10^3 = 600kb

      • Avg Write Throughput: 1kb * WPS ~= 1kb * 580 = 580kb

💬 팁

  • 정확한 계산보단 간소화한 근사치를 활용하도록 한다. 99987 / 9.1 이라는 수식을 직접 계산하지 말고, 100000 / 10 이라고 표현해도 충분하다.

  • 결론을 도출하는 것만이 중요한 것이 아니다. 결론 도출에 영향을 미친 가정들을 적어두어야 한다.

  • 단위를 중요시해야 한다. 계산 시에 단위를 꼭 붙여 모호함을 없애야 한다.

  • QPS, 최대 QPS, 저장소 요구량, 캐시 요구량, 서버 수 등을 계산하는 연습을 해두면 좋다.

출처

https://dev.to/vladisov/back-of-the-envelope-calculation-4eal

Last updated