목록 보기
DynamoDB를 사용하는 Go 서비스의 응답 시간 최적화 #2 TLS Handshake
백엔드

DynamoDB를 사용하는 Go 서비스의 응답 시간 최적화 #2 TLS Handshake

버즈빌
버즈빌
2022년 3월 29일

두줄요약

Go·DynamoDB 환경의 고지연 원인을 TLS Handshake와 짧은 타임아웃에 따른 커넥션 종료로 분석했습니다.\n타임아웃을 70ms로 조정해 재시도를 줄이고 커넥션 재활용을 유도했습니다.

문제 상황

  • 트래픽 증가 후 일부 gRPC 요청과 DynamoDB 쿼리에서 100ms 이상의 높은 응답시간 발생
  • 30ms 타임아웃·최대 3회 재시도 배포 후 연속 타임아웃 관측

원인 분석

  • 타임아웃 뒤 신규 커넥션 생성 과정의 TLS Handshake가 100ms 이상 소요
  • 짧은 context 타임아웃이 HTTP 커넥션 종료와 풀 미반납을 유발해 재시도마다 Handshake 발생
  • DynamoDB의 IP 간 TLS Session Resumption 미지원으로 Handshake 회피 불가

해결 방법

  • DynamoDB 응답 지연을 일부 허용하도록 요청 타임아웃을 70ms로 상향
  • 재시도 빈도를 낮추고, 비동기 커넥션 생성 후 유휴 커넥션 풀 재활용 기대

트레이드오프

  • 긴 응답의 대다수 개선과 일부 고지연 요청 포기 사이의 균형
  • IdleConnTimeout 확대 및 더미 트래픽 기반 커넥션 유지 방안의 비합리성·코드 복잡도

다음 읽기

#Go 주제를 이어서 읽기

DynamoDB를 사용하는 Go 서비스의 응답 시간 최적화 #2 TLS Handshake

트래픽 증가 후 일부 gRPC 요청에서 DynamoDB 응답 시간이 길어지는 현상을 다뤘습니다. Go HTTP Client와 TLS Handshake 관점의 점검 경험을 공유합니다.

버즈빌
버즈빌
백엔드

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...