11. 서버리스
운영 오버헤드를 줄이고 리소스 비용을 최적화할 수 있는 방법이 무엇일까?
- 프로비저닝하거나 관리할 인프라 없음
- 소비 단위에 따라 자동으로 크기 조정
- 종량제 요금
- 내장된 보안, 고가용성 컴퓨팅
Amazon API Gateway
API Gateway
- 애플리케이션을 위한 진입점 생성
- 수천 건의 동시 API 호출 처리
- 인터넷 연결 또는 내부 트래픽만 선택
- 여러 마이크로서비스를 위한 통합 API 프론트엔드 생성
- 백엔드에 DDos 보호 및 제한 기능 제공
- 백엔드에 대한 요청을 인증 및 권한 부여
- 서드 파티 개발자에 의해 API 사용을 조절, 측정 및 수익화
Amazon Simple Queue Service(SQS)
신뢰할 수 있는 서비스 간 통신을 위해 메시지 대기열을 어떻게 생성할까?
Amazon SQS
- 완전관리형 메시지 대기열 서비스
- 처리 및 삭제될 때까지 메시지를 저장
- 발신자와 수신자 간 버퍼 역할
Amazon SQS를 통한 느슨한 결합
- 느슨한 결합 - 전처리 단계를 컴퓨팅 단계 및 후처리 단계와 분리할 수 있음. 비동기식 처리가 사용되므로 생산자 로직이 소비자 로직과는 별도의 자체 구성 요소에 격리됨.
- 내결함성 - 애플리케이션 예외나 트랜잭션 장애가 발생하는 경우 주문 처리를 재시도할 수 있음. 최대 재시도 횟수에 도달하면 SQS는 DLQ(Dead Letter Queue)로 메시지를 리디렉션.
- 급증하는 트래픽 처리 - 버퍼로 사용됨.
Amazon SQS 사용 사례
- 작업 대기열 - 동일한 양의 작업을 동시에 처리하지 못할 수 있는 분산 애플리케이션의 구성 요소 분리. 표준 대기열 or FIFO 대기열 중 선택 가능
- Standard - 메시지 최소 1회 이상 들어갈 수 있음. 따라서 멱등성 보장해야함. 순서 보장 X
- FIFO - 정확히 한 번, 순서 보장, 성능 하락
- 버퍼링 및 배치 작업
- 요청 오프로딩
- 인스턴스 자동 크기 조정
Amazon SQS 대기열 구성 최적화
폴링 유형
- 짧은 폴링
- 요청을 수신하는 즉시 소비자에게 응답 전송
- 응답 수 늘어남. 비용 증가
- 긴 폴링
- 메시지가 하나 이상 도착하거나 폴링 시간이 초과되기 전까지 응답 반환 안함
- 응답 빈도 낮아짐. 비용 감소
메시지 대기열을 사용해야 하는 경우
- 서비스 간 통신
- 비동기 작업 항목
- 상태 변경 알림
사용하지 않아야 하는 경우
- 특정 메시지 선택
- 대용량 메시지
Amazon Simple Notification Service(Amazon SNS)
pub-sub 메시징 패러다임을 따르며 푸시 메커니즘을 사용하여 클라이언트에 알림 전달
Amazon SNS 사용 사례
- Amazon CloudWatch 경보 알림
- 메일 발송 목록 이메일 및 SMS
- 앱 업데이트 푸시 알림
Amazon SNS의 특성
- 게시된 단일 메시지
- 회수 옵션이 없음
- HTTP 또는 HTTPS 요청
- 표준 또는 FIFO 주제
여러 SQS 대기열에 Amazon SNS 게시
팬아웃 시나리오. SNS 주제로 전송된 후 복제되어 여러 SQS 대기열로 푸시됨. 비동기식 병렬 처리 가능.
Amazon Kinesis
실시간 애플리케이션 구동을 위해 스트리밍 데이터를 수집하려면 어떻게 해야 할까? ex) 클릭 스트림 캡쳐
Kinesis Data Streams 개요
- 스트림을 생성하고 샤드 수를 지정한다
- 샤드는 스트림에서 고유하게 식별되는 데이터 레코드 시퀸스이다.
- 스트림은 각 샤드에서 초당 1MB를 수신할 수 있다.
- 생산자가 스트림에 데이터를 쓰고, 소비자는 생산자가 생성하는 스트리밍 데이터를 읽는다
Kinesis Data Firehouse 개요
AWS Step Funciton
다단계 워크플로우를 쉽게 오케스트레이션 하는 방법은 무엇일까?
Step Functions 상태 머신
복잡한 분산 워크플로의 오케스트레이션
- 상태 머신에서 몇가지 태스크 수행 (Task)
- 실행할 브랜치 선택 (Choice)
- 입력을 출력으로 전달하거나 일부 수정된 데이터 전달 (Pass)
- 특정 시간 동안 또는 지정된 시간/날짜까지 실행 지연 (Wait)
- 병렬 브랜치 시작 (Parallel)
- 동적으로 단계 반복 (Map)