Mục lục
Microservices: Kiến trúc vi dịch vụ
Tôi vẫn còn nhớ năm 2015 khi sếp đặt câu hỏi: "Tại sao deployment của chúng ta mất 3 giờ?" Lúc đó, ứng dụng là một khối monolithic duy nhất – 2 triệu dòng code, 50 thành phần khác nhau, ai chỉnh cái gì cũng phải test toàn bộ. Một lỗi đơn giản ở feature A có thể làm sập cả hệ thống, khiến team chúng tôi hằng đêm nhận cuộc gọi khẩn cấp. Đó là lúc chúng tôi bắt đầu nhìn vào microservices – nhưng không phải vì nó trendily, mà vì tuyệt vọng.
Microservices không phải là một trend, nó là một sự lựa chọn khi bạn không còn cách nào khác.
Kiến trúc vi dịch vụ về cơ bản là việc chia một ứng dụng lớn thành các dịch vụ nhỏ, độc lập, có thể triển khai riêng rẽ. Mỗi dịch vụ quản lý một chức năng kinh doanh riêng biệt – có database riêng, API riêng, team riêng. Thay vì một khối duy nhất, bạn có một hệ sinh thái các dịch vụ giao tiếp với nhau qua network.
Nghe có vẻ rất sạch sẽ trên giấy. Thực tế thì... phức tạp hơn.
Lợi ích mà bạn thực sự sẽ thấy
Tốc độ phát triển tăng vậy là cả – nếu bạn làm đúng. Team của bạn có thể deploy payment service riêng mà không phải chờ inventory service hoàn thành. Ở các công ty tech lớn như Uber hay Netflix, họ deploy hàng trăm lần mỗi ngày. Tại Việt Nam, khi các startup như Grab Việt Nam hay Sendo không còn là startup nữa, họ có thể cập nhật pricing algorithm trong khi backend team đang fix bug ở search service. Cái điều này được gọi là independent deployability – và đó là nốt trung tâm trong microservices.
Scaling cũng trở nên granular hơn. Thay vì scale toàn bộ ứng dụng (tốn tiền, vô phí), bạn chỉ scale dịch vụ nào bị병목. Ở Black Friday, payment service nhận 100 request/giây nhưng review service chỉ 10 request/giây? Bạn tăng pod của payment lên 50 replica, còn review vẫn 2 replica. Mình từng tiết kiệm 40% infra cost chỉ vì strategy này.
Những cái bẫy tối tăm mà ai cũng gặp
Nhưng đây là nơi mà mọi người lần đầu triển khai microservices thường sụp đổ: độ phức tạp tương tác giữa các dịch vụ là địt mẹ nó.
Monolithic thì debugging đơn giản – mở IDE, tìm stack trace, xong. Microservices? Một request có thể đi qua 15 service, mỗi cái có latency khác nhau, timeout khác nhau. Bạn cần distributed tracing (Jaeger, Datadog), centralized logging (ELK Stack), service mesh (Istio, Linkerd) – những thứ sẽ làm thêm layer phức tạp vào team của bạn.
Chia sẻ bài viết


