cpu를 많이 사용하는 APP을 만들기 전에 개념을 이해고 진행할 필요가 있다.
✅ 개념 1 🔎
🌈 프로그램과 프로세스의 차이
하드디스크에 있는 프로그램이 메모리에 올라갑니다.
그때부터 이것은 프로세스라고 합니다.
✅ 개념 2 🔎
🌈 I/O Burst vs CPU Burst
📌 한 프로세스 실행 도중, 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
⚒️ 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 |