· fly-io / railway / hosting

Fly.io vs Railway: so sánh hosting cho team nhỏ (2026)

Railway thắng cho developer solo và team 2–5 người nhờ chi phí ổn định. Fly.io thắng khi cần 18 region. Số liệu thực, bẫy billing cần biết, kết luận rõ ràng.

Bởi Ethan

2.339 từ · 12 phút đọc

Railway phù hợp với hầu hết các team nhỏ. Bắt đầu với gói Hobby $5/tháng, nâng lên Pro $20 khi cần server chạy liên tục — và bạn sẽ không bao giờ mở hộp thư ra thấy hóa đơn bốn chữ số. Fly.io là lựa chọn đúng khi người dùng của bạn ở châu Á, Nam Mỹ, hay châu Phi và cần độ trễ dưới 100ms tại đó. Nếu không phải trường hợp đó, thì 18 region của Fly chỉ là chi phí thêm, không phải giá trị thêm.

Bài này dành cho ai

Developer solo và team 2–5 người đang chạy web app, API, hoặc background worker và muốn có hosting được quản lý mà không cần thuê thêm kỹ sư hạ tầng. Nếu bạn đang dùng Kubernetes hoặc có DevOps riêng, bài này không dành cho bạn.

Giá — bạn thực sự trả bao nhiêu

Railway

Railway có hai gói đáng chú ý: Hobby ($5/tháng)Pro ($20/tháng). Cả hai đều kèm credit sử dụng bằng đúng phí tháng, nghĩa là $5 hoặc $20 compute đầu tiên của bạn đã được tính vào.

Chi phí tài nguyên: $20/vCPU/tháng, $10/GB bộ nhớ/tháng, $0.05/GB egress.

Một app dùng 512MB RAM, 0.5 vCPU, với 5GB outbound traffic tốn khoảng $5.25/tháng. Nếu app của bạn ngủ khi không có traffic, chi phí thường nằm trong credit Hobby và bạn không trả thêm gì ngoài phí gói.

Điểm mạnh nhất không phải là giá — mà là giới hạn chi tiêu cứng. Railway cho bạn đặt mức trần (tối thiểu $10): khi chạm mức đó, workload tự dừng, và bạn nhận email cảnh báo trước khi tới ngưỡng. Với developer solo, đây là ranh giới giữa một ngày tệ và một sự cố tài chính thật sự.

Fly.io

Fly.io tính theo mức dùng, không có phí nền và không có giới hạn chi tiêu. Các mức giá:

  • Shared-cpu-2x, 512MB RAM: ~$4.00/tháng khi chạy 24/7
  • Egress: $0.02/GB tại Bắc Mỹ và châu Âu; $0.12/GB tại Ấn Độ và châu Phi
  • IPv4 riêng: $2/tháng mỗi app
  • Volume: $0.15/GB/tháng, tính phí ngay cả khi máy đã dừng

Cũng app 512MB đó, 10GB outbound tại Bắc Mỹ: khoảng $6.20/tháng khi chạy liên tục, hoặc ~$3.55 nếu cấu hình autostop đúng.

Trên giấy tờ, Fly.io có thể rẻ hơn. Trong thực tế, bề mặt tính phí rộng hơn và ít minh bạch hơn. Nhiều người dùng Fly.io đã bị bất ngờ bởi các khoản phí từ:

  • Volume tiếp tục bị tính phí sau khi xóa máy — bạn phải xóa volume một cách tường minh
  • Các instance Managed Postgres và Redis tồn tại sau khi xóa app
  • Volume snapshot bắt đầu tính phí từ tháng 1 năm 2026
  • Địa chỉ IPv4 âm thầm tích lũy trên các app thử nghiệm bạn tạo rồi bỏ

Không có giới hạn chi tiêu, không có cảnh báo hóa đơn. Bạn có thể đặt giới hạn thẻ tín dụng Fly.io như một biện pháp thủ công, nhưng platform không cung cấp gì sẵn cho việc này. Nếu một hóa đơn $300 có thể ảnh hưởng đến ngân sách dự án của bạn, đây là điều quan trọng nhất cần biết trước khi chọn Fly.io.

Cold start — hành vi hay gây bất ngờ

Cả hai platform đều cho phép app nhẹ ngủ khi không hoạt động. Nhưng sự khác biệt trong chi tiết lớn hơn những gì marketing nói.

Cách Railway cho app ngủ

Railway cho service ngủ sau 10 phút không có traffic outbound. Lưu ý: đây là outbound, không phải inbound. Đây là phần dễ gây nhầm: một cron job gọi API của bạn từ bên ngoài sẽ giữ app tỉnh, nhưng một app chỉ nhận request HTTP inbound mà không thực hiện cuộc gọi outbound nào vẫn có thể ngủ dù đang có traffic.

Request đầu tiên sau khi app thức dậy có thể trả về 502. Thời gian khởi động lại bằng cold boot time của app — tài liệu Railway gọi đây là “cold boot time” mà không nêu con số cụ thể. Với side project thì không sao. Với app production mà người dùng để ý đến tốc độ, đây là điều cần trao đổi trước khi ra mắt.

Các chế độ autostop của Fly.io

Fly.io phân biệt hai chế độ ngủ: suspendstop. Suspend giữ nguyên trạng thái bộ nhớ của máy và khôi phục nhanh. Stop tắt máy hoàn toàn và khởi động lại từ đầu khi có request tiếp theo — giống cold boot của Railway.

App Fly mới mặc định bật autostop, và chế độ mặc định là stop. Bạn cấu hình điều này trong fly.toml trong phần [http_service] hoặc [[services]]. Nếu độ trễ cold-start quan trọng với app của bạn, hãy kiểm tra chế độ đang dùng trước khi đưa lên production — mặc định là chế độ chậm hơn.

Tài liệu Fly ghi rằng khởi động từ trạng thái suspended “nhanh hơn so với khởi động máy từ trạng thái stopped” mà không đưa ra con số cụ thể. Người dùng cộng đồng báo cáo suspend khôi phục trong khoảng 100–250ms — nhanh hơn đáng kể so với cold boot container. Với API mà request đầu tiên sau khoảng nghỉ cần phản hồi nhanh, sự khác biệt này quan trọng. Với batch job ban đêm hay công cụ admin, thì không.

Để loại bỏ hoàn toàn cold start trên cả hai platform: tắt tính năng ngủ và giữ ít nhất một instance chạy liên tục. Ngân sách thêm $3–10/tháng tùy kích thước instance. Trên Railway, điều đó nghĩa là tắt App Sleeping trong cài đặt service. Trên Fly, đặt min_machines_running = 1 trong fly.toml để autostop không bao giờ scale về 0.

CLI và trải nghiệm deploy

Đây là điểm khác biệt rõ nhất giữa hai platform.

Railway: từ zero đến deployed nhanh nhất có thể

Kết nối GitHub repo của bạn. Railway tự nhận diện Node.js, Bun, Deno, Python, Ruby, Go và nhiều stack khác — không cần Dockerfile. Đặt biến môi trường trong dashboard hoặc CLI. Push commit là deploy.

# Cài đặt
npm install -g @railway/cli

# Đăng nhập và khởi tạo
railway login
railway init

# Deploy từ thư mục hiện tại
railway up

Preview environment cho pull request được tích hợp sẵn và bật mặc định trên gói Pro. Bạn nhận được URL riêng cho mỗi branch, tự động. Với team làm code review, đây không phải chuyện nhỏ.

Dashboard của Railway được tổ chức rõ ràng. Logs, metrics, deployments, và biến môi trường đều cách một cú click. Mô hình ở đây đơn giản: một service cho mỗi GitHub repo, với các environment xếp chồng lên nhau.

Fly.io: kiểm soát ở cấp độ vận hành

Fly.io được xây cho những ai muốn hiểu rõ những gì đang chạy. fly launch hỏi bạn một số thông tin rồi tạo ra fly.toml. fly deploy build và deploy. Cả hai lệnh hoạt động tốt một khi bạn đã quen.

# Cài đặt
curl -L https://fly.io/install.sh | sh

# Đăng nhập
flyctl auth login

# Launch (tạo fly.toml)
fly launch

# Deploy
fly deploy

Trong thực tế, bạn cần Docker. Fly.io có thể tự tạo Dockerfile trong quá trình fly launch với các stack phổ biến, nhưng với stack không chuẩn bạn phải tự viết. Không có CI/CD tích hợp sẵn, không có preview environment. Bạn tự kết nối qua GitHub Actions và flyctl CLI.

# .github/workflows/fly-deploy.yml — bạn tự viết file này
name: Deploy to Fly.io
on:
  push:
    branches: [main]
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: superfly/flyctl-actions/setup-flyctl@master
      - run: flyctl deploy --remote-only
        env:
          FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}

Ưu điểm: bạn kiểm soát chính xác kích thước máy, vị trí region, và cài đặt concurrency. Với team muốn mức kiểm soát đó, bề mặt vận hành của Fly.io rất tốt. Với team muốn theo kiểu Railway — push xong quên — khoảng cách này là thực tế.

Tương đương trên Railway là zero config — deploy khi push là mặc định, không cần phải tự thiết lập.

PostgreSQL — câu chuyện phân kỳ rõ rệt

Railway

Railway cung cấp Postgres dưới dạng template không được quản lý. Không có backup tự động. Không có failover. Bạn tự chịu trách nhiệm quản lý instance. Chi phí theo mức dùng — một database phát triển nhỏ tốn $0–5/tháng.

Với dữ liệu production mà bạn không thể mất: đây là điểm khởi đầu, không phải giải pháp cuối cùng. Bạn sẽ cần chiến lược backup ngoài (ít nhất là pgdump lên S3 qua cron) và kế hoạch phục hồi nếu volume bị hỏng.

Fly.io

Fly.io đã ngừng hỗ trợ Postgres unmanaged cũ để chuyển sang Fly Managed Postgres, bắt đầu từ $38/tháng. Con số này cao hơn tổng tiền nhiều người dùng Railway trả cho toàn bộ app của họ. Workflow flyctl postgres create cũ vẫn hoạt động nhưng đã được đánh dấu deprecated và sẽ bị xóa trong tương lai.

Giải pháp thực tế cho cả hai platform

Nếu app của bạn cần database managed, HA với backup tự động: hãy cân nhắc host riêng bên ngoài.

Supabase ($25/tháng Pro) cung cấp Postgres managed với connection pooling, backup, và REST API. Neon có free tier hào phóng cho serverless workload và per-branch database phù hợp với preview environment của Railway. Cả hai tích hợp sạch với cả hai host và không bị ảnh hưởng nếu bạn đổi platform — database vẫn giữ nguyên chỗ.

Đây không phải lý thuyết — nếu bạn muốn chuyển từ Railway sang Fly hay ngược lại, phần compute di chuyển gọn gàng trong khi database không cần đụng đến.

Một cặp hoạt động tốt: Railway compute + Neon database. Gói Hobby của Railway lo web service; free tier của Neon lo một Postgres nhỏ với branching support kết hợp tự nhiên với preview environment của Railway. Mỗi PR có URL preview Railway riêng và branch database Neon riêng. Xóa cả hai khi branch được merge. Workflow này tốn $0/tháng ở traffic thấp và scale ổn định.

Regions

Railway: 4 region — US West (California), US East (Virginia), EU Amsterdam, Singapore.

Fly.io: 18 region trải dài Bắc Mỹ, Nam Mỹ, châu Âu, châu Á, Úc, Nam Phi, và Ấn Độ.

Nếu người dùng của bạn tập trung ở Mỹ hoặc Tây Âu, 4 region của Railway đủ dùng. Nếu bạn phục vụ Đông Nam Á, Nam Mỹ, hay Tây Phi, độ phủ của Fly.io là ranh giới giữa sản phẩm nhanh và sản phẩm cảm giác bị lỗi.

Một tính năng Railway không có mà Fly.io có: anycast routing, trong đó cùng một IP phân giải đến edge region gần nhất. Với app phân tán toàn cầu cần tính năng này, Fly.io là lựa chọn duy nhất ở đây.

Kết luận

Hai điều kiện quyết định lựa chọn.

Chọn Fly.io nếu:

  1. Người dùng của bạn cần độ trễ dưới 100ms ở region Railway không có — Nam Mỹ, Tây Phi, Trung Á, hoặc ngoài Singapore trong khu vực châu Á-Thái Bình Dương.
  2. Bạn thoải mái với việc viết Dockerfile, tự cấu hình CI/CD, và quản lý hạ tầng ở mức thấp hơn.

Chọn Railway nếu:

  1. Người dùng của bạn ở Bắc Mỹ hoặc Tây Âu (hoặc Singapore cho khu vực châu Á).
  2. Bạn muốn có giới hạn chi tiêu cứng — một mức trần ngăn chi phí tích lũy trước khi trở nên nghiêm trọng.
  3. Bạn muốn có preview environment mà không cần cấu hình GitHub Actions.
  4. Bạn không muốn viết hay bảo trì Dockerfile cho một web service đơn giản.

Khuyến nghị mặc định: bắt đầu với Railway Hobby ($5/tháng). Nâng lên Railway Pro ($20/tháng) khi cần compute chạy liên tục hoặc preview environment theo branch. Cân nhắc lại Fly.io khi bạn thực sự đang mất người dùng vì độ trễ ở các region Railway không có.

Nếu Fly.io nằm trong danh sách cùng với Render, Fly.io vs Render phân tích sự khác biệt đó. Nếu Railway là lựa chọn của bạn và muốn so sánh với Render, Railway vs Render có đầy đủ dữ liệu. Để xem tổng quan tất cả platform lớn, nền tảng deploy tốt nhất cho full-stack app 2026 là bài tiếp theo.

Lưu ý

Giá thay đổi không báo trước. Tất cả số liệu trong bài đến từ nguồn chính xác được xác minh vào tháng 5 năm 2026. Hành vi ngủ của Railway đã thay đổi nhiều lần kể từ khi platform ra mắt. Kiểm tra tài liệu hiện tại trước khi cam kết với platform nào ở quy mô lớn.

Số liệu độ trễ theo region là do platform tự công bố. Tuyên bố 18 region của Fly là chính xác; độ trễ thực tế của ứng dụng đến bất kỳ region nào phụ thuộc vào ISP của bạn, kết nối của người dùng, và vị trí origin của app. Tự đo với workload cụ thể của bạn nếu độ trễ là yêu cầu bắt buộc.

Không có quan hệ affiliate. Tính đến tháng 5 năm 2026, cả Fly.io lẫn Railway đều không có chương trình affiliate công khai. Railway có credit giới thiệu $5; chúng tôi không dùng link đó ở đây. Bài này không mang lại hoa hồng nào.

Giá Fly Managed Postgres. Mức khởi điểm $38/tháng được xác nhận vào tháng 5 năm 2026. Giá database của Fly.io đã được điều chỉnh nhiều lần — hãy kiểm tra lại trước khi xây dựng phụ thuộc vào đó.

Tham khảo