Chạy doanh nghiệp SaaS đạt 10.000 USD/tháng với chi phí hạ tầng chỉ 20 USD

12 tháng 4, 2026·11 phút đọc

Tác giả chia sẻ cách vận hành nhiều công ty có doanh thu định kỳ hàng tháng (MRR) lên tới 10.000 USD nhưng chi phí hạ tầng chỉ vỏn vẹn 20 USD. Bằng cách sử dụng VPS giá rẻ, ngôn ngữ Go, AI cục bộ và cơ sở dữ liệu SQLite, ông chứng minh rằng không cần vốn mạo hiểm hay hệ thống phức tạp để xây dựng sản phẩm thành công.

Chạy doanh nghiệp SaaS đạt 10.000 USD/tháng với chi phí hạ tầng chỉ 20 USD

Tối qua, tôi lại tiếp tục bị từ chối tại một buổi thuyết trình trước các nhà đầu tư. Đó mới chỉ là vòng phỏng vấn sơ bộ, và vấn đề không nằm ở sản phẩm của tôi. Tôi đã có doanh thu định kỳ hàng tháng (MRR), và đã có những người dùng phụ thuộc vào nó mỗi ngày.

Lời phản hồi nhận được rất đơn giản: "Bạn cần vốn để làm cái gì khi chi phí vận hành thấp thế này?"

Tôi nghe đi nghe lại câu hỏi này mỗi khi cố gắng mở rộng ý tưởng của mình. Tư duy vận hành tối giản (lean) đã ăn sâu vào tiềm thức của tôi. Tôi đã xây dựng những công cụ mà bạn có thể đã từng sử dụng, như websequencediagrams.com, và những sản phẩm ngách mà có lẽ bạn chưa từng nghe tên, như eh-trade.ca. Sự ám ảnh về hiệu suất này dẫn đến việc tự nuôi dưỡng doanh nghiệp (bootstrapping) thành công, và thành thật mà nói, nhiều nhà đầu tư mạo hiểm (VC) ghét điều đó.

Hạ tầng công nghệ tối giảnHạ tầng công nghệ tối giản

Giữ chi phí gần bằng 0 mang lại cho bạn quỹ đạo (runway) chính xác giống như khi nhận được một triệu đô la vốn đầu tư nhưng với tốc độ đốt tiền (burn rate) khổng lồ. Nó ít căng thẳng hơn, giữ cho kiến trúc hệ thống cực kỳ đơn giản, và cho bạn đủ thời gian để tìm ra sự phù hợp giữa sản phẩm và thị trường mà không chịu áp lực từ hội đồng quản trị.

Nếu bạn đã chán ngán với những khuôn mẫu "Doanh nghiệp" hiện đại, dưới đây là chiến lược chính xác về cách tôi xây dựng các công ty của mình để vận hành với chi phí gần như không có gì.

Sử dụng máy chủ tối giản

Cách ngây thơ để triển khai một ứng dụng web vào năm 2026 là bật lên AWS, cung cấp một cụm EKS, thiết lập một phiên bản RDS, cấu hình Cổng NAT, và vô tình tiêu tốn 300 USD mỗi tháng trước khi có bất kỳ người dùng nào nhìn vào trang đích của bạn.

Cách thông minh là thuê một Máy chủ riêng ảo (VPS) duy nhất.

Điều đầu tiên tôi làm là có được một chiếc máy giá rẻ, đáng tin cậy. Quên AWS đi. Bạn sẽ không cần nó, và bảng điều khiển của họ giống như một mê cung được thiết kế để khai thác các gói nâng cấp thanh toán. Tôi sử dụng Linode hoặc DigitalOcean. Chi trả không quá 5 đến 10 USD mỗi tháng.

1GB RAM nghe có vẻ đáng sợ với các nhà phát triển web hiện đại, nhưng nó là quá đủ nếu bạn biết mình đang làm gì. Nếu cần một chút không gian thở, chỉ cần sử dụng tệp trao đổi (swapfile).

Mục tiêu là phục vụ các yêu cầu, không phải duy trì cơ sở hạ tầng. Khi bạn có một máy chủ, bạn biết chính xác nhật ký ở đâu, chính xác lý do nó bị sập, và chính xác cách khởi động lại nó.

Sử dụng ngôn ngữ lập trình tối giản

Bây giờ bạn có các ràng buộc. Bạn chỉ có một gigabyte bộ nhớ. Bạn có thể chạy Python hoặc Ruby làm ngôn ngữ backend chính — nhưng tại sao lại làm thế? Bạn sẽ dành một nửa RAM chỉ để khởi động trình thông dịch và quản lý các worker gunicorn.

Tôi viết backend của mình bằng Go.

Go hiệu quả hơn vô cùng cho các tác vụ web, nó có kiểu dữ liệu nghiêm ngặt, và — quan trọng đối với năm 2026 — nó cực kỳ dễ dàng để các LLM (Mô hình ngôn ngữ lớn) suy luận. Nhưng phép thuật thực sự của Go nằm ở quy trình triển khai. Không có địa ngục phụ thuộc pip install. Không có môi trường ảo. Bạn biên dịch toàn bộ ứng dụng của mình thành một tệp nhị phân tĩnh duy nhất trên máy tính xách tay, scp nó đến máy chủ 5 USD của bạn, và chạy nó.

Đây là vẻ ngoài của một máy chủ web hoàn chỉnh, sẵn sàng sản xuất trong Go. Không cần các khung công tác (framework) cồng kềnh:

package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, your MRR is safe here.")
})
// Điều này sẽ xử lý thoải mái hàng chục nghìn yêu cầu mỗi giây
// trên một cấu hình máy tính "kém".
http.ListenAndServe(":8080", nil)
}

Sử dụng AI cục bộ cho các tác vụ chạy dài

Nếu bạn có một card đồ họa đang nằm đâu đó trong nhà, bạn đã có tín dụng AI không giới hạn.

Khi tôi xây dựng eh-trade.ca, tôi gặp một vấn đề cụ thể: tôi cần thực hiện nghiên cứu thị trường chứng khoán định tính sâu sắc về hàng nghìn công ty, tóm tắt các báo cáo quý khổng lồ. Giải pháp ngây thơ là ném tất cả những thứ này vào API của OpenAI. Tôi có thể đã trả hàng trăm đô la tín dụng API, chỉ để phát hiện ra một lỗi logic trong vòng lặp prompt của mình yêu cầu chạy lại toàn bộ lô.

Thay vào đó, tôi đang chạy VLLM trên một card đồ họa cũ giá 900 USD (một chiếc RTX 3090 với 24GB VRAM) mà tôi mua từ Facebook Marketplace. Đó là khoản đầu tư ban đầu, chắc chắn, nhưng tôi không bao giờ phải trả phí cho nhà cung cấp AI để xử lý hàng loạt nữa.

Đối với AI cục bộ, bạn có một lộ trình nâng cấp rõ ràng:

  • Bắt đầu với Ollama. Nó cài đặt chỉ với một lệnh (ollama run qwen3:32b) và cho phép bạn thử nghiệm hàng chục mô hình ngay lập tức. Đó là môi trường hoàn hảo để lặp lại các prompt.
  • Chuyển sang VLLM cho sản xuất. Khi bạn có một hệ thống hoạt động, Ollama trở thành nút thắt cổ chai cho các yêu cầu đồng thời. VLLM khóa GPU của bạn vào một mô hình, nhưng nó nhanh hơn nhiều vì sử dụng PagedAttention. Cấu trúc hệ thống của bạn để gửi 8 hoặc 16 yêu cầu không đồng bộ cùng một lúc. VLLM sẽ gộp chúng lại trong bộ nhớ GPU, và cả 16 sẽ hoàn thành trong khoảng thời gian tương tự như xử lý một yêu cầu.
  • Sử dụng Transformer Lab cho những thứ nâng cao hơn. Nếu bạn cần thực hiện bất kỳ việc tiền huấn luyện hoặc tinh chỉnh mô hình nào, Transformer Lab giúp việc đó dễ dàng trên phần cục bộ.

Để quản lý tất cả những điều này, tôi đã xây dựng laconic, một nhà nghiên cứu tác nhân được tối ưu hóa cụ thể để chạy trong một cửa sổ ngữ cảnh 8K bị hạn chế. Nó quản lý ngữ cảnh LLM giống như trình quản lý bộ nhớ ảo của hệ điều hành — nó "trang" (page out) những thứ thừa của một cuộc trò chuyện, chỉ giữ lại những sự kiện quan trọng nhất trong cửa sổ ngữ cảnh LLM đang hoạt động.

Tôi cũng sử dụng llmhub, nó trừu tượng hóa bất kỳ LLM nào thành một kết hợp nhà cung cấp/điểm cuối/khóa api đơn giản, xử lý nhẹ nhàng cả đầu vào/đầu ra văn bản và hình ảnh bất kể mô hình đang chạy dưới bàn làm việc của tôi hay trên đám mây.

Sử dụng OpenRouter cho LLM Nhanh/Thông minh

Bạn không thể làm mọi thứ cục bộ. Đôi khi bạn cần khả năng suy luận tiên tiến nhất của Claude 3.5 Sonnet hoặc GPT-4o cho các tương tác trò chuyện trực tiếp với người dùng có độ trễ thấp.

Thay vì phải xoay sở giữa các tài khoản thanh toán, khóa API và giới hạn tốc độ cho Anthropic, Google và OpenAI, tôi chỉ sử dụng OpenRouter. Bạn viết một tích hợp tương thích OpenAI duy nhất trong mã của mình, và bạn ngay lập tức có quyền truy cập vào mọi mô hình tiên phong chính.

Quan trọng hơn, nó cho phép định tuyến dự phòng liền mạch. Nếu API của Anthropic bị sập vào một buổi chiều thứ Ba (điều này xảy ra), ứng dụng của tôi tự động chuyển sang mô hình OpenAI tương đương. Người dùng của tôi không bao giờ thấy màn hình lỗi, và tôi không phải viết logic thử lại phức tạp.

Sử dụng Copilot thay vì các IDE AI được thổi phồng

Mỗi tuần, những mô hình mới đắt đỏ điên rồ được phát hành. Tôi liên tục nghe thấy các nhà phát triển chi hàng trăm đô la mỗi tháng cho đăng ký Cursor và khóa API Anthropic chỉ để AI viết mã boilerplate cho họ.

Trong khi đó, tôi đang sử dụng Claude Opus 4.6 cả ngày và hóa đơn của tôi hầu như không chạm mốc 60 USD mỗi tháng. Bí mật của tôi? Tôi tận dụng mô hình định giá của Microsoft.

Tôi đã mua đăng ký GitHub Copilot vào năm 2023, cắm nó vào VS Code tiêu chuẩn, và không bao giờ rời đi. Tôi đã thử Cursor và các nhánh cao cấp khác khi chúng briefly vượt qua nó về lập trình tác nhân, nhưng Copilot Chat luôn bắt kịp.

Đây là thủ thuật mà bạn có thể đã bỏ lỡ: bằng cách nào đó, Microsoft có thể tính phí theo yêu cầu, không phải theo token. Và một "yêu cầu" đơn giản là những gì tôi nhập vào hộp trò chuyện. Ngay cả khi tác nhân spends 30 phút tiếp theo để nhai qua toàn bộ cơ sở mã của tôi, ánh xạ các phụ thuộc và thay đổi hàng trăm tệp, tôi vẫn chỉ trả khoảng 0,04 USD.

Chiến lược tối ưu rất đơn giản: viết các prompt chi tiết tàn khốc với các tiêu chí thành công nghiêm ngặt (đây là thực hành tốt nhất anyway), nói với tác nhân "tiếp tục cho đến khi tất cả lỗi được sửa", nhấn enter, và đi pha một cốc cà phê trong khi Satya Nadella trợ cấp chi phí tính toán của bạn.

Sử dụng SQLite cho mọi thứ

Tôi luôn bắt đầu một dự án mới sử dụng sqlite3 làm cơ sở dữ liệu chính. Hãy nghe tôi nói, điều này không điên rồ như bạn nghĩ.

Tư duy doanh nghiệp quy định rằng bạn cần một máy chủ cơ sở dữ liệu ngoài quy trình (out-of-process). Nhưng sự thật là, một tệp SQLite cục bộ giao tiếp qua giao diện C hoặc bộ nhớ nhanh hơn nhiều so với việc thực hiện một bước nhảy mạng TCP đến máy chủ Postgres từ xa.

"Nhưng sự đồng thời (concurrency) thì sao?" bạn hỏi. Nhiều người nghĩ rằng SQLite khóa toàn bộ cơ sở dữ liệu trên mỗi lần ghi. Họ sai. Bạn chỉ cần bật Ghi nhật ký trước (Write-Ahead Logging - WAL). Thực hiện pragma này một lần khi bạn mở cơ sở dữ liệu:

PRAGMA journal_mode=WAL; PRAGMA synchronous=NORMAL;

Bùm. Người đọc không còn chặn người ghi. Người ghi không còn chặn người đọc. Bây giờ bạn có thể dễ dàng xử lý hàng nghìn người dùng đồng thời từ một tệp .db duy nhất trên ổ đĩa NVMe.

Vì việc triển khai xác thực người dùng thường là phần phiền phức nhất khi bắt đầu một dự án dựa trên SQLite mới, tôi đã xây dựng một thư viện: smhanov/auth. Nó tích hợp trực tiếp với bất kỳ cơ sở dữ liệu nào bạn đang sử dụng và quản lý đăng ký người dùng, phiên và đặt lại mật khẩu. Nó thậm chí cho phép người dùng đăng nhập bằng Google, Facebook, X hoặc nhà cung cấp SAML cụ thể của công ty họ. Không có phụ thuộc cồng kềnh, chỉ là mã đơn giản, có thể kiểm toán.

Kết luận

Ngành công nghệ công nghệ muốn bạn tin rằng xây dựng một doanh nghiệp thực sự đòi hỏi sự phối hợp phức tạp, hóa đơn AWS khổng lồ hàng tháng và hàng triệu đô la vốn mạo hiểm.

Không phải vậy.

Bằng cách sử dụng một VPS duy nhất, các tệp nhị phân được biên dịch tĩnh, phần cứng GPU cục bộ cho các tác vụ AI hàng loạt và tốc độ thô của SQLite, bạn có thể tự nuôi dưỡng một startup có khả năng mở rộng cao với chi phí thấp hơn giá của vài cốc cà phê mỗi tháng. Bạn thêm quỹ đạo vô hạn vào dự án của mình, cho mình thời gian để thực sự giải quyết vấn đề của người dùng thay vì phải toát mồ hôi vì tốc độ đốt tiền.

Nếu bạn quan tâm đến việc vận hành tối giản, hãy xem thư viện xác thực và các triển khai tác nhân của tôi trên GitHub. Tôi sẽ có mặt trong phần bình luận — hãy cho tôi biết cách bạn giữ chi phí máy chủ thấp, hoặc cho tôi biết lý do tại sao tôi hoàn toàn sai.

Bài viết được tổng hợp và biên soạn bằng AI từ các nguồn tin tức công nghệ. Nội dung mang tính tham khảo. Xem bài gốc ↗