당근 피드, 프로파일링, 서킷 브레이커, PGO로 안정성 UP!
by DD
8개월 전
조회수 2
프로파일링을 통해 문자열 연산 최적화, 메모리 할당 개선 등 성능 병목 지점을 해결함
서킷 브레이커 도입으로 장애 전파를 방지하고, API별 독립적인 서킷 관리로 부분적 가용성 확보
PGO를 활용한 프로파일링 빌드 파이프라인 구축으로 P99 레이턴시 500ms 이내 달성
Go 프로파일링을 통한 성능 개선
Go 언어의 프로파일링 기능을 활용하여 CPU 사용률, 메모리 할당 패턴 등을 분석한다. 구체적으로 fmt.Sprintf()와 같은 문자열 연산 최적화를 통해 메모리 사용량 감소를 달성했다. 따라서 strings.Builder를 활용하고, 메모리 풀 기반의 바이트 슬라이스 변환을 적용하여 성능을 향상시켰다.
서킷 브레이커를 활용한 장애 대응
분산 시스템에서 서킷 브레이커는 장애 전파를 막는 핵심 요소이다. API별 독립적인 서킷 설계를 통해 특정 API 장애가 전체 시스템에 미치는 영향을 최소화한다. Open/Closed/Half-Open 상태 관리를 통해 서비스 가용성을 확보하고, 장애 복구 시간(RTO)을 단축한다.
PGO 기반 프로파일링 빌드 파이프라인 구축
PGO(Profile-Guided Optimization)를 통해 테일 레이턴시를 개선하고, CPU 파이프라인 스톨을 줄인다. 프로덕션 환경에서 수집된 프로파일 데이터를 기반으로 최적화된 바이너리를 생성한다. 결과적으로 P99 응답 시간 500ms 이내를 달성하고, 시스템 안정성을 향상시켰다.