Tôi rất thích việc tự host. Tôi vận hành một nền tảng lưu trữ dựa trên Docker giúp ai cũng có thể tự triển khai dịch vụ của mình. Tôi cho rằng mọi lập trình viên đều nên biết cách triển khai sản phẩm của chính họ.
Nhưng tôi cũng có giới hạn.
Tự host đôi khi đi quá xa — từ việc “trao quyền” đến mức “tại sao bạn lại làm khổ chính mình như thế?” Không phải thứ gì cũng nên chạy trên con VPS 5 đô của bạn. Một số thứ nên để các ông lớn xử lý, hoặc ít nhất là bất kỳ ai khác ngoài bạn.
Dưới đây là danh sách “đen” của tôi: 5 thứ mà theo tôi nên bị cấm tự host, trừ khi bạn làm vậy chỉ để học...
1. Máy chủ Email
Tự host máy chủ email giống như cố giành huy chương Olympic... trong bộ môn ức chế tinh thần.
Gửi email đáng tin cậy là một dạng “phép thuật hắc ám” được gói trong SPF, DKIM, rDNS và điểm uy tín IP. Chỉ một sai sót nhỏ, email của bạn sẽ rơi vào thư mục spam của Gmail—hoặc tệ hơn là bị chặn im lặng.
Không quan trọng cấu hình Postfix của bạn “xịn” cỡ nào. Nếu bạn không có IP “đã làm nóng” với nhiều năm uy tín, bạn sẽ gặp ác mộng.
Hãy dùng Postmark, Mailgun, SES hoặc dịch vụ tương tự. Bạn sẽ cảm ơn chính mình sau này.
Trừ khi bạn chỉ gửi email báo cáo dự án dễ thương cho bản thân thì đây là một trong những quyết định tệ nhất nếu áp dụng cho một ứng dụng thực sự.
2. Object Storage (Lưu trữ đối tượng)
Các phần mềm như MinIO hay SeaweedFS khiến việc tự host object storage có vẻ dễ dàng. Việc cài đặt thì đúng là dễ thật. Nhưng giữ cho dữ liệu an toàn và bền vững lại là chuyện hoàn toàn khác.
Mục tiêu chính của object storage là tính bền vững dữ liệu. AWS cung cấp độ bền 11 số 9 (99.999999999%) không phải ngẫu nhiên — họ nhân bản dữ liệu qua nhiều trung tâm dữ liệu mà bạn chẳng bao giờ thấy.
Còn bạn? Có lẽ đang chạy MinIO trên một node đơn ở Hetzner. Chỉ cần một ổ cứng hỏng là mất trắng.
Chưa kể lợi thế quy mô: các nhà cung cấp lớn có thể làm cho object storage cực rẻ. Còn bạn thì không.
3. Tự xây CDN
Có những người ngoài kia tự xây CDN của riêng họ. Tôi không biết vì sao, nhưng họ có thật. Họ chạy vài server ở 2 địa điểm, gọi đó là “mạng biên toàn cầu”, rồi thắc mắc sao người dùng ở Nam Mỹ bị delay.
CDN không chỉ là Nginx với caching. CDN bao gồm định tuyến thông minh, cache, xóa cache, xử lý TLS, chuyển tiếp đến nguồn gốc, vùng đệm (origin shields), tự động chuyển hướng khi lỗi, và hàng chục vị trí biên.
Bạn không thể “fake” chuyện đó trong một dự án cuối tuần.
Hãy dùng Cloudflare, CloudFront hoặc Bunny. Người dùng sẽ cảm ơn bạn.
4. Package Registries (Kho lưu trữ gói)
Tôi hiểu điều này. Bạn muốn kiểm soát chuỗi cung ứng. Bạn không tin Docker Hub. Bạn muốn có registry riêng.
Nhưng trừ khi bạn là một nền tảng chuyên nghiệp như Sliplane, thì bạn không thực sự cần tự host registry riêng. DockerHub, GitHub Container Registry, hoặc các dịch vụ của cloud provider tồn tại là có lý do: chúng ổn định, nhanh và không bị lỗi mất layer khi ổ đĩa đầy.
Bạn có thể tự host. Nhưng nên không? Có lẽ là không.
5. Máy chủ DNS
Cái này nên bị coi là phạm pháp.
Trừ khi bạn đang xây TLD riêng (mà điều đó có khả thi không?) hoặc nghịch DNSSEC cho vui, thì không có lý do gì để tự chạy DNS server trong môi trường production.
Hãy mua domain từ nhà cung cấp uy tín. Dùng dịch vụ DNS quản lý chuyên nghiệp. Họ xử lý giúp bạn những thứ như:
- Dự phòng
- Tối ưu độ trễ
- Anycast
- Chống DDoS
Container BIND9 bé xíu của bạn sẽ không trụ nổi trước một cuộc tấn công botnet. Và khi DNS sập, toàn bộ hệ thống của bạn cũng chết theo.
Lời kết
Tôi không nói tự host là xấu — ngược lại là đằng khác.
Nhưng là một kỹ sư giỏi, bạn cần biết điều gì KHÔNG nên tự xây.
5 hạng mục trên là các tầng hạ tầng đã được “thử lửa qua thực chiến”, rẻ, nhanh và cực kỳ đáng tin khi dùng dưới dạng dịch vụ — nhưng sẽ trở thành hỗn loạn toàn tập nếu bạn cố gắng tự host mà không có kỹ năng chuyên sâu.
Hãy dùng thời gian một cách thông minh.
Tự host những thứ vui vẻ.
Còn lại, hãy để cho những người đã “đốt cả chục năm” để làm đúng phần việc của họ xử lý.