배포 및 유지보수 / 벤치마크 성능 테스트
이 문서에서는 DataFlux Func의 벤치마크 성능 테스트 방법을 주로 소개합니다.
1. 서문
이 문서의 모든 예제 결과는 다음 하드웨어 환경에서 테스트한 결과입니다.
| 설명 | |
|---|---|
| 컴퓨터 | HP ProBook 노트북 |
| CPU | AMD Ryzen 5 7530U with Radeon Graphics / 4.5 GHz |
| 메모리 | 32 GB / 3200 MHz (0.3 ns) |
| 운영 체제 | Ubuntu 22.04.5 LTS |
2. Benchmark 테스트 패키지
Benchmark.zip을 다운로드하여 DataFlux Func로 가져옵니다.
Benchmark 테스트 패키지에는 다음 내용이 포함되어 있습니다.
| 내용 | 설명 |
|---|---|
스크립트 세트 benchmark |
|
함수 benchmark__main.hello_world |
"ok"를 직접 반환하는 빈 함수이며, 동시성 테스트에 사용됩니다 |
함수 benchmark__main.json_dump |
JSON 직렬화 / 역직렬화를 수행하며, 성능 테스트에 사용됩니다 |
함수 benchmark__main.calc_pi |
원주율을 계산하며, 성능 테스트에 사용됩니다 |
동기 API benchmark-hello-world |
동시성 테스트에 사용됩니다 |
예약 작업 benchmark-hello-world |
작업 스케줄링 성능 테스트에 사용됩니다 |
예약 작업 benchmark-compute-pi |
계산 성능 테스트에 사용됩니다 (원주율 계산) |
예약 작업 benchmark-json-dump-and-load |
계산 성능 테스트에 사용됩니다 (JSON 직렬화 / 역직렬화) |
3. 테스트 실행
Benchmark 테스트 패키지를 가져오면, 예약 작업이 자동으로 실행되므로 몇 분 후 작업 기록에서 결과를 확인할 수 있습니다.
DataFlux Func의 동시성 성능 테스트는 다른 도구를 사용하여 수행해야 합니다.
3.1 작업 스케줄링 성능 테스트
Benchmark 테스트 패키지를 가져온 후 몇 분간 기다리면, '예약 작업'의 'Hello, World' 작업 기록에서 결과를 확인할 수 있습니다.
일반적으로 각 작업의 소요 시간은 10밀리초 이내여야 합니다.
3.2 계산 성능 테스트
Benchmark 테스트 패키지를 가져온 후 몇 분간 기다리면, '예약 작업'의 'Compute pi' 및 'JSON dump and load' 작업 기록에서 결과를 확인할 수 있습니다.
'서문'의 테스트 환경을 기준으로, 각 작업의 소요 시간은 약 1초입니다:
- 원주율 계산 'Compute pi'
- JSON 직렬화 / 역직렬화 'JSON dump and load'
3.3 함수 API 동시성 성능 테스트
동시성 성능을 테스트할 때는 ab (ApacheBench) 도구를 사용하여 테스트할 수 있습니다.
아직 ab를 설치하지 않은 경우, 다음 명령으로 설치할 수 있습니다:
| Bash | |
|---|---|
1 | |
| Bash | |
|---|---|
1 | |
ab를 사용하여 테스트 패키지의 'Hello, World'를 호출 테스트하는 명령은 다음과 같습니다:
| Bash | |
|---|---|
1 | |
| Bash | |
|---|---|
1 | |
'서문'의 테스트 환경을 기준으로, 빈 함수의 동시 처리는 약 1000입니다 (Requests per second):
| ab 테스트 출력 | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | |
4. 성능에 영향을 미치는 원인
작업의 실제 실행 내용은 실제로 호출되는 스크립트에 의해 결정되므로, 작업 실행 시간이 오래 걸리는 경우 코드에 다음과 같은 문제가 있는지 확인할 수 있습니다.
4.1 대량의 print(...)
디버깅의 편의를 위해 스크립트에서 DB의 데이터, API가 반환한 데이터를 모두 print(...)로 직접 출력하는 경우가 있습니다.
DataFlux Func는 작업 실행 시 print(...) 내용을 자동으로 기록하므로, 이러한 방식은 매우 큰 성능 손실을 초래합니다.
코드를 프로덕션에 투입한 후에는 필요한 print(...) 출력만 남기고, 긴 텍스트 출력은 피하는 것이 좋습니다.
4.2 외부 시스템 응답이 느린 경우
스크립트에서 외부 DB를 조회하거나 API 인터페이스를 호출할 때 (DQL 쿼리 실행 등 포함) 네트워크가 지연되거나 단순히 상대 시스템의 응답이 느린 경우에도 작업 실행 시간이 길어질 수 있습니다.
이것은 DataFlux Func와 기본적으로 관련이 없으며, 이러한 외부 시스템 담당자에게 연락하여 응답 속도를 개선해야 합니다.
다음은 처리 소요 시간을 테스트하는 간단한 예제 코드입니다.
| Python | |
|---|---|
1 2 3 4 5 6 7 | |