
Microservices đang là xu hướng phổ biến hiện nay. Những lợi thế mà kiến trúc này mang lại là không thể phủ nhận và ngày càng nhiều doanh nghiệp lựa chọn áp dụng. Home Credit cũng như nhiều tổ chức khác đã triển khai mô hình này trong hệ thống của mình.
Ưu điểm của Microservices

Với kiến trúc này, đặc biệt là với các hệ thống lớn & phức tạp, chúng ta nhận được rất nhiều lợi ích:
- Scalability (Khả năng mở rộng): Mỗi service có thể scale độc lập – ưu tiên tài nguyên cho module cần thiết → hiệu suất tổng thể tốt hơn.
- Công nghệ linh hoạt: Mỗi service có thể sử dụng ngôn ngữ, framework, công nghệ phù hợp nhất → không bị ràng buộc bởi một tech stack duy nhất.
- Fault Isolation (Cô lập lỗi): Một service gặp sự cố không làm sập toàn hệ thống, giúp hệ thống ổn định và tin cậy hơn.
- Rút ngắn Time-to-Market: Các team có thể phát triển song song → release nhanh hơn → phản hồi thị trường tốt hơn.
- Dễ bảo trì – dễ cập nhật: Microservice nhỏ → dễ hiểu, dễ sửa, dễ triển khai độc lập mà không ảnh hưởng các phần khác.
- Hỗ trợ DevOps & CI/CD mạnh mẽ: Pipeline tự động hoá cho từng service → triển khai nhanh, ít lỗi, kiểm thử hiệu quả hơn.
- Bám sát mục tiêu business: Mỗi microservice đại diện cho một domain nghiệp vụ → tăng khả năng mở rộng tính năng phục vụ đúng nhu cầu business.
Thế giới công nghệ không đứng yên. Software Architecture cũng vậy. Có hai hướng phát triển có thể xảy ra:
1. Moving Towards Serverless Architecture
Chúng ta có thể thấy rõ rằng việc áp dụng microservices giúp đội ngũ phát triển dễ dàng hơn trong quá trình xây dựng và vận hành sản phẩm, bởi mỗi service được sở hữu bởi một team sẽ đủ nhỏ để không quá phức tạp. Tiếp tục với cách tiếp cận này - càng nhỏ thì càng dễ kiểm soát, linh hoạt hơn trong lựa chọn công nghệ, dễ mở rộng hơn - chúng ta có thể nghĩ đến Serverless Architecture. Dưới đây là những lý do thuyết phục để thúc đẩy quá trình chuyển đổi này:
- Faster Development Cycles: Serverless cho phép developer triển khai code mà không cần quan tâm đến hạ tầng phía dưới, rút ngắn thời gian phát triển và giúp release nhanh hơn, cải thiện time-to-market cho tính năng mới.
- Enhanced Developer Productivity: Việc loại bỏ quản lý server giúp developer tập trung hoàn toàn vào business logic và cải thiện chức năng sản phẩm. Nhờ vậy, hiệu suất làm việc được nâng cao và tài nguyên phát triển được sử dụng hiệu quả hơn.
- Cost Efficiency: Serverless hoạt động theo mô hình pay-per-use - chỉ trả cho tài nguyên xử lý thực tế sử dụng. Điều này giúp tiết kiệm chi phí đáng kể so với việc duy trì server cố định, đồng thời giảm tải chi phí vận hành do nhà cung cấp cloud đảm nhiệm việc bảo trì hạ tầng.

But the nature of serverless architecture involves cold start latency. To deal with this issue, transitioning to a new framework that helps with faster startup times is important. This affects the learning curve of developers and requires changes in their internal processes.
2. Considering Modular Monolithic Architecture
Tuy nhiên, nếu nhìn ở một góc độ khác, việc tách dịch vụ và chức năng thành quá nhiều phần nhỏ, độc lập có thể dẫn đến một hệ thống gồm vô số service/function nhỏ giao tiếp với nhau qua mạng. Lợi thế của việc phát triển và bảo trì những thành phần nhỏ sẽ phải đánh đổi bằng sự phức tạp trong quản lý tổng thể hệ thống.
Một ví dụ tiêu biểu là Amazon Prime Video. Tháng 3/2023, Prime Video quyết định quay lại kiến trúc monolithic sau khi nhận thấy hệ thống phân tích chất lượng video dựa trên microservices không mở rộng hiệu quả và chi phí vận hành tăng cao. Khi hợp nhất các service thành một kiến trúc monolithic, họ đã giảm được chi phí và cải thiện hiệu năng đáng kể.
Ví dụ này cho thấy rằng dù microservices giải quyết nhiều vấn đề tồn tại của monolithic, nhưng không phải lúc nào cũng là lựa chọn hoàn hảo. Thực tế, triển khai microservices thường thành công nhất khi chuyển đổi từ những hệ thống monolithic rất lớn. Bắt đầu ngay với microservices có thể dẫn đến sai lầm nếu chưa có đủ dữ liệu để xác định module nào thực sự phù hợp để tách nhỏ. Do đó, bắt đầu với Modular Monolith giúp xây dựng hệ thống có cấu trúc, dễ quản lý — sau đó có thể tách dần thành microservices khi đã có đủ thông tin và insight về yêu cầu cũng như hiệu năng ứng dụng.

Bằng cách sử dụng Modular Monolithic, chúng ta có thể tận dụng lợi thế của mô hình monolithic đồng thời vẫn sẵn sàng chuyển đổi các module thành microservices khi cần thiết. Kiến trúc này giúp việc bắt đầu một dự án trở nên dễ dàng hơn và có thể mở rộng quy mô khi yêu cầu tăng lên. Một số lý do nên cân nhắc Modular Monolithic:
- Simplified Management: Modular Monolithic giúp việc quản lý hệ thống tổng thể đơn giản hơn, giảm độ phức tạp khi phải xử lý quá nhiều microservices.
- Cost Efficiency: Khi gom lại và hợp nhất các service, ta có thể giảm chi phí vận hành liên quan đến mạng, hạ tầng và tài nguyên phụ trợ của nhiều microservices.
- Flexibility: Kiến trúc này đảm bảo khả năng chuyển từng module sang microservices bất cứ khi nào cần, cho phép mở rộng độc lập theo mức độ phát triển của hệ thống.
- Improved Performance: Do có ít network call hơn giữa các thành phần, Modular Monolithic có thể mang lại hiệu năng và độ trễ tốt hơn so với hệ thống vi dịch vụ phân tán mạnh.
Kết luận:
Tóm lại, trong tương lai hậu-Microservices, chúng ta có thể tiếp tục hướng đến việc phát triển các tính năng theo mô hình nhỏ gọn, thuận tiện hơn cho lập trình viên bằng cách áp dụng Serverless Architecture. Hoặc thay vào đó, chúng ta có thể cân nhắc hợp nhất dịch vụ theo kiến trúc Modular Monolith, một lựa chọn mang lại lợi ích trong quản lý tổng thể và tối ưu chi phí vận hành.
Được viết bởi Mr. Phong Nguyen - Bộ phận CNTT tại Home Credit Việt Nam