EC2 인스턴스에서 포옹을 방지하는 방법은 무엇입니까?


9

앱 스토어에 iOS 앱을 보유하고 있으며 최근 EC2에서 호스팅되는 내 랜딩 페이지로의 트래픽이 급증하여 페이지가 응답하지 않아 인스턴스를 다시 시작하고 업그레이드하여 페이지를 복구 할 수있었습니다. t2. 매체.

이제 저는 같은 죽음을 다시 방지하기 위해 기술을 구현할 사람을 고용하려고합니다. 필자의 경험은 기본 devops를 이해할 수있게 해주지 만 AWS의로드 밸런서로는 충분하지 않습니다. 인스턴스에 적합한 저렴한 구현이 무엇인지 알고 싶습니다.

내 방문 페이지와 iOS 앱 백엔드는 동일한 인스턴스에서 호스팅됩니다.


1
방문 페이지가 정적인가요?
Michael-sqlbot

답변:


8

더 많은 지식 없이이 분류를 빨리 얻으려면 탄력있는 콩 줄기를 권장합니다. 로드 밸런서 구성 및 인스턴스 스케일링을 처리하는 또 다른 AWS 애플리케이션입니다.

로드 밸런서 및 인스턴스에 추가 비용이 들지 않으므로 t2 유형 인스턴스를 계속 사용할 수 있지만 원하는만큼 탄력있는 콩나무를 확장 할 수 있습니다.

자동 조정은 즉각적이지 않으며 급증하는 트래픽을 처리 할 수 ​​있도록 트래픽을 스파이크하는 데 일반적으로 짧은 시간 (분)이 걸리지 만 인스턴스 크기를 수동으로 조정하는 것보다 훨씬 좋으며 실제로 파악하기가 쉽습니다. 와.


1

위에서 언급 한대로 일부 CloudWatch 경보를 추가하여 특정 임계 값이 증가하기 시작했을 때 자동 스케일링 프로세스를 시작하기 위해 이미 언급 한 자동 스케일링을 권장합니다.

예를 들어; CPU가 30 초 이상 50 % 이상인 경우 서버를 모니터링하도록 CloudWatch를 구성하여 자동 확장 프로세스를 시작하십시오.

이것은 완벽한 결함은 아니지만 일부 온라인 가이드를 통해 쉽게 수행 할 수 있으며 GUI를 통해 모두 구성 할 수 있습니다.

또한 방문 페이지가 정적 인 경우 프리 티어 t2.micro에서 호스팅하고 앱에 다른 t2.micro 프리 티어를 사용하지 않겠습니까?


자동 확장은 급격한 트래픽 증가시 전체적인 답이 아닙니다. 자동 확장 감지 창은 1-5 분 사이이며 프로비저닝에 따라 시간이 오래 걸릴 수도 있습니다. 일반적으로 정답은 인스턴스를 핫 상태로 실행하는 것입니다. 즉,인지 된 트래픽 수준보다 높고 자동 확장을 통해 해당 마진을 유지할 수 있습니다.
Matt O.

1

도움이 필요하면 도와 드리겠습니다. 페이지에 따라 ec2가 전혀 필요하지 않을 수 있습니다. 예를 들어 정적 또는 JavaScript를 제공하는 경우 클라우드 프론트 배포판을 사용하여 s3에서 제공 할 수 있습니다. 또는 필요한 경우 자동 스케일링 그룹을 사용할 수도 있습니다.


1

트래픽 급증을 처리하기위한 두 가지 일반적인 전략이 있습니다 : 용량 증가 및 비용 절감.

용량 증가는 자동 확장을 의미하며, 퍼블릭 클라우드를 처음 사용할 수있게되었을 때 모든 사람이 매우 흥분했습니다. 가장 기본적인 의미에서 이것은로드를 기반으로 더 많은 웹 서버를 부팅하여로드 밸런서에 추가하지만 관리가 어려울 수 있으므로 Elastic Beanstalk와 같은 더 많은 자동 솔루션이 있습니다.

자동화 된 용량 확장의 문제점은 자동화 된 청구서 확장 (10 배의 일반 트래픽은 10 배의 서버가 10 배의 돈을 지불해야 함을 의미 함)입니다. 그렇기 때문에 명심해야 할 유용한 전략이기는하지만 항상 얼마나 많은 사기를 할 수 있는지 보는 것부터 시작해야한다고 생각합니다.

속임수 란 캐시를 의미합니다. 대부분의 경우 사용자에게 약간 오래된 데이터를 제공 할 수 있으며 사용자가 눈치 채지 못하므로 엄청난 시간을 절약 할 수 있습니다. 5 초가 지나도 괜찮다고 결정한 페이지가 있고 20 req / s를 얻는다고 상상해보십시오. 캐싱을 사용하지 않으면 분당 1200 회 계산을 수행하는 반면 캐싱을 사용하면 12 개에 불과합니다. 이것이 어떻게 큰 차이를 만들 수 있는지 알 수 있습니다.

물론 많은 유형의 캐싱이 있으며 성공적인 웹 사이트는 여러 가지 캐싱을 사용합니다. 그러나 유스 케이스에는 두 가지 매우 좋고 쉬운 옵션이 있습니다.

첫 번째는 사이트를 완전히 정적으로 만드는 것입니다. 이것은 당신이 그렇게 할 수 있다고 가정하지만, 당신이 할 수 있다면, 당신은 단지 Nginx에 직접 HTML을 제공해야하고,이 역할을 할 수 t 없이 땀 요청합니다.

어느 정도의 역 동성이 필요한 경우 전체 페이지 캐싱을 수행하는 것이 좋습니다. Nginx는이 기능을 수행 할 수 있지만 유연성 때문에 Varnish를 좋아합니다.

어떤 옵션을 사용하든로드 테스트를 수행하여 올바르게 설정했는지 확인하십시오. 때때로 한 지점을 고정하면 새로운 병목 현상이 나타납니다.


0

AWS와 경험을 공유하고 싶습니다. 우리는 EC2에 응용 프로그램을 배포했으며 동일한 문제와 높은 비용에 직면했습니다. 애플리케이션이 모 놀리 식이지만 애플리케이션 Amazon EC2 컨테이너 서비스를 배포 했지만

  • 유효성
  • 효과적인 비용
  • 확장 성

Application Load Balancer는 트래픽을 처리하고 트래픽을 정상적인 인스턴스로 라우팅하며로드 조정 및 균형 조정에 대한 걱정없이 동일한 서비스의 여러 작업을 실행할 수 있습니다.

이 아키텍처는 장애 격리를보다 쉽게 ​​구현할 수 있도록합니다. 상태 확인, 캐싱, 벌크 헤드 또는 회로 차단기와 같은 기술을 사용하면 고장난 구성 요소의 폭발 반경을 줄이고 주어진 응용 프로그램의 전체 가용성을 향상시킬 수 있습니다.


ECS대한 별도의 가격없고 기본 EC2 리소스 만 있으므로 ECS를 어떻게 더 비용 효율적으로 사용 했습니까? 컨테이너를 직접 관리하든 Amazon에서 허용하든 관계없이 동일한 양의 리소스를 사용해야합니다.
Xiong Chiamiov

컨테이너에 5MB와 ec2의 알파인을 사용하는 경우 2GB의 우분투를 사용하고 있습니까? 어느 것이 가장 좋은가요? t2 micro에서는 트래픽 기반으로 스케일 인 및 아웃으로 5 PHP 컨테이너를 실행할 수 있습니다. 스케일 인 및 스케일 아웃으로 ec2에서 실행할 수 있습니까?
Adiii

ec2 인스턴스에 Ubuntu를 사용할 필요는 없습니다. 알파인 이미지를 업로드하고 원하는 경우 사용할 수 있습니다. ECS와 함께 작동하는 모든 것을 얻었 으면 좋았으며 앞으로 돌아가고 싶지는 않지만 ECS로 옮기는 것만으로 앱을 확장 가능하거나 비용 효율적으로 만들 수는 없습니다. 그와 동시에 앱, 인프라 및 아키텍처에 대한 다른 변경 사항이 있습니다.
Xiong Chiamiov

0

이는 특정 아키텍처에 따라 다르지만 예를 들면 다음과 같습니다.

  • 호스트의로드를 줄이기 위해 CloudFront로 웹 사이트를 프론트로드
  • 확장을 위해 S3와 같은 클라이언트 측 호스팅 서비스 사용
  • Autoscaling 그룹이있는 Elastic Load Balancer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.