Đầu tiên, AWS và Heroku là những thứ khác nhau. AWS cung cấp Cơ sở hạ tầng dưới dạng Dịch vụ ( IaaS ) trong khi Heroku cung cấp Nền tảng là Dịch vụ ( PaaS ).
Có gì khác biệt? Rất gần đúng, IaaS cung cấp cho bạn các thành phần bạn cần để xây dựng mọi thứ trên nó; PaaS cung cấp cho bạn một môi trường nơi bạn chỉ cần đẩy mã và một số cấu hình cơ bản và nhận một ứng dụng đang chạy. IaaS có thể cung cấp cho bạn nhiều sức mạnh và sự linh hoạt hơn, với chi phí phải xây dựng và duy trì bản thân nhiều hơn.
Để mã của bạn chạy trên AWS và trông giống như triển khai Heroku, bạn sẽ muốn một số phiên bản EC2 - bạn sẽ muốn một lớp cân bằng tải / bộ đệm được cài đặt trên chúng (ví dụ Varnish ), bạn sẽ muốn các phiên bản chạy một cái gì đó như Hành khách và nginx để phục vụ mã của bạn, bạn sẽ muốn triển khai và định cấu hình phiên bản cơ sở dữ liệu được nhóm của một cái gì đó như PostgreQuery . Bạn sẽ muốn có một hệ thống triển khai với thứ gì đó như Capistrano và một cái gì đó thực hiện tổng hợp nhật ký.
Đó không phải là một lượng công việc không đáng kể để thiết lập và duy trì. Với Heroku, nỗ lực cần có để đạt đến giai đoạn đó có thể là một vài dòng mã ứng dụng và a git push
.
Vì vậy, bạn đến nay và bạn muốn mở rộng quy mô. Tuyệt quá. Bạn đang sử dụng Puppet để triển khai EC2, phải không? Vì vậy, bây giờ bạn định cấu hình các tệp Capistrano của mình để quay lên / xuống các trường hợp cần thiết; bạn định lại cấu hình Puppet của mình để Varnish biết về các trường hợp nhân viên web và sẽ tự động gộp giữa chúng. Hoặc bạn heroku scale web:+5
.
Hy vọng rằng cung cấp cho bạn một ý tưởng về sự so sánh giữa hai. Bây giờ để giải quyết các điểm cụ thể của bạn:
Tốc độ
Hiện tại Heroku chỉ chạy trên các phiên bản AWS trong us-east
và eu-west
. Đối với bạn, điều này nghe có vẻ như những gì bạn muốn. Đối với những người khác, nó có khả năng được xem xét nhiều hơn.
Bảo vệ
Tôi đã thấy rất nhiều máy chủ sản xuất được bảo trì nội bộ bị chậm trễ trong các bản cập nhật bảo mật, hoặc nói chung là kém kết hợp với nhau. Với Heroku, bạn có người khác quản lý những thứ đó, đó là một phước lành hoặc một lời nguyền tùy thuộc vào cách bạn nhìn vào nó!
Khi bạn triển khai, bạn đang chuyển mã của mình một cách hiệu quả cho Heroku. Đây có thể là một vấn đề cho bạn. Bài viết của họ về Dyno Isolation mô tả chi tiết các công nghệ phân lập của họ (có vẻ như nhiều dynos được chạy trên các cá thể EC2 riêng lẻ). Một số đồng nghiệp đã bày tỏ vấn đề với các công nghệ này và sức mạnh của sự cô lập của họ; Tôi không ở vị trí đủ kiến thức / kinh nghiệm để thực sự bình luận, nhưng việc triển khai Heroku hiện tại của tôi cho rằng "đủ tốt". Nó có thể là một vấn đề cho bạn, tôi không biết.
Thu nhỏ
Tôi đã chạm vào cách người ta có thể thực hiện điều này trong so sánh IaaS vs PaaS của tôi ở trên. Khoảng, ứng dụng của bạn có một Procfile
, trong đó có các dòng của biểu mẫu dyno_type: command_to_run
, ví dụ: (được viết từ http://devcenter.heroku.com/articles/ Process-model ):
web: bundle exec rails server
worker: bundle exec rake jobs:work
Điều này, với một:
heroku scale web:2 worker:10
sẽ dẫn đến việc bạn có 2 web
dynos và 10 worker
dynos đang chạy. Đẹp, đơn giản, dễ dàng. Lưu ý rằng đó web
là một loại dyno đặc biệt, có quyền truy cập vào thế giới bên ngoài và đứng sau bộ ghép kênh lưu lượng truy cập web đẹp của họ (có thể là một loại kết hợp Varnish / nginx) sẽ định tuyến lưu lượng phù hợp. Nhân viên của bạn có thể tương tác với một hàng đợi tin nhắn để định tuyến tương tự, từ đó họ sẽ nhận được vị trí thông qua một URL trong môi trường.
Hiệu quả chi phí
Rất nhiều người có rất nhiều ý kiến khác nhau về điều này. Hiện tại, nó là 0,05 đô la / giờ cho một giờ dyno, so với 0,025 đô la / giờ đối với phiên bản vi mô AWS hoặc 0,09 đô la / giờ đối với phiên bản nhỏ AWS.
Tài liệu dyno của Heroku nói rằng bạn có khoảng 512 MB RAM, vì vậy có lẽ không quá vô lý khi xem xét một dyno giống như một ví dụ vi mô EC2. Có đáng giá gấp đôi giá? Bao nhiêu bạn coi trọng thời gian của bạn? Lượng thời gian và công sức cần thiết để xây dựng dựa trên ưu đãi của IaaS để đạt được tiêu chuẩn này chắc chắn không hề rẻ. Tôi thực sự không thể trả lời câu hỏi này cho bạn, nhưng đừng đánh giá thấp 'chi phí ẩn' của việc thiết lập và bảo trì.
(Một chút sang một bên, nhưng nếu tôi kết nối với một dyno từ đây ( heroku run bash
), một cái nhìn cursory cho thấy 4 lõi /proc/cpuinfo
và 36GB RAM - điều này khiến tôi tin rằng tôi đang ở trong "Trường hợp lớn gấp đôi bộ nhớ lớn " . Tài liệu về Heroku dyno nói rằng mỗi dyno nhận được 512 MB RAM, vì vậy tôi có khả năng chia sẻ với tối đa 71 dynos khác. (Tôi không có đủ dữ liệu về sự đồng nhất của các phiên bản AWS của Heroku, vì vậy khả năng của bạn có thể thay đổi))
Làm thế nào để họ chống lại đối thủ cạnh tranh của họ?
Điều này, tôi sợ rằng tôi thực sự không thể giúp bạn với. Đối thủ cạnh tranh duy nhất tôi từng xem là Google App Engine - tại thời điểm tôi đang tìm cách triển khai các ứng dụng Java và số lượng hạn chế đối với các khung và công nghệ có thể sử dụng là vô cùng khó chịu. Đây không chỉ là "chỉ là một thứ Java" - số lượng hạn chế chung và những cân nhắc cần thiết ( gợi ý Câu hỏi thường gặp ở một số) có vẻ không thuận tiện. Ngược lại, triển khai lên Heroku là một giấc mơ.
Phần kết luận
Tôi hy vọng điều này trả lời câu hỏi của bạn (vui lòng bình luận nếu có khoảng trống / các lĩnh vực khác mà bạn muốn giải quyết). Tôi cảm thấy tôi nên cung cấp vị trí cá nhân của tôi. Tôi yêu Heroku vì "triển khai nhanh". Khi tôi bắt đầu một ứng dụng và tôi muốn một số lưu trữ giá rẻ (tầng miễn phí Heroku là tuyệt vời - về cơ bản nếu bạn chỉ cần một web dyno và 5 MB PostgreQuery, thì miễn phí để lưu trữ một ứng dụng), Heroku là vị trí tiếp theo của tôi . Đối với "Triển khai sản xuất nghiêm túc" với một số khách hàng trả tiền, với thỏa thuận cấp độ dịch vụ, dành thời gian dành riêng cho ops, et cetera, tôi hoàn toàn không thể tự mình giảm bớt sự kiểm soát đó cho Heroku, và sau đó là AWS hoặc máy chủ của chúng tôi đã được nền tảng lưu trữ của sự lựa chọn.
Cuối cùng, đó là về những gì làm việc tốt nhất cho bạn. Bạn nói rằng bạn là "lập trình viên mới bắt đầu" - có thể việc sử dụng Heroku sẽ cho phép bạn tập trung vào việc viết Ruby và không phải mất thời gian để xây dựng tất cả các cơ sở hạ tầng khác xung quanh mã của bạn. Tôi chắc chắn sẽ thử.
Lưu ý, AWS thực sự có cung cấp PaaS, Elastic Beanstalk , hỗ trợ Ruby, Node.js, PHP, Python, .NET và Java. Tôi nghĩ nói chung hầu hết mọi người, khi họ nhìn thấy "AWS", nhảy sang những thứ như EC2 và S3 và EBS, đó chắc chắn là những sản phẩm của IaaS