우선, AWS와 Heroku는 다릅니다. AWS는 IaaS (Infrastructure as a Service )를 제공하는 반면 Heroku는 PaaS ( Platform as a Service )를 제공합니다.
차이점이 뭐야? 대략적으로 IaaS는 그 위에 물건을 만드는 데 필요한 구성 요소를 제공합니다. PaaS는 코드 및 일부 기본 구성을 푸시하고 실행중인 애플리케이션을 얻는 환경을 제공합니다. IaaS는 더 많은 것을 구축하고 유지해야하는 비용으로 더 많은 기능과 유연성을 제공 할 수 있습니다.
코드를 AWS에서 실행하고 Heroku 배포와 비슷하게 보이려면 EC2 인스턴스가 필요합니다.로드 밸런서 / 캐싱 레이어가 설치되어 있어야합니다 (예 : Varnish ). 승객 과 nginx 는 코드를 제공하기 위해 PostgreSQL 과 같은 클러스터 된 데이터베이스 인스턴스를 배포하고 구성하려고합니다 . Capistrano 와 같은 로그 시스템과 배포 시스템이 필요합니다 .
그것은 설정하고 유지해야 할 일이 그리 중요하지 않습니다. Heroku를 사용하면 이러한 단계에 도달하기위한 노력은 몇 줄의 응용 프로그램 코드와입니다 git push
.
그래서 당신은 지금까지 있고, 당신은 확장하고 싶습니다. 큰. EC2 배포에 Puppet 을 사용하고 있습니까? 이제 Capistrano 파일을 구성하여 필요에 따라 인스턴스를 스핀 업 / 다운 할 수 있습니다. Varnish가 웹 작업자 인스턴스를 인식하고 자동으로 풀링되도록 Puppet 구성을 다시 지그하십시오. 또는 당신 heroku scale web:+5
.
바라건대 그것은 둘 사이의 비교에 대한 아이디어를 제공합니다. 이제 특정 요점을 해결하십시오.
속도
현재 Heroku는 us-east
및의 AWS 인스턴스에서만 실행됩니다 eu-west
. 당신을 위해, 이것은 당신이 어쨌든 원하는 것 같습니다. 다른 사람들에게는 잠재적으로 더 많은 고려 사항입니다.
보안
보안 업데이트에 뒤쳐져 있거나 일반적으로 제대로 구성되지 않은 많은 내부 유지 관리 프로덕션 서버를 보았습니다. Heroku를 사용하면 다른 것을 관리하는 사람이 있습니다. 이것은 어떻게 보느냐에 따라 축복이거나 저주입니다!
배포 할 때 코드를 Heroku로 바로 넘겨줍니다. 이것은 당신에게 문제가 될 수 있습니다. Dyno Isolation에 대한 기사에서는 격리 기술에 대해 자세히 설명합니다 (여러 개의 dyno가 개별 EC2 인스턴스에서 실행되는 것처럼 보입니다). 몇몇 동료들은 이러한 기술과 격리의 강도에 관한 문제를 표명했습니다. 나는 실제로 언급하기에 충분한 지식 / 경험의 위치에 있지 않지만, 현재의 Heroku 배포는 "충분히 좋다"고 생각합니다. 잘 모르겠습니다.
스케일링
위의 IaaS와 PaaS 비교에서 이것을 구현하는 방법에 대해 설명했습니다. 대략 응용 프로그램 Procfile
의 양식은 다음과 같습니다 dyno_type: command_to_run
(예 : http://devcenter.heroku.com/articles/process-model 참조 ).
web: bundle exec rails server
worker: bundle exec rake jobs:work
이것은 다음과 같습니다.
heroku scale web:2 worker:10
2 개의 web
dynos와 10 개의 worker
dynos가 실행됩니다. 좋고 간단하고 쉽습니다. 참고 web
외부 세계에 액세스 할 수있는 특별한 다이노 유형이며, 자신의 좋은 웹 트래픽 멀티플렉서 뒤에 (니스 / nginx를 조합의 아마 일종) 따라 그 의지 경로 트래픽입니다. 작업자는 비슷한 라우팅을 위해 메시지 대기열과 상호 작용하여 환경의 URL을 통해 위치를 가져옵니다.
비용 효율성
많은 사람들이 이것에 대해 많은 다른 의견을 가지고 있습니다. 현재 AWS 마이크로 인스턴스의 경우 $ 0.025 / hr 또는 AWS 소형 인스턴스의 경우 $ 0.09 / hr와 비교하여 dyno 시간의 경우 시간당 $ 0.05입니다.
Heroku가의 다이노 설명서 는 아마 그래서 당신은, RAM 512MB의에 대해이 말한다 너무 EC2 마이크로 인스턴스 같은 비트 같은 다이노을 고려하는 것이 불합리한. 가격의 두 배가 가치가 있습니까? 시간을 얼마나 소중하게 생각하십니까? 이 표준에 도달하기 위해 IaaS 솔루션을 기반으로 구축하는 데 필요한 시간과 노력은 확실히 저렴하지 않습니다. 이 질문에 실제로 답할 수는 없지만 설정 및 유지 관리의 '숨겨진 비용'을 과소 평가하지는 않습니다.
(여기서 제쳐두고 있지만 (here heroku run bash
) 에서 dyno에 연결 하면 커서 모양으로 4 코어 /proc/cpuinfo
와 36GB RAM이 표시됩니다. 이렇게하면 "High-Memory Double Extra Large Instance" 에 있다고 믿게됩니다 " . Heroku dyno 문서에 따르면 각 dyno는 512MB의 RAM을 수신하므로 최대 71 개의 다른 dyno와 공유 할 수 있습니다. (Heroku의 AWS 인스턴스의 동질성에 대한 데이터가 충분하지 않으므로 마일리지가 다를 수 있습니다.)
그들은 어떻게 경쟁사에 대항합니까?
정말 도와 드릴 수 없습니다. 필자가 실제로 살펴본 유일한 경쟁자는 Google App Engine 이었습니다. Java 응용 프로그램을 배포하려고 할 때 사용 가능한 프레임 워크 및 기술에 대한 제한 이 엄청나게 퍼졌습니다. 이것은 "단지 Java 일"이상입니다. 일반적인 제한 및 필요한 고려 사항 ( 몇 가지 FAQ 힌트)은 편리하지 않은 것 같습니다. 반대로 Heroku에 배포하는 것은 꿈이었습니다.
결론
이것이 귀하의 질문에 답변되기를 바랍니다 (갭이 있거나 다른 영역이 있으면 의견을 말하십시오). 나는 내 개인적인 입장을 제시해야한다고 느낍니다. "빠른 배포"로 Heroku를 좋아합니다. 응용 프로그램을 시작할 때 저렴한 호스팅을 원할 때 (Heroku 프리 티어가 훌륭합니다. 기본적으로 하나의 웹 dyno와 5MB의 PostgreSQL 만 있으면 응용 프로그램을 호스팅하는 것이 무료입니다) Heroku는 제 위치입니다 . 서비스 수준 계약이 있고 운영에 시간을 할애 할 수있는 시간이있는 여러 유료 고객이있는 "심각한 프로덕션 배포"의 경우, 많은 제어권을 Heroku로 오프로드 할 수 없습니다. 자체 서버는 선택한 호스팅 플랫폼이었습니다.
궁극적으로 가장 적합한 것이 무엇인지에 관한 것입니다. 당신은 "초보 프로그래머"라고 말합니다-Heroku를 사용하면 Ruby 작성에 집중할 수 있고 코드 주변의 다른 모든 인프라를 얻는 데 시간을 들일 필요가 없습니다. 확실히 시도해 볼 것입니다.
AWS에는 실제로 Ruby, Node.js, PHP, Python, .NET 및 Java를 지원 하는 PaaS 오퍼링 인 Elastic Beanstalk가 있습니다. 나는 일반적으로 대부분의 사람들이 "AWS"를 볼 때 EC2 및 S3 및 EBS와 같은 것으로 뛰어들 것입니다.