Tôi là 1 fan của Heroku vì tính tiện dụng và đặc biệt là giá trị của nó đối với các developer và các ứng dụng nhỏ. Tuy nhiên, gần đây tôi có phát triển dự án CVEData, dự án này đòi hỏi mức độ dữ liệu lớn và các gói của Heroku có vẻ không còn hợp lý nữa. Tôi đã quyết định tìm hiểu Google App Engine, bài này sẽ ghi chép lại 1 số nội dung tôi đã làm.
Đoạn trước tôi có nhấn mạnh Heroku rất có giá trị với các ứng dụng nhỏ là do business model của Heroku là cho sướng trước rồi thu tiền sau. Và đúng thật, hơn 1 năm qua, tôi vẫn cứ nộp đều cho Heroku 17$ cho 1 ứng dụng cũng không to lắm (1 VPS 5$ là có thể đáp ứng được).
Chính vì vậy nếu ứng dụng cứ scale lên nữa thì chi phí bỏ ra có vẻ không còn phù hợp cho các project cá nhân nữa. Tôi không thích độc quyền, vì vậy quyết định tìm hiểu thêm Google App Engine xem thế nào.
Addon
Heroku có hệ thống addon rất lớn và tiện dụng, đây cũng là nơi tốn tiền nhất (VAS). Với sự ra đi của mLab MongoDB. Người dùng hầu như không còn lựa chọn nào khác ngoài việc mua 1 dịch vụ ~50$/tháng.
Google Cloud thì có rất nhiều lựa chọn, hoàn toàn có thể mua 1 VPS ~5$ rồi cài Mongo lên và vẫn sử dụng được mạng nội để truy cập nhanh.
Tỉ số là 1-0 cho Google Cloud
Google App Engine
Bây giờ là đến tính năng chính, deploy 1 ứng dụng web, trường hợp này tôi dùng Python Django. Guide của Google App Engine tại đây còn Guide của Heroku tại đây. Riêng khoản hướng dẫn và tiện dụng thì Heroku chắc chắn ghi điểm. Đơn giản nếu bạn làm theo guide của Google thì sẽ không chạy được luôn, còn với Heroku thì không vấn đề gì. Tỉ số là 1-1
Nói thêm cho ai đang dùng Guide của Google, tương tự Heroku, bạn cần có file requirements.txt để deploy, ngoài ra còn file quan trọng nữa là app.yaml, file này chứa các cấu hình để deploy, tôi sẽ để file trong dự án của tôi lên đây để ai cần có thể tham khảo vì làm theo file mẫu của Google sẽ bị lỗi.
# [START django_app]
runtime: python37
handlers:
- url: /static
static_dir: staticfiles/
- url: /.*
script: auto
entrypoint: gunicorn -b :8080 cvepw.wsgi
env_variables:
DATABASE_HOST : "xxx"
DATABASE_USER : "xxx"
DATABASE_PASS : "xxx"
# [END django_app]
Nói thêm về vụ biến môi trường, Heroku có phần set biến môi trường ngay trên giao diện web rất tiện, nó giúp cho việc không cần phải lưu các cấu hình mật khẩu trong file, giảm bớt rủi ro về lộ thông tin nhạy cảm. Tuy nhiên, với Google App Engine, bạn bắt buộc phải đưa vào file app.yaml để deploy.
Ảnh: Set biến môi trường trên Heroku
Tuy nhiên, xét cho cùng thì về tính năng của cả đều tương đối giống nhau nên về tính năng, tôi cho rằng 2 bên tương đương nhau, Heroku nhỉnh hơn 1 chút về tính tiện dụng, tỉ số là 2-2.
Tiến trình lập lịch
Nếu ai chưa biết thì heroku có tính năng Heroku Scheduler (devcenter.heroku.com/articles/scheduler) rất tiện lợi, có phép lập lịch cho các script để update dữ liệu hoặc các lịch gửi mail cực kỳ tiện. Vậy Google Cloud thì sao?
Hơi lòng vòng 1 chút nhưng cơ bản là làm được. Bước 1 bạn cần tạo 1 function ở Cloud Function với đoạn code cần chạy.
Sau đó quay sang phần Cloud Scheduler để lập lịch cho Function vừa tạo
Ok, như vậy thì cũng tương đương, tỉ số tiếp tục là 3-3
Google Cloud | Heroku | |
Addon | 1 | 0 |
Guide/tiện dụng | 0 | 1 |
Deploy web | 1 | 1 |
Lập lịch backend | 1 | 1 |
Kết quả | 3 | 3 |
Kết luận: 2 dịch vụ cạnh tranh thì đương nhiên sẽ là 1 chín, 1 mười, vì vậy kết quả hòa 3-3 cũng không nằm ngoài dự đoán. Tuy nhiên, về lâu dài, hiện tại tôi đang thấy Google Cloud sẽ có thể là mảnh đất hứa cho những thử nghiệm của các dự án cá nhân về sau vì tính đầy đủ trong hệ sinh thái của nó. Tôi sẽ tiếp tục và thử nghiệm và update sau.