Kiến trúc Microservices
Giới thiệu microservices
-
Khái niệm
Microservices là một kiến trúc phần mềm trong đó hệ thống hoặc ứng dụng được chia thành nhiều dịch vụ hoạt động độc lập, mỗi dịch vụ tập trung vào một nghiệp vụ nào đó; ví dụ như nghiệp vụ Quản lý nhân sự, Nghiệp vụ mua hàng, Nghiệp vụ quản lý kho... Các dịch vụ này giao tiếp với nhau thông qua giao thức như HTTP/REST hoặc các hệ thống truyền tin như RabbitMQ, Kafka...
-
Đặc điểm của microservices
- Mỗi dịch vụ là một thành phần độc lập, thực hiện một chức năng, nghiệp vụ cụ thể, các dịch vụ giao tiếp với nhau qua giao thức như REST, gRPC hoặc message queue.
- Mỗi dịch vụ có thể được phát triển bởi các công nghệ khác nhau miễn là chúng tuân thủ giao thức giao tiếp chung.
- Mỗi dịch vụ được phát triển, triển khai và bảo trì độc lập và không làm ảnh hưởng đến các dịch vụ khác hoặc hệ thống.
- Mỗi dịch vụ sử dụng cơ sở dữ liệu riêng để đảm bảo không có sự phụ thuộc lẫn nhau về dữ liệu.
- Các dịch vụ được lưu trữ và chạy trên môi trường phân tán như Kubernetes hoặc Docker, điều này cho phép tiết kiệm tài nguyên hiệu quả hơn.
- Dễ dàng tích hợp với các công cụ DevOps và CI/CD để tự động hóa quá trình xây dựng, kiểm thử và triển khai.
- Vòng đời phát triển của mỗi dịch vụ có thể khác nhau giúp các nhóm làm việc hiệu quả mà không bị ràng buộc lẫn nhau.
- Khi một dịch vụ bị lỗi các dịch vụ khác vẫn có thể hoạt động mà không làm sụp đổ hệ thống.
-
Ưu điểm của microservices
- Mỗi dịch vụ có thể được phát triển và triển khai độc lập, giảm thời gian đưa sản phẩm ra thị trường.
- Một dự án có thể chia thành các nhóm nghiệp vụ riêng biệt nhằm phát huy thế mạnh của mỗi nhóm từ đó nâng cao hiệu suất làm việc.
- Mỗi dịch vụ có thể sử dụng công nghệ, ngôn ngữ lập trình, hoặc cơ sở dữ liệu phù hợp nhất.
- Dễ dàng mở rộng từng phần của ứng dụng theo nhu cầu.
- Lỗi ở một dịch vụ không làm sập toàn bộ hệ thống.
-
Nhược điểm của microservices
- Mỗi dịch vụ là một thực thể độc lập nên việc quản lý phức tạp hơn, đặc biệt là thiết lập và quản lý cơ chế đồng bộ trạng thái giữa các dịch vụ.
- Giai đoạn kiểm thử tích hợp, kiểm thử hệ thống tốn nhiều thời gian và công sức.
- Quá trình sửa lỗi rất khó khăn nhất là khi có nhiều dịch vụ và các lỗi liên quan đến giao tiếp hoặc dữ liệu.
- Thông thường các dịch vụ sẽ có cơ sở dữ liệu riêng, do đó cần phải có cơ chế đảm bảo tính toàn vẹn và nhất quán của dữ liệu, nhất là khi phát sinh nhiều giao dịch đối với một dịch vụ tại cùng một thời điểm.
- Kiến trúc Microservice đòi hỏi nhân sự tham gia phát triển và vận hành phải nắm vững nhiều công nghệ ở trình độ cao cùng với kiến thức nghiệp vụ vững vàng.
- Nhiều dịch vụ đồng nghĩa với việc cần nhiều tài nguyên (Máy chủ, CPU, RAM, Mạng,...) cùng với các công cụ hỗ trợ quản lý và giám sát.
- Sự cố ngắt kết nối sẽ làm hệ thống gián đoạn, giao tiếp giữa các dịch vụ có thể phát sinh độ trễ nhất là khi sử dụng giao thức HTTP hoặc gRPC.
- Khi thay đổi một dịch vụ cần phải có cơ chế chặt chẽ để đảm bảo không ảnh hưởng tới các dịch vụ khác.
-
Kết luận
- Kiến trúc Microservices phù hợp với hệ thống phức tạp và có nhu cầu phát triển lớn, tuy nhiên cần đánh giá kỹ về chi phí và kỹ thuật trước khi áp dụng.
- Không nên áp dụng kiến trúc Microservices cho các dự án nhỏ, các dự án không có nhu cầu mở rộng, các dự án không yêu cầu tính sẵn sàng cao hoặc khi nhân sự không nắm vững kiến trúc Microservice.