Cách đưa bản chạy thử lên hệ thống chạy thật
Mở rộng qua 5 giai đoạn: (1) trả nợ kỹ thuật ở phần nền, (2) dựng giám sát, (3) tối ưu cơ sở dữ liệu và bộ nhớ đệm, (4) chạy nhiều máy chủ song song, (5) mở rộng đội và quy trình. Không làm tất cả cùng lúc: nút thắt đầu tiên mới là chỗ cần làm. Tối ưu quá sớm chỉ tốn tiền.
Đưa hệ thống từ 100 lên 100.000 người dùng thường tốn công gấp nhiều lần lúc dựng bản đầu tiên. Nhiều đội làm sai không phải vì kỹ thuật yếu mà vì mở rộng nhầm chỗ. Hướng dẫn này theo cách ALODEV xử lý khi hệ thống của khách hàng bắt đầu quá tải.
Các bước
Tìm nút thắt: đo trước khi mở rộng
1-2 tuầnTrước khi mở rộng, hãy đo xem cái gì đang chậm: cơ sở dữ liệu, API, giao diện hay dịch vụ bên thứ ba. Đừng mở rộng theo cảm giác.
- Setup APM (Application Performance Monitoring) - Sentry, DataDog, Grafana Cloud
- Identify slow endpoints - top 10 endpoint chậm nhất theo p95/p99 latency
- Profile database queries - slow query log, missing indexes
- Profile frontend - Lighthouse, WebPageTest, Real User Monitoring (RUM)
- Profile network - CDN hit rate, 3rd party API response time
Kết quả: Báo cáo nút thắt: biết chính xác chỗ chậm và bao nhiêu phần trăm người dùng bị ảnh hưởng
Trả nợ kỹ thuật và dựng giám sát
2-4 tuầnBản đầu tiên có nợ kỹ thuật là bình thường. Trước khi mở rộng, hãy xử lý những chỗ cản trở: thiếu kiểm thử, mã khó tách phần, mật khẩu viết cứng trong mã, chưa có giám sát.
- Kiểm thử tự động cho các luồng quan trọng: đăng nhập, thanh toán, nghiệp vụ chính
- Setup CI/CD pipeline đầy đủ - auto test + deploy
- Centralized logging - ELK, Grafana Loki
- Error tracking - Sentry với source maps
- Refactor god classes/functions - modular code dễ scale
- Document architecture - diagram + decision logs (ADR)
Kết quả: Nền kỹ thuật đủ vững để mở rộng, không còn cảnh chữa cháy hằng ngày
Tối ưu cơ sở dữ liệu và bộ nhớ đệm
2-6 tuầnVới ứng dụng web, nút thắt hay nằm ở cơ sở dữ liệu. Tối ưu nó trước khi thêm máy chủ, vì rẻ hơn nhiều.
- Index missing columns dựa slow query analysis
- Partitioning cho table lớn (>10M rows) theo date/region
- Read replicas cho read-heavy workload
- Redis caching cho expensive queries + session
- CDN cho static assets (Cloudflare, AWS CloudFront)
- Background jobs với queue (BullMQ, SQS) - không block request
Kết quả: Tải lên cơ sở dữ liệu giảm, thời gian phản hồi p95 giảm rõ rệt (đo trước và sau để ghi số thật)
Chạy nhiều máy chủ song song
1-3 thángKhi nâng cấu hình một máy chủ không đủ nữa, chuyển sang chạy nhiều máy chủ song song, bằng Kubernetes hoặc dịch vụ quản lý như Cloud Run, ECS.
- Stateless app design - không lưu state in-memory
- Session moved sang Redis/DB
- File upload sang S3/R2 thay vì local disk
- Load balancer + health checks
- Auto-scaling rules theo CPU/memory/request rate
- Database connection pooling - PgBouncer cho PostgreSQL
Kết quả: Ứng dụng tự mở rộng theo nhu cầu, chịu được lúc lưu lượng tăng đột biến
Mở rộng đội ngũ và quy trình
3-6 thángMở rộng kỹ thuật phải đi cùng mở rộng đội và quy trình. Đội 5 người và đội 50 người làm việc rất khác nhau, chi phí phối hợp tăng nhanh.
- Tách team theo product domain (Conway's Law)
- Microservices nếu team >2 độc lập (không premature)
- On-call rotation + incident response process
- Code review process - PR template + approval rules
- Release process - feature flag + canary deploy
- Knowledge sharing - weekly tech talks, ADR archive
Kết quả: Đội kỹ thuật tăng từ 5 lên 30 người mà vẫn làm việc trơn tru
Danh mục kiểm
Observability
- APM tracking p50/p95/p99 latency
- Error tracking Sentry với source maps
- Centralized log (Loki/ELK)
- Uptime monitoring + alert
- Cost monitoring per service
- Business metrics dashboard
Database
- Slow query log analyze
- Missing indexes added
- Partitioning cho table >10M rows
- Read replicas setup
- Connection pooling (PgBouncer)
- Backup + restore tested
Application
- Stateless design
- Session in Redis/DB
- File upload sang object storage
- Background jobs trong queue
- Caching layer (Redis)
- CDN cho static + images
Process
- CI/CD pipeline automated
- Kiểm thử tự động phủ các luồng quan trọng
- Feature flags
- Canary deploy strategy
- On-call rotation
- Runbook cho top 10 scenarios
Rủi ro và lưu ý
Dấu hiệu rủi ro
- Tối ưu quá sớm. Mở rộng toàn bộ hạ tầng trước khi cần là lãng phí. Hãy đo nút thắt thật và chỉ mở rộng đúng chỗ.
- Tách vi dịch vụ quá sớm. Đội 10 người mà tách thành nhiều dịch vụ nhỏ thì tốn công phối hợp và vận hành hơn lợi ích. Một khối mã nguồn được cấu trúc tốt vẫn đủ cho đội dưới 30 người.
- Mở rộng kỹ thuật mà quên đội ngũ. Hạ tầng lớn gấp 10 lần mà đội vẫn 5 người thì sẽ kiệt sức. Tuyển và đào tạo song song với việc mở rộng kỹ thuật.
- Bỏ qua giám sát trước khi mở rộng. Khi hệ thống lỗi dưới tải cao mà không có số liệu thì không biết sửa chỗ nào. Dựng giám sát trước khi tăng lưu lượng.
- Nút thắt nằm ở dịch vụ bên ngoài. Đôi khi chậm là do API ngân hàng hoặc dịch vụ bên thứ ba. Thêm máy chủ không giúp được, cần bộ nhớ đệm, xử lý bất đồng bộ hoặc đổi nhà cung cấp.
Lưu ý khi làm
- Tin số đo hơn cảm giác. Kỹ sư hay đoán sai chỗ chậm. Số liệu giám sát thường cho kết quả bất ngờ. Đo trước, mở rộng sau.
- Mỗi lần tăng gấp đôi, không tăng gấp mười. Mỗi bước nâng kiến trúc lên gấp đôi. Tăng gấp mười một lần rủi ro quá lớn. Làm theo bậc: 1.000, 2.000, 5.000, 10.000 người dùng, đánh giá rồi mới đi tiếp.
- Dùng bộ nhớ đệm mạnh tay nhưng xóa đệm cẩn thận. Bộ nhớ đệm có thể giảm thời gian phản hồi nhiều lần. Nhưng dữ liệu đệm cũ gây lỗi khó tìm, nên cách xóa và làm mới đệm cần thiết kế kỹ.
- Cơ sở dữ liệu ở lại lâu, mã nguồn thì viết lại được. Mã có thể viết lại bất cứ lúc nào. Đổi cấu trúc cơ sở dữ liệu thì tốn kém và rủi ro hơn, nên thiết kế cẩn thận từ đầu.
Công cụ gợi ý
- Scaling checklist PDFPrint-friendly 50-item checklist cho engineering team
- Architecture diagram templateMermaid + draw.io templates cho document architecture
- Runbook template10 common scenarios với step-by-step recovery
Câu hỏi thường gặp
Khi nào bắt đầu nghĩ đến mở rộng?
Khi đã có vài trăm người dùng thật, không phải lưu lượng thử. Trước đó hãy tập trung xem sản phẩm có khách cần không. Mở rộng quá sớm là một trong những lý do hay gặp khiến đội khởi nghiệp hết vốn.
Một khối mã nguồn hay tách nhiều dịch vụ?
Một khối được cấu trúc tốt phù hợp đội dưới 30 người. Khi quy mô buộc phải tách (trên 50 người, hoặc lưu lượng tăng vọt không đều), hãy tách dần từng phần. Phần lớn dự án ở Việt Nam không bao giờ vượt quá mức một khối.
Chi phí hạ tầng cho 10.000 người dùng mỗi ngày?
Con số phụ thuộc rất nhiều vào cách thiết kế, nên cần đo trên hệ thống thật thay vì dùng bảng giá chung. Với kiến trúc tốt, chi phí tăng chậm hơn số người dùng; kiến trúc kém thì tăng nhanh hơn. ALODEV có thể ước tính cho hệ thống của bạn sau khi xem số liệu hiện tại.
Nên có giám đốc công nghệ trước hay sau khi mở rộng?
Lý tưởng là trước. Người định hình văn hóa kỹ thuật và kiến trúc từ sớm tiết kiệm nhiều hơn so với sửa về sau. Nếu người sáng lập là kỹ sư, họ có thể giữ vai trò này đến khi đội đủ lớn để cần người chuyên trách.
Khi nào sửa dần, khi nào viết lại?
Đa số trường hợp nên sửa dần từng phần. Chỉ viết lại từ đầu khi: (1) nền công nghệ không đáp ứng nổi tính năng mới và quy mô, (2) mã không thể tìm lỗi, (3) cả đội cũ đã rời đi và không ai còn hiểu hệ thống. Viết lại toàn bộ thường thất bại, nên cách thay dần từng phần an toàn hơn.
Cách tuyển kỹ sư phần mềm đầu tiên
Hire dev đầu tiên cho startup qua 5 bước: (1) Define role clearly (full-stack vs specialist), (2) Source qua network + ITViec/TopCV, (3) Technical assessment thực (paid project hoặc pair programming), (4) Culture fit interview, (5) Negotiate package (cash + equity). Lương tham khảo VN 2026: junior 15-25tr, mid 25-45tr, senior 45-80tr.
Cách thương lượng hợp đồng bảo trì phần mềm
Negotiate retainer maintenance qua 5 nguyên tắc: (1) Tier structure theo hours/month, (2) SLA rõ ràng (P1<4h, P2<24h, P3<1week), (3) Scope inclusion/exclusion explicit, (4) Exit clause + handover, (5) Quarterly review + adjustment. Phí tham khảo: 5-30 triệu/tháng cho web app medium. Đừng commit lâu hơn 12 tháng trừ khi có discount đáng kể.










