# Amazon Elastic Compute Cloud (Amazon EC2)
오늘날에는 대부분의 server-client 모델의 컴퓨트 방식을 체택하고 있다.
클라이언트는 서버에 요청을 서버는 요청에 대한 응답을 준다.
이런 단일 통신이 아닌 복잡한 통신들이 우리는 필요할텐데 이떄 인스턴스를 늘리고 줄이고를 자유롭게 할 수 있다.
key - values를 자유롭게 추가하고 삭제 할 수 있다.
AWS는 필요한 리소스 만큼 사용할수 있도록 클라우드를 제공한다.
미리 통보하지 않고도 필요한 스토리지를 필요한 순간에 바로 사용할 수 있습니다.
이러한 클라우드 컴퓨팅의 배포는 3종류가 있다
# 클라우드 컴퓨팅 배포 모델
클라우드 기반 배포
- 애플리케이션의 모든 부분이 클라우드에서 실행
- 기존 애플리케이션을 클라우드로 마이그레이션합니다
- 클라우드에서 새 애플리케이션을 설계 및 빌드
- 완전히 클라우드에 기반한 가상 서버, 데이터베이스, 네트워킹 구성 요소로 구성된 애플리케이션을 만들 수 있다.
온프레미스 배포
- 가상화 및 리소스 관리 도구를 사용하여 리소스를 배포
- 애플리케이션 관리 및 가상화 기술을 사용하여 리소스 활용도를 높인다.
- 프라이빗 클라우드 배포라고도 함
- 가상화 기술을 사용한다는 점에서 레거시 IT 인프라와 같다.
하이브리드 배포
- 클라우드 기반 리소스를 온프레미스 인프라에 연결
- 클라우드 기반 리소스를 레거시 IT 애플리케이션과 통합
아마존 EC2를 이용하여 클라우드에서 배포를 할 수 있다.
# EC2 instance
인스턴스는 크기의 조정 혹은 환경의 조정이 사용자에 의하여 자유롭게 설정가능한 컴퓨팅을 클라우드로 제공하는 것
인스턴스에는 운영 체제, 애플리케이션 서버 애플리케이션이 포함된다.
인스턴스의 특정 하드웨어 구성인 인스턴스 유형을 선택한다.
인스턴스 유형
- 범용
- 컴퓨팅 최적화 : 고성능, 과학적 모델링, 게임 서버, 광고 서버 엔진, 기계 학습 등
- 메모리 최적화 : 대규모 데이터 세트를 처리하기 위한 인스턴스
- 가속화된 컴퓨팅 : 부동 소수점 계산 그래픽 처리 데이터 패턴 일치 등
- 스토리지 최적화 : 매우 큰 데이터 세트에 대한 읽기 쓰기 엑세스
# ec2 auto scaling
ex2 컴퓨팅을 통하면 request의 쏠림이 발생하였을때 이를 효과적으로 처리 할 수 있도록 자동으로 같은 환경의 컴퓨팅을 추가해 줄 수 있다.
이는 단순히 데이터 베이스의 크기나 메모리의 크키를 늘려주는 개념이 아니라, 효과적으로 트래픽을 각 컴퓨터에 분배하여 처리할 수 있도록 시스템 되어 있다.
만약 나의 어플리케이션이 특정 시간이나 기간에 리소스의 요구가 많아진다면, 이것을 효과적으로 수요가 증가할 때 추가적인 인스턴스가 생성되고 수요가 감소하면 알아서 인스턴스 또한 파괴되어 없어진다.
이때 AWS 사용자는 최소 인스턴스와 최대 인스턴스를 설정할 수 있다.
자동으로 스케일이 업된다고 하더라소 리소스가 효율적으로 분배가 안 된다면 효율을 내기 어려울 텐데 이를 도와주는 것이 로드 벨런싱이다.
# Elastic load Balancing
로드 벨런싱은 애플리케니션 트래픽을 생성된 인스턴스에 골고루 분배하는 작업을 진행해 줍니다.
인스턴스 한쪽에 리소스가 쌓이는 것을 방지 할 수 있고, 인스턴스의 처리속도 향상에 도움이 됩니다.
# SNS vs SQS
밀접한 관계를 형성하고 있는 애플리 케이션을 느슨한 연결을 할 수 있도록 돕습니다.
느슨한 연결을 통해 마이크로서비스 접근 방식을 통해 애플리케이션을 설계할 수 있습니다.
SQS(Simple Queue Service)메시지 손실이나 다른 서비스 없이 소프트웨어 구성 요소 간의 리소스를 저장, 전송, 수신 할 수 있습니다.
대기열에 메시지를 보내고 서비스는 메시지를 처리한 이후에 대기열에서 삭제합니다.(Queue)
SNS(Simple Notification Service)는 게시/구독 서비스입니다.
구독자에게 메세지를 게시할 수 있습니다. web server(http, https), email, AWS Lambda 함수 등을 통해 메세지를 게시할 수 있습니다