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.