Gần đây, tôi đọc bài viết "Microservices Killed Our Startup. Monoliths Would’ve Saved Us" đang gây chú ý trên các blog công nghệ nước ngoài, và thấy nội dung vừa quá đau đớn vừa rất đồng cảm nên xin tóm tắt chia sẻ lại.
Nó giống như một "sổ ghi lỗi sai" rất hay, cho thấy việc áp dụng công nghệ mới một cách vô điều kiện nguy hiểm đến mức nào.
1. Khởi đầu sự việc: "Chúng ta cũng hãy làm như Netflix"
- Tình hình: Gọi vốn seed được $2.5M, doanh thu hàng tháng tăng 40%, có 50.000 người dùng. Một startup đang vận hành rất tốt với Rails monolith.
- Khởi đầu vấn đề: Một lead architect xuất hiện, hô hào về "khả năng mở rộng (Scalability)" và đề xuất chuyển sang MSA.
- Lập luận: "Cấu trúc hiện tại gắn kết quá chặt. Hãy nhìn Netflix hay Uber đi. Nếu muốn trở thành như họ thì chúng ta cũng phải đi theo microservices."
- Thực tế: Một đội chỉ có 4 developer và 1 DevOps lại quyết định áp dụng kiến trúc kiểu Netflix.
2. Sáu tháng địa ngục (timeline áp dụng MSA)
[Tháng 1: Tuần trăng mật]
- Tách riêng thành công dịch vụ thông báo. "Thấy chưa! Vẫn ổn mà?" rồi tự ăn mừng.
- Nhưng các dấu hiệu báo trước như thời gian deploy tăng lên, số lượng repository tăng lên cũng bắt đầu xuất hiện.
[Tháng 2~3: Những vết nứt đầu tiên]
- Tách riêng dịch vụ Billing. Nhưng nó lại liên quan tới cả dịch vụ người dùng, tồn kho và đơn hàng.
- Kết quả: Do network latency, tốc độ phản hồi chậm từ 200ms → 800ms. Chỉ cần một dịch vụ chết là kéo theo sự cố dây chuyền làm toàn hệ thống sập.
[Tháng 4~5: Cơn ác mộng của distributed transaction]
- Việc trước đây chỉ cần một DB transaction trong monolith, giờ trong môi trường phân tán còn phải áp dụng cả Saga pattern.
- Tồn kho đã bị trừ nhưng thanh toán lại thất bại, rollback thì rối tung... dữ liệu không nhất quán khiến CS bị quá tải.
- Chỉ để thêm một cột đơn giản mà phải đụng tới 6 dịch vụ, việc đáng lẽ mất 2 giờ thì nay kéo thành 3 ngày.
[Tháng 6: Đội ngũ tan rã]
- Developer dồn toàn bộ thời gian vào quản lý hạ tầng thay vì phát triển tính năng.
- Chi phí hạ tầng tăng từ $3,000 → $12,000 (bùng nổ gấp 4 lần).
- Developer chủ chốt nghỉ việc ("Tôi đến đây để làm sản phẩm, chứ không phải để cả ngày ngồi vật lộn với Kubernetes")
3. Quyết định: "Chúng ta không phải Netflix"
Kiến trúc sư vẫn khăng khăng rằng "hãy áp dụng Service Mesh và tăng thêm công cụ monitoring", nhưng tác giả đã bùng nổ.
> "Chúng ta không phải Netflix! Netflix có 500 kỹ sư, còn chúng ta chỉ có 4 người thôi!"
Cuối cùng, architect nghỉ việc và cả đội quyết định quay trở lại monolith (Rollback).
4. Trở về monolith, và hồi sinh
- Trong 8 tuần, họ gộp code trở lại thành monolith.
- Kết quả:
- Tốc độ ra mắt tính năng được khôi phục (4 việc/tháng → 20 việc/tháng)
- Tốc độ phản hồi ổn định ở mức 220ms
- Chi phí hạ tầng giảm xuống
- Quan trọng nhất là mức độ hạnh phúc của developer tăng lên
5. Bài học cốt lõi (kết luận của bài viết)
- MSA không phải công cụ giải quyết 'vấn đề kỹ thuật', mà là công cụ giải quyết 'vấn đề tổ chức'.
- Nó chỉ nên được dùng khi có từ 50 developer trở lên và mọi người bắt đầu giẫm chân nhau, hoặc khi chu kỳ deploy của các nhóm chênh lệch quá lớn.
- Netflix/Google không phải hình mẫu dành cho bạn.
- Chính họ ban đầu cũng là monolith. Họ thay đổi vì quy mô đã lớn lên, chứ không phải ngay từ đầu đã làm vậy.
- Độ phức tạp là một loại thuế.
- Mỗi khi số lượng dịch vụ tăng lên, chi phí quản lý sẽ tăng theo cấp số nhân.
- Network call không hề miễn phí.
- Gọi hàm trong bộ nhớ (nano giây) và gọi qua mạng (mili giây) là khác biệt ở một đẳng cấp hoàn toàn khác.
Tóm lại trong một câu:
"Monolith không phải kẻ thù. Kiến trúc tồi mới là kẻ thù. Đội 4 người thì làm ơn cứ dùng monolith đi."
14 bình luận
Rồi nhé. Giờ thì đám cuồng tín MSA sẽ kéo đến.
Đúng là câu “network call không miễn phí” rất chuẩn. Gọi hàm và gọi API rõ ràng là khác nhau.
Tôi đến để làm ra sản phẩm, chứ không phải đến để ngồi vọc Kubernetes cả ngày —> Đây là câu ngu ngốc nhất mà tôi từng nghe.
Tại sao? Nếu đang ở tình huống làm
k8schỉ vì mục đích làk8sthì có vẻ câu đó là đúng mà?Mình thích các bình luận của bạn bungker nên vẫn bấm xem từng cái, nhưng riêng cái này thì mình không đồng cảm lắm, hừm, bạn có thể giải thích thêm được không?
Đây là một bài đăng về AI rỗng tuếch, nên dạo này tôi hầu như không đọc Medium nữa.
Nếu là dịch vụ do 4 người làm ra thì có lẽ đúng là không có lý do gì để tách nhỏ theo MSA cả
Muốn làm MSA thì tổ chức cũng phải được điều chỉnh cho phù hợp với MSA...
Có lẽ ý chính mà mục 4 trong phần tóm tắt muốn nói là điều này. Và nhìn chung thì bản thân nội dung cũng khá đáng đồng cảm.
Ừm... có gì đó có vẻ kỳ kỳ
Hình như bài này được viết bằng AI.
Dạo này tôi cũng cảm nhận điều đó khá nhiều..
Tôi đoán là nhiều bài trên blog được viết dựa trên trải nghiệm của chính tác giả + có sự hỗ trợ của AI.
Vì các bài viết quá mạch lạc và được viết rất dễ đọc.
Điều tôi muốn nói là bài này quá mang màu sắc AI và cũng không có tài liệu tham chiếu, nên tôi mong mọi người đừng chia sẻ những bài viết như thế này.
Đây là bài viết được đăng trên Hacker News. Hầu hết các bài tôi đăng đều là nội dung xuất hiện trên Hacker News.
https://news.ycombinator.com/item?id=46469845
Đúng như bạn nói... có lẽ tôi nên đăng kèm tham chiếu Hacker News.
1) Nghi ngờ độ đáng tin của bài viết: có mùi marketing/nội dung do AI tạo ra
Ý chính
Trích dẫn chốt hạ sự thật (dịch)
Đánh giá một dòng
2) Chỉ trích lãnh đạo/architect: vấn đề không phải công nghệ mà là ‘cấu trúc ra quyết định’
Ý chính
Trích dẫn đanh thép (dịch)
Đánh giá một dòng
3) Góc nhìn kinh doanh: nguyên nhân startup thất bại thật sự có phải là MSA?
Ý chính
Trích dẫn chốt hạ sự thật (dịch)
Đánh giá một dòng
4) Góc nhìn kỹ thuật: lời khuyên dựa trên trải nghiệm về monolith vs MSA (phần thực sự hữu ích)
Ý chính
Trích dẫn đanh thép (dịch)
Đánh giá một dòng
“Hãy bắt đầu bằng monolith, và chỉ tách service khi boundary xuất hiện một cách ‘tự nhiên’.”
Tổng kết cộng đồng trong một câu
Hầu hết đều đồng ý với câu “chúng ta không phải Netflix”, nhưng đồng thời cũng nghi ngờ mạnh rằng chính bài viết này có thể là một kiểu câu chuyện bán ‘căn bệnh thích bắt chước Netflix’ (= marketing/AI).