Microservice thì xịn, nhưng tách xong debug đau đầu quá, hay cứ Monolith mà… chia module?
Một startup bán vé online Việt Nam dùng Laravel Monolith, nhưng codebase rối như “chợ Tết”. Tôi tư vấn nên modular hóa (tận dụng composer, npm) trước khi tách microservice, kết quả: code sạch hơn, deploy vẫn đơn giản, sẵn sàng cho bước tiếp theo.
Modular Monolith là gì?
Modular Monolith là Monolith nhưng chia codebase thành các module độc lập, có boundary rõ ràng (VD: User, Order, Payment). Mỗi module có layer riêng (controller, service, repository), giao tiếp qua interface, nhưng vẫn deploy chung.
Lợi ích:
- Code sạch: Module tách biệt, dễ maintain, ít conflict.
- Chuẩn bị microservice: Module dễ tách thành service sau này.
- Deploy đơn giản: Vẫn một codebase, một DB, không cần Kubernetes.
Ví dụ thực tế: App bán vé dùng Laravel, tách module Booking, User, Payment. Mỗi module có folder riêng (/app/Booking, /app/User), giao tiếp qua service class, giảm coupling.
Code mẫu: Laravel Modular Monolith
// app/Booking/Services/BookingService.phpnamespace App\Booking\Services;
class BookingService { public function createBooking($userId, $ticketId) { // Logic đặt vé }}
// app/User/Services/UserService.phpnamespace App\User\Services;
class UserService { public function getUser($userId) { // Logic lấy user }}Góc nhìn CTO
Modular Monolith là “bước đệm” lý tưởng trước khi tách microservice. Nó giúp team học cách chia boundary mà không phải đối mặt với complexity của distributed system.
Checklist làm Modular Monolith:
- Tách module theo domain (User, Order, Payment).
- Dùng namespace và interface để định boundary.
- Viết test cho từng module, giữ coupling thấp.
- Document API nội bộ giữa các module.
🎯 Tóm lại: Modular Monolith là “bán microservice” trong vỏ Monolith. Tách module rõ ràng để code sạch, dễ scale, và không sợ “đau đầu” sớm!

Đăng nhận xét