728x90
반응형

msa 아키텍처 4

[msa-perf-lab] CPU Bound 작업 성능 비교: Flask 자체 연산 vs Go 위임 - 멀티스레드 병렬 처리의 효율성 증명

저번 시간엔 RabbitMQ 비동기 처리를 통해, Flask의 I/O Bound 병목점을 해결해 보았다. 응답시간은 약 500배 차이가 났었고, 처리량 및 드랍률도 RPS가 증가할수록 격차가 심해졌다. 이번 시간엔 Flask의 나머지 대표적 병목인 CPU Bound 작업을 Go에 위임해 볼 것이다. Flask는 Python의 GIL 한계 때문에 멀티코어 + 병렬 처리의 이점을 전혀 얻을 수 없어, CPU 연산 중엔 GIL을 놓지 못해 완전히 블로킹 되어 성능이 급감한다. 이러한 CPU Bound 작업을 병렬 처리에 특화된 Go에 위임하여, 어느 정도의 성능 향상을 가져오는지를 테스트 할 것이다. 기존 방식인 Flask 자체 연산 방식은, CPU 연산을 수행하는 동안 GIL에 묶여 동시에 단 하나의 코어(..

[msa-perf-lab] 메시지 큐(RabbitMQ) 비동기 처리 전후 I/O 작업 성능 테스트

이번 성능 테스트에서는 I/O 바운드 작업에 대한 클라이언트 응답 시간을, 메시지 큐 비동기 처리 도입 전/후로 테스트 했다. 사용자 -> Flask -> Go(Gin) 흐름으로 사용자 요청이 전달되고, 실제 비즈니스 로직 작업은 항상 Go에서 한다. 이 때, 실제 비즈니스 로직이 아닌 time.sleep() 함수로 대체하여 병목 시간 1초를 시뮬레이션한다. 기존 방식인 동기(Sync)방식은, Flask에서 Go에게 직접 요청을 건네고 Go가 1초 후 응답하는 것을 기다렸다가 클라이언트에게 응답한다.메시지 큐 비동기(Async)방식은, Flask에서 RabbitMQ에 메시지를 발행(publish)하고 클라이언트에게 즉시 응답한다. Go의 컨슈머는 무한 대기 상태로 있다가, 큐에 메시지가 publish되면..

[msa-perf-lab] Flask & PostgreSQL 개발환경 세팅 및 컨테이너화, docker-compose 그룹화

Flask, PostgreSQL 서버를 띄우고 연동한 후, DockerFile 작성 및 docker-compose로 그룹화했다. 디렉터리 구조 이번 프로젝트는 MSA 아키텍처 및 백엔드 고급 기술들의 성능 측정이 목표이기 때문에, OOP 원칙을 철저히 준수한다거나 프로젝트 구조를 짠다거나 하는 건 전부 패스했다. 사실 코드가 그렇게 많지도 않을 것이다. 프로젝트가 마무리 되면, 디렉터리 구조를 조금 정리하려고 한다. flask-gateway는 플라스크 서버가 저장되는데, 이름 그대로 클라이언트의 요청을 직접 받는 gateway 역할을 수행할 것이다. go-core엔 Go(Gin) 서버가 담길 것이고 이름 그대로 core engine 역할을 맡아 성능 병목이 예상되는 복잡한 연산을 맡을 것이다. doc..

[msa-perf-lab] MSA 성능 실험 프로젝트 - Flask & Go(Gin)

프로젝트 개요Flask + Go(Gin) 기반 MSA 아키텍처 성능 실험 프로젝트를 시작한다. 서비스 목적이 아닌 성능 개선 및 측정/검증 프로젝트이며 UI/UX, 도메인, 비즈니스 로직 등을 철저히 제외하고 백엔드 고급 기술 + 성능 개선 및 측정에 목표를 둔다. 프로젝트 목적- 이력서 & 포트폴리오 업그레이드 및 개인 실력 향상 주요 내용- Flask & Go(Gin) MSA 아키텍처 설계 및 구현- Flask & Go(Gin) 서버 간 Rest/gRPC 성능 측정- Flask 단일 vs Flask & Go 성능 측정 (CPU 집약적 연산, 외부 API 호출, 대용량 데이터 처리 등)- Docker/Docker compose 활용한 컨테이너 그룹화 및 Kubernetes 연동 컨테이너 오케스트레이션-..

728x90
반응형