반응형
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를 사용하는데 → 인터페이스 과정에서 성능병목이 존재 + 크로스플랫폼 빌드가 존재…
- IBM/sarama를 사용 →
- 람다 핸들러를 쉽게 구현하기 위해 → aws/aws-lambda-go를 활용
- …
결론
- Golang 람다 최종용량은 6.8MB
- 코드크기가 50MB를 초과하면 S3를 이용해야 하는데 → Go Build는 용량이 작아 편리 →
Docker로 배포가 더 편함
- 평균 실행시간 500ms ~ 3000ms (카프카 플러쉬로 인해서 큼)
- 코드크기가 50MB를 초과하면 S3를 이용해야 하는데 → Go Build는 용량이 작아 편리 →
- Refactoring 해야할 부분
- 실행시간을 줄이기 위해 → ARM 프로세서를 고려 (AWS Gravition 2)
- 처리시간 줄이기 위해 → Lambda SIGTERM → Kafka flush 고민 중
반응형
'컨퍼런스 내용정리' 카테고리의 다른 글
강연정리) The ideal micro-frontend platforms (Architecture 중심) (1) | 2025.02.09 |
---|---|
강연정리) AWS에서 글로벌 인프라 관리하기 (0) | 2024.12.22 |
강연정리) EKS 아키텍처 구성하기 (0) | 2024.12.22 |
강연정리) EKS + Kinesis = CQRS (1) | 2024.12.22 |
강연정리) 대규모 마이그레이션 전략 (0) | 2024.12.22 |