파이썬 비동기는 성능 향상의 답이 아닙니다

  • 관리자 신현승
  • 카테고리: 개발이슈
  • 조회수: 563
  • 작성일:

이 글은 IT와 번역가 David가 칼 패터슨(Cal Paterson)의 글 <Async Python is not faster>을 번역한 내용으로, 저자는 데이터 처리 및 마이크로서비스 아키텍처에 경험이 많은 시니어 개발자입니다. 본문에서는 파이썬 비동기 방식의 성능 문제를 다룹니다.

 

저자는 허락을 받고 번역하였으며, 각주(*표시는 ‘번역자주’)와 링크는 원문에 따라 표시했습니다.

 

실제 벤치마크에서 비동기 파이썬은 동기식 파이썬보다 느리며, 비동기 프레임워크는 부하 시 불안정해지는 경향이 있습니다.

 

개발자들은 비동기 파이썬이 높은 동시성을 제공한다고 알고 있으나, 실제 성능은 사용 환경에 따라 다릅니다.

*API: 서로 다른 프로그램 간의 통신 방식

 

벤치마크 결과

동기식과 비동기식 웹서버 설정을 다양한 방식으로 테스트하였습니다.

 

 

응답 시간과 처리량을 기준으로 정리한 결과:

  1. 성능이 좋은 것은 동기식 프레임워크입니다.
    • 플라스크는 상대적으로 처리량이 낮습니다.
  2. 비동기 프레임워크의 성능은 전반적으로 낮습니다.
  3. 비동기 프레임워크는 지연 시간의 변동이 큽니다.
  4. Uvloop 기반 옵션이 더 나은 성능을 보입니다.
    • 필요시 Uvloop 사용을 추천합니다.

 

벤치마크 결과의 신뢰성

현실 환경을 반영한 벤치마크를 구성하였습니다.

 

 

리버스 프록시, 파이썬 코드, 데이터베이스와 커넥션 풀러를 포함한 실제 배포 환경을 최적화했습니다. 소스 코드는 GitHub에서 확인 가능합니다.

 

워커 수 최적화

성능 저하 시 워커 수를 점진적으로 늘려 최적 숫자를 찾아야 합니다. 비동기 프레임워크는 I/O 동시성을 통해 단일 워커로도 CPU를 최대한 활용 가능합니다.

일반적으로(2 x CPU 코어 수) + 1의 워커 수를 추천합니다.

 

테스트 환경 사양

Hetzner의 CX31 머신에서 벤치마크가 진행되었습니다.

 

비동기의 성능 저하 원인

처리량(Throughput)

성능에 영향을 미치는 주요 요소는 비동기와 동기의 차이가 아닌 처리된 파이썬 코드의 네이티브 코드 대체입니다.

 

지연 시간(Latency)

비동기에서는 지연 시간이 더 불안정하며, 이는 협력적 멀티스레딩으로 인해 발생합니다.

 

반면, 동기식 서버는 선점적 멀티프로세싱을 사용하여 시간 분배의 공정성을 보장합니다.

 

다른 벤치마크의 차이

대부분의 벤치마크에서 동기식 프레임워크의 워커 수 설정이 부족해 성능이 낮게 나타납니다.

 

현장 경험

복잡한 환경에서는 비동기 애플리케이션의 성능 저하가 더욱 심화될 수 있습니다. 예를 들어, Etsy는 지연 시간 불안정성을 경험했습니다.

 

결론적으로, 성능 최적화를 위해 동기식 파이썬을 기반으로 네이티브 코드 사용을 recommended합니다.


<원문>

Async Python is not faster


해당 기사는 GPT를 이용하여 요약한 내용입니다.

원문보기


코멘트 (0)