반응형

AWS Lambda in GO

ASIS

  • Slack Webhook을 받는 파이선 메인 서비스 존재
  • Slack Webhook 서비스가 늘어남에 따라, 다른 요청들도 밀림 → 장애전파

  • 분당 20,000건

  • Slack 메시지가 밀리면서 장애 발생 DB 부하 → 모놀리틱서버였음…
  • Scale-up을 해서 해결했으나 → 굉장히 별로였음…

어떻게 고쳐야할까?

  • 서버리스로 구성하자…
  • Queue를 사용하자…
    • 요청을 받는 그대로 사용하면 DB가 죽으니 → 천천히 Consume 하자
    • 실패의 대한 모니터링 + 재처리를 구성해야 함

TOBE

AWS Resource

  • API Gateway → 가장 먼저 요청을 받고
  • AWS Lambda → MSK로 전달
  • Amazon MSK → 큐로 핸들링
    • 메시지를 처리해도 → 왠만하면 남아있음…

어떻게 개발했나?

  • golang으로 구성된 람다를 사용할때는 Kafka Producer를 사용하게 되는데
    • IBM/sarama를 사용 → 가능한 C Binding을 사용하지 않는 Pure Go를 선택
    • Confluenct는 Go를 사용하는데 → 인터페이스 과정에서 성능병목이 존재 + 크로스플랫폼 빌드가 존재…
  • 람다 핸들러를 쉽게 구현하기 위해 → aws/aws-lambda-go를 활용

결론

  • Golang 람다 최종용량은 6.8MB
    • 코드크기가 50MB를 초과하면 S3를 이용해야 하는데 → Go Build는 용량이 작아 편리 → Docker로 배포가 더 편함
    • 평균 실행시간 500ms ~ 3000ms (카프카 플러쉬로 인해서 큼)
  • Refactoring 해야할 부분
    • 실행시간을 줄이기 위해 → ARM 프로세서를 고려 (AWS Gravition 2)
    • 처리시간 줄이기 위해 → Lambda SIGTERM → Kafka flush 고민 중
반응형

+ Recent posts