Backend & 인프라

[FastApi] CPU를 많이 사용하는 APP 만들기 (CPU Bound)

UnoCoding 2022. 6. 30. 10:29
cpu를 많이 사용하는 APP을 만들기 전에 개념을 이해고 진행할 필요가 있다.

✅ 개념 1 🔎

🌈 프로그램과 프로세스의 차이

하드디스크에 있는 프로그램이 메모리에 올라갑니다.

[출처]https://losskatsu.github.io/os-kernel/process-thread/

그때부터 이것은 프로세스라고 합니다.

 

✅ 개념 2 🔎

🌈 I/O Burst vs CPU Burst

[출처]https://jhnyang.tistory.com/25

📌 한 프로세스 실행 도중, I/O를 하는 시간을 I/O 버스트라고 합니다.

             🩹  여기서 I/O란 "네트워크 통신 POST, GET...", "사용자 키보드 입력" 등을 이야기합니다.

 

📌 CPU에서 실행되는 시간을 CPU 버스트라고 합니다.

 

✅ 개념 2 🔎

🌈 I/O Bound vs CPU Bound

📌 전체적으로 I/O를 많이 하는 APP 이면 I/O Bound라고 하며

 

📌 CPU를 많이 사용하는 APP 이면 CPU Bound라고 합니다.

 

⚡ 실습 1(locust)

이제부터 CPU를 많이 사용하는 APP을 만들 도록 해봅시다.

 

준비물 : Web 프레임워크(FastAPI), python

스트레스 툴 : locust

 

locust(메뚜기)를 고른 이유 🌞:

python으로 작성이 되어서....

 

⛏️ FastAPI 설치하기

pip install fastapi
pip install uvicorn

⛏️ FastAPI 소스코드 작성(main.py)

import hashlib

from fastapi import FastAPI
import uvicorn

app = FastAPI()

@app.get('/hash/{key}')
def get_md5_hash(key: str):
    for i in range(100000):
        result = hashlib.md5(key.encode('utf-8')).hexdigest() 

    return result

@app.get('/hello')
def hello():
    return "hello"

if __name__ == "__main__":
    uvicorn.run("main:app", reload=True, host="0.0.0.0")

간단 설명 : 

⚡ 특정 key의 md5 hash를 가져오는 코드를 100,000번 호출시키는 API

⚡ hello를 출력하는 API

⛏️ FastAPI 실행

python main.py

실행 모습 127.0.0.1:8000

⚒️ locust 설치하기

pip install locust

⚒️ locust 실행하기

locust document: https://docs.locust.io/en/stable/quickstart.html
공식 문서가 잘 되어 있습니다.

 

이번 예제에서는 간단한 예제를 바탕으로 진행을 합니다.

 

위의 코드를cpu-test.py로 작성을 하고 나서 locust로 실행시켜 주자

locust -f cpu-test.py

http://localhost:8089/ 에 접근하게 된다면 아래와 같은 사이트가 나온다.

🥇 첫 번째 테스트할 유저의 수  👏👏저는 8명이 들어왔다 라는 가정

🥈 두 번째 한 유저가 초당 얼마나 호출을 하는지!! 👏👏 저는 한 명이 1초에 60번 호출

🥉 세 번째 테스트할 Host를 작성하는 것이다. 👏👏 이건 FastAPI실행 시 나오는 URL

 

⚒️ 실행 화면

 

⛏️ 서버 로그

'Backend & 인프라' 카테고리의 다른 글

[Nginx] 로드 밸런싱(Load balancing)  (0) 2022.07.05
[Git Actions] SSH으로 배포하기  (0) 2022.07.04
[Docker] Permission Denied  (0) 2022.06.30