12/08/2018, 15:08

Rails Hosts: Amazon AWS vs. Digital Ocean vs. Heroku vs. Engine Yard

1 Mở đầu Khoảng giữa nhưng năm 1990 đến 2000, chọn host provider là một việc khá rõ ràng. Bạn chỉ cần chọn một dịch vụ có thể host đc ứng dụng PHP, MySQL và có cung cấp quyền truy cập shell.Nhưng đến năm 2014, bối cảnh này đã thay đổi rất nhiều. Có hàng tá các framework, rất nhiều loại database ...

1 Mở đầu

Khoảng giữa nhưng năm 1990 đến 2000, chọn host provider là một việc khá rõ ràng. Bạn chỉ cần chọn một dịch vụ có thể host đc ứng dụng PHP, MySQL và có cung cấp quyền truy cập shell.Nhưng đến năm 2014, bối cảnh này đã thay đổi rất nhiều. Có hàng tá các framework, rất nhiều loại database và hàng loạt các nhà cung cấp dịch vụ đám mây để lựa chọn. Khi làm việc với Ruby on Rails, chúng ta còn có thể chọn vài hosting provider mà họ đã config sẵn và có thể deploy và chạy code của ta trong vòng vài nốt nhạc. Mặc dù chúng ta vẫn có thể host app của mình theo cách cổ điển, tuy nhiên có rất nhiều cách khác nữa để host một ứng dụng Rails và chúng có từng ưu, nhược điểm và giá cả khác nhau.

Trong bài viết này, tôi sẽ điểm qua một vài Ruby on Rails hosting provider mà tôi đã từng deploy ứng dụng của mình lên và nói qua từng bước cài đặt để ứng dụng chạy được. Nếu bạn đã là một Rails developer, có thể bài viết sẽ cho bạn một cái nhìn tổng quan về việc chọn lựa hosting provider phù hợp với ứng dụng của mình.

2 Amazon AWS

Amazon AWS cung cấp một nhóm các dịch vụ điện toán đám mây, tất cả đều thông qua internet và chúng chạy cùng nhau trong phạm vi đám mây của Amazon. Theo kinh nghiệm của tôi thì những dịch vụ AWS phổ biến nhất để hỗ trợ host ứng dụng Rails là EC2, S3 và SES. Cụ thể thì EC2 là dịch vụ cung cấp server ảo, S3 là dịch vụ lưu trữ, và SES là dịch vụ gửi email. Để chạy một EC2 instance thì việc cần làm khá là đơn giản, rõ ràng và tất cả đều được thực hiện trực tiếp thông qua qua AWS Console.

Bạn có thể thấy việc cài đặt một image với Ruby 2.1 và PostgreSQL 9.3 chỉ đơn giản là việc bấm nút Select, sau đó có vài menu nữa nhưng nếu bạn cứ để mặc định và bấm next, image của bạn sẽ chạy và hoạt động trong vòng ít hơn 5 phút. Cực kỳ nhanh và tiện. Lợi ích của việc dùng AWS là nó cực kì ổn định và dễ mở rộng quy mô, thêm nữa là nó có cộng đồng hỗ trợ rất tốt. Để thêm SES và S3 vào ứng dụng Rails của mình, bạn cần thêm vài gem, thường tên của chúng sẽ có kiểu "aws-", ví dụ như "aws-ses", "aws-s3". Có vài gem khác như CarrierWave hay Fog cũng hỗ trợ S3 nhưng hầu hết những gem bạn cần tìm đều có tên dạng dạng như trên.

Để ứng dụng chạy đc bắt đầu từ bước này thì nằm ngoài phạm vi bài viết, nhưng có vài cách để làm điều này, bạn có thể vào EC2 Document để xem hướng dẫn cụ thể.

3 Digital Ocean

Digital Ocean là nhà cung cấp của rất nhiều VPS đang chạy trên thế giới. Họ nổi tiếng về tốc độ của image ( sử dụng SSD) và tuyên bố chỉ mất 55s để cài đặt máy chủ sử dụng SSD. Sau khi qua vài bước khởi động ban đầu (tạo tài khoản, hóa đơn...), việc tạo một Droplet rất dễ dàng theo vài bước sau, chọn vài tùy chọn rồi rồi bấm nút "Create Droplet. Bước 1: Chọn dung lượng cho image. Bước 2: Chọn vùng và setting Bước 3: Chọn tab Application rồi chọn image Ruby on Rails đã đc config sẵn. Nếu bạn muốn dùng web server khác, bạn có thể tự cài đặt một image từ đầu ( tab Linux Distribution) và tùy chỉnh nó theo cách mình muốn. Bước 4: Bấm cái nút màu xanh này:

Sau khi server tính toán dự liệu xong, bạn sẽ nhận đc một emal với password tài khoản rootvà IP address. Tổng thời gian để qua bước này chỉ tốn ít hơn 1 phút trừ phi bạn muốn tìm hiểu thêm về quá trình dự liệu của Droplet và muốn tìm hiểu rõ về các option. Cách nào đi nữa thì quá trình tạo và dự liệu server đều thông qua giao diện web khá tối giản và trực quan của Digital Ocean. Tóm lại, Digital Ocean là một sự lựa chọn tốt nếu bạn muốn nắm quyền điều khiển với Vitual Server của mình. Digital Ocean có giá khá dễ thở, nhưng nó ko có tài khoản free cho người mới bắt đầu. Để dùng đc Digital Ocean, team bạn nên có một DevOps hiểu rõ về Environment Management, Unix Systems và làm việc tốt với command line. Digital Ocean có giới hạn băng thông, tuy nhiên, bạn có thể nâng cấp hệ thống lên một tier cao hơn để khắc phục tình trạng này.

4 Heroku

Heroku là một PaaS ( Platform-as-a-Service) bao gồm đầy đủ các dịch giúp tự động đáp ứng nhu cầu hạ tầng cần thiết để chạy được ứng dụng web của bạn. Nền tảng này được xây dựng dành cho các team ko muốn hoặc ko cần thiết phải có hạ tầng riêng của họ. Như đã nói, Heroku là một PaaS tự động hoàn toàn nên việc dùng nó rất dễ hiểu và dễ dàng để làm theo.

Deploy một Rails app lên Heroku đc thực hiện bằng cách push lên thông qua Git. Heroku sau khi nhận đc code, đóng gói nó lại thành từng package ( hay Slug) rồi chạy code trên số lượng thread mà bạn định sẵn. Quá trình deploy có thể nhanh chậm khác nhau nhưng hầu hết là đều xong trong vòng ít hơn 5 phút ( thường thì chỉ khoảng 30s). Con số này ko có gì quá bất ngờ vì Heroku đc xây dựng với chủ ý dành cho Rails app. Trong quá trình phát triển, Heroku có hỗ trợ thêm nhiều các công nghệ khác nhưng Heroku vẫn luôn tối ưu tốt cho việc phát triển dự án Rails.

Vậy so với các hosting provider khác thì sao? Heroku nổi bật bởi hơn hẳn trong việc dễ dàng deploy và chạy ứng dụng của bạn. Nền tảng này ko chỉ có một giao diện web trực quan mà còn có giao diện command line thân thiện dễ dùng. Heroku tính tiền dựa trên số thread mà bạn dùng, tức là bạn chỉ phải trả cho số tài nguyên mà mình dùng trên server. Heroku ko giới hạn băng thông nên kể cả khi website của bạn đột nhiên có thêm rất nhiều người dùng thì bạn cũng ko lo về việc server tự động shut down hay tự tính tính thêm phí. Đơn giản mà nói, Heroku loại bỏ hết phần phiền phức khi deploy, giúp bạn chú tâm vào việc code hơn. Việc tạo một server Heroku chỉ mất vài giây và một dòng lệnh duy nhất: heroku create

Chỉ việc gõ heroku create, Heroku sẽ tạo một server ngẫu nhiên cho bạn sử dụng. Tất cả chỉ trong vòng 5s.

$ heroku create
  Creating fierce-sierra-3668... done, stack is cedar
  http://fierce-sierra-3668.herokuapp.com/ | git@heroku.com:fierce-sierra-3668.git
  Git remote heroku added

Bước tiếp theo là deploy Rails app, để làm việc này, chỉ cần gõ 'push –u heroku master'. Xong. Lần đầu push sẽ mất khá nhiều thời gian hơn so với các lần sau vì Heroku phải install toàn bộ dependencies và gem. Đến gian đoạn này, bạn chỉ việc chạy vài config, seed database thêm vài add-on nữa là xong. Chi tiết thêm bạn có thể tìm hiểu trong Document của Heroku.

5 Engine Yard

Engine Yard khởi đầu là một trang chuyên về host Rails app, nó có khá nhiều điểm tương đồng với Heroku, tuy nhiên, Engine Yard có một điểm độc nhất: Engine Yard giám sát app giúp bạn. Nó ko chỉ tự động deploy app mà còn hỗ trợ code của ứng dụng của bạn. Nói cách khác, Engine Yard bao gồm ưu điểm của cả AWS, Digital Ocean lẫn Heroku: một hệ thống tự động tất cả nhưng cho bạn quyền kiếm soát toàn bộ. Tuy nhiên, giá của Engine Yard lại ko hề rẻ, ít nhất khoảng 80$$tháng. Đây là cái giá đắt nhất trong các hosting provider nhưng nếu bạn cần một app chạy ổn định 24/7 thì tính ra cũng ko đắt cho lắm. Với cả, nó còn rẻ hơn là thuê hẳn một DevOps riêng để quản lý.

6 So sánh

6.1 AWS

** - Ưu điểm:** Có thể mở rộng, cho dùng free ban đầu, dễ dàng thêm server mới. - Nhược điểm: Cần có kiến thức về quản lý Unix. Đối với các Startup, điều này đồng nghĩa với việc phải tuyển thêm một DevOps có kiến thức về AWS nữa. Gây tốn kém và mất thời gian hơn. - Giá cả: Mỗi dịch vụ lại có giá và cách tính khác nhau nên khá khó để tính trước tổng chi phí của EC2 và các dịch vụ liên quan cho đến khi nhận được hóa đơn chính thức. **- Mức độ sử dụng: ** Trung đình đến khó

6.2 Digital Ocean

** - Ưu điểm:** Dễ dàng deploy với image được dựng sẵn. Không nhất thiết yêu cầu phải sử dụng Rails. Cho phép tự do tùy chỉnh môi trường một cách linh hoạt. Sử dụng SSD nên image chạy rất nhanh. - Nhược điểm: Cần có kiến thức về system admin và kinh nghiệm làm DevOps - Giá cả: Khá dễ thở, tuy nhiên ko có free tier. Khởi điểm là 5$$tháng và tăng dần. **- Mức độ sử dụng: ** Khó

6.3 Heroku

** - Ưu điểm:** Tạo mới một server chỉ mất dưới 10s với vài dòng lệnh. Deploy được tự động bằng git push. Sử dụng add-on để dễ dàng quản lý các tài nguyên khác. Miễn phí khi dùng một thread. Không giới hạn băng thông. - Nhược điểm: Phải deploy bằng git. Ko tự động mở rộng quy mô. - Giá cả: Khởi điểm free, nhưng tăng khá nhanh nếu số lượng thread và add-on của ứng dụng tăng. **- Mức độ sử dụng: ** Dễ.

6.4 Engine Yard

** - Ưu điểm:** Dễ dàng deploy Rails app lên server. Khỏi điểm là một công ty về host Rails nên có khá nhiều kinh nghiệm trong ngành. Cung cấp dịch vụ hỗ trợ 24/7. Cung cấp tool thân thiện với developer như gem engineyard. - Nhược điểm: Yêu cầu có kĩ năng system admin và DepOps. Giới hạn băng thông. - Giá cả: Khởi điểm 80$$tháng và tăng lên phụ thuộc vào tài nguyên bạn sử dụng. **- Mức độ sử dụng: ** Trung bình.

Nguồn: https://www.airpair.com/ruby-on-rails/posts/rails-host-comparison-aws-digitalocean-heroku-engineyard

0