Chào mọi người, trước tiên, mình xin chân thành cảm ơn các bạn đã dành thời gian quý báu để đọc bài viết này. Hy vọng rằng từng phần trong bài viết sẽ mang đến cái nhìn rõ ràng hơn về hệ thống microservices cho tất cả mọi người. Mọi ý kiến và câu hỏi đều được hoan nghênh. Không dài dòng nữa, cùng bắt đầu nào!
1. Giới Thiệu – Monolithic là gì?
Ngày xưa, có một lập trình viên tên là A, anh ấy đã dành thời gian để phát triển một hệ thống bán hàng. Mọi thứ diễn ra rất thuận lợi cho đến khi số lượng người dùng vượt qua hàng triệu, và hệ thống bắt đầu xuất hiện vấn đề.
Lúc này, anh A mới nhận thấy mình đang sử dụng monolithic service - một kiến trúc phần mềm đơn khối, nơi mà tất cả các dịch vụ, cơ sở dữ liệu và giao diện được tích hợp chung một chỗ. Bất kỳ thay đổi nào cũng đều ảnh hưởng đến toàn bộ hệ thống. Dưới đây là một số vấn đề mà monolithic architecture gặp phải:
- Khả năng mở rộng (Scalability): Hệ thống khó mở rộng do phải tăng tài nguyên cho toàn bộ ứng dụng.
- Khả năng bảo trì (Maintainability): Việc bảo trì trở nên khó khăn do mọi dịch vụ gắn chặt với nhau.
- Tái sử dụng mã (Code reuse): Hạn chế trong việc tái sử dụng mã cho các dự án khác.
- Thời gian phát triển kéo dài (Long development): Thời gian phát triển gia tăng do tính phức tạp trong việc phát triển và triển khai.
- Nguy cơ tiềm ẩn (Potential risk): Việc xử lý các lỗi có thể trở nên khó khăn hơn.
- Khả năng tích hợp (Integrable): Hạn chế trong việc tích hợp các công nghệ khác nhau.
2. Microservice là gì?
Để vượt qua những vấn đề của kiến trúc monolithic, chúng ta cần một con đường mới. Như một bậc trí thức đã nói:
"Khi gặp khó khăn, hãy chia nhỏ vấn đề ra."
Microservice, hay còn gọi là hệ thống vi mô, bao gồm nhiều dịch vụ độc lập, có thể hoạt động độc lập và giao tiếp với nhau thông qua các giao thức như RESTful API, message queues hay RPC. Điều này cho phép mỗi dịch vụ được phát triển và triển khai riêng biệt.
2.1. Ưu và Nhược Điểm của Microservice
2.1.1. Ưu Điểm
- Tính Linh Hoạt: Các dịch vụ có thể phát triển và mở rộng độc lập, tạo điều kiện cho việc quản lý và phát triển ứng dụng.
- Tích Hợp Dễ Dàng: Khả năng kết nối với các hệ thống và dịch vụ bên ngoài diễn ra dễ dàng hơn.
- Khả Năng Mở Rộng: Mở rộng mỗi dịch vụ độc lập mà không ảnh hưởng đến các dịch vụ khác.
- Dễ Dàng Triển Khai: Hỗ trợ triển khai liên tục và tự động hóa quy trình.
2.1.2. Nhược Điểm
- Phức Tạp Hóa Quản Lý: Cần công cụ quản lý phức tạp để giám sát và vận hành các dịch vụ.
- Tăng Chi Phí Vận Hành: Chi phí có thể gia tăng do việc quản lý nhiều dịch vụ khác nhau.
Đồng thời, cần lưu ý rằng việc đảm bảo tính nhất quán và độ chính xác của dữ liệu trong môi trường microservice có thể thông qua giao dịch phân tán, trong đó có thuật toán two-phase commit (2PC).
3. Two Phase Commit (2PC)
Two Phase Commit (2PC) là một thuật toán giúp đảm bảo tính nhất quán trong giao dịch phân tán. Quy trình này bao gồm hai giai đoạn chính:
- Giai Đoạn Chuẩn Bị (Prepare Phase): Coordinator hỏi các node về khả năng thực hiện giao dịch.
- Giai Đoạn Thực Hiện (Commit Phase hoặc Abort Phase): Nếu tất cả các node phản hồi đồng ý, giao dịch sẽ được thực hiện. Nếu không, giao dịch sẽ bị hủy bỏ.
Quá trình này đảm bảo rằng mỗi giao dịch sẽ được thực hiện thành công hoặc hoàn lại toàn bộ.
4. Những Hạn Chế Của 2PC
- Độ Trễ: Thời gian chờ phản hồi từ tất cả các node có thể làm tăng độ trễ thực thi.
- Điểm Thất Bại Đơn Lẻ (Single Point of Failure): Coordinator có thể gặp sự cố, ảnh hưởng đến tất cả các giao dịch.
- Phụ Thuộc Vào Coordinator: Thời gian giao dịch tỷ lệ thuận với thời gian của node chậm nhất.
Mặc dù có những hạn chế này, 2PC vẫn là một trong những cách hiệu quả nhất để đảm bảo độ nhất quán trong giao dịch phân tán.
5. Kết Luận
Sự kết hợp giữa kiến trúc microservice và two-phase commit mang lại những lợi ích lớn trong việc xây dựng các hệ thống phân tán, đồng thời giúp giải quyết các thách thức về tính nhất quán dữ liệu. Điều này tạo nên nền tảng vững chắc cho việc phát triển các ứng dụng trong tương lai.
source: viblo