CHƯƠNG 1: TỔNG QUAN VỀ MÔ HÌNH MICROSERVICES 1. Động lực thúc đẩy mô hình Microservices Các ứng dụng phần mềm doanh nghiệp được thiết kế để đáp ứng nhiều yêu cầu kinh doanh của doanh nghiệp. Ban đầu, các công ty thường xây dựng ứng dụng theo mô hình Monolith truyền thống. Trong mô hình này, toàn bộ ứng dụng được triển khai và chạy trên một máy chủ hoặc một nhóm máy chủ duy nhất.
Tất cả các chức năng và quy trình kinh doanh được tích hợp trong một mã nguồn duy nhất. Theo thời gian, ứng dụng Monolith có thể trở nên phức tạp và khó quản lý hơn khi kích thước và quy mô của nó tăng lên do sự phức tạp về mặt nghiệp vụ của các hệ thống phần mềm doanh nghiệp. Việc thay đổi và triển khai các tính năng mới trở nên khó khăn do sự phụ thuộc mạnh mẽ giữa các thành phần trong Monolith. Nhằm giải quyết những khó khăn này, hướng kiến trúc Microservices đã ra đời [8].
Microservices cung cấp cho các nhà phát triển một hướng tiếp cận mới trong việc xây dựng phần mềm theo hướng dịch vụ bằng cách tổ chức các thành phần phần mềm thành những module nhỏ, phân tách ứng dụng thành các dịch vụ nhỏ hơn. Các module này được coi là những ứng dụng riêng rẽ, được phát triển và triển khai độc lập, giao tiếp với nhau thông qua các API. Mỗi Microservice cung cấp một API để cho phép các microservices khác gọi và tương tác với nó. API định nghĩa các giao thức và các tập lệnh mà các microservices có thể sử dụng để trao đổi dữ liệu và thực hiện các chức năng cần thiết.
Kiến trúc Microservices Kiến trúc Microservices là một kiến trúc phần mềm phân tán, trong đó ứng dụng được xây dựng dưới dạng một tập hợp các dịch vụ nhỏ, độc lập và phối hợp với nhau. Mỗi dịch vụ trong kiến trúc Microservices giải quyết một khía cạnh và chức năng cụ thể của ứng dụng như ghi log, tìm kiếm dữ liệu, đóng vai trò độc lập và có thể được triển khai, mở rộng và quản lý độc lập. Kiến trúc này được thể hiện chi tiết trong hình 1. Mô hình Microservices Các thành phần trong kiến trúc Microservices được mô tả chi tiết dưới đây: Service: Kiến trúc microservices xây dựng ứng dụng dưới dạng một tập hợp các dịch vụ nhỏ, tồn tại độc lập và có khả năng thực hiện một chức năng cụ thể.
Mỗi dịch vụ có thể được triển khai và quản lý độc lập, sử dụng ngôn ngữ lập trình và công nghệ phù hợp cho chức năng của mình. Các dịch vụ trong kiến trúc microservices giao tiếp với nhau thông qua các giao diện lập trình ứng dụng (API). Các API này định nghĩa các giao thức và tập lệnh mà các dịch vụ sử dụng để trao đổi dữ liệu và thực hiện các chức năng cần thiết. Giao tiếp qua API giúp các dịch vụ hoạt động độc lập và linh hoạt trong việc phát triển và triển khai.
Client: Khách hàng có thể sử dụng giao diện người dùng để tạo yêu cầu. Đồng thời, một hoặc nhiều vi dịch vụ được ủy quyền thông qua cổng API để thực hiện nhiệm vụ được yêu cầu. Kết quả là, ngay cả những vấn đề phức tạp lớn hơn đòi hỏi sự kết hợp của các vi dịch vụ cũng có thể được giải quyết tương đối dễ dàng. API Gateway: Cổng API là điểm nhận các yêu cầu từ khách hàng.
Thay vì yêu cầu trực tiếp các dịch vụ, khách hàng kết nối đến cổng API để chuyển tiếp các yêu cầu đến các dịch vụ thích hợp ở phía sau. Những ưu điểm và nhược điểm của mô hình Microservices 1. Ưu điểm của mô hinh Microservices Với những đặc điểm trong mô hình kiến trúc, hệ thống Microservices mang đến những những lợi ích cho các nhà phát triển và các kỹ sư trong việc phát triển và vận hành mà mô hình monolith không thể mang lại. a) Giảm thiểu công sức phát triển Kiến trúc Microservices cho phép phân tách ứng dụng thành các dịch vụ nhỏ độc lập.
Mỗi dịch vụ chỉ cần tập trung vào một chức năng cụ thể. Điều này giảm thiểu phạm vi và phức tạp của mỗi dịch vụ, giúp đơn giản hóa quá trình phát triển và bảo trì. Với kiến trúc Microservices, mỗi dịch vụ có thể được triển khai độc lập. Điều này đồng nghĩa với việc nhóm phát triển có thể làm việc độc lập trên từng dịch vụ mà không ảnh hưởng đến các dịch vụ khác trong hệ thống.
Điều này giảm thiểu sự phụ thuộc và tăng tốc độ phát triển. Mỗi dịch vụ có thể sử dụng công nghệ phù hợp cho mục tiêu và yêu cầu cụ thể của nó. Điều này cho phép nhóm phát triển lựa chọn công nghệ tốt nhất để giải quyết vấn đề cụ thể mà không bị ràng buộc bởi công nghệ của toàn bộ ứng dụng. Kiến trúc Microservices khuyến khích việc tái sử dụng các dịch vụ đã phát triển trước đó.
Các dịch vụ có thể được xây dựng và triển khai lại trong các ứng dụng khác nhau, giúp tiết kiệm thời gian và công sức phát triển. Ngoài ra, việc mở rộng hệ thống cũng trở nên dễ dàng hơn, vì mỗi dịch vụ có thể được mở rộng độc lập theo nhu cầu. Với kiến trúc Microservices, các dịch vụ có thể được kiểm thử độc lập. Điều này giúp giảm thiểu sự phức tạp và thời gian kiểm thử toàn bộ hệ thống.
Nhóm phát triển có thể tập trung vào việc kiểm thử từng dịch vụ một, đảm bảo tính ổn định và chất lượng của từng phần trong hệ thống. b) Khả năng mở rộng linh hoạt Kiến trúc Microservices cho phép khả năng mở rộng từng dịch vụ độc lập dựa trên yêu cầu tải và tài nguyên của từng dịch vụ. Nhà phát triển và vận hành có thể tập trung vào việc mở rộng chỉ những dịch vụ cần thiết mà không ảnh hưởng đến toàn bộ hệ thống. Điều này giúp tối ưu hóa việc sử dụng tài nguyên và đáp ứng linh hoạt với tải công việc biến đổi.
12 Microservices cho phép nhà phát triển và vận hành mở rộng hệ thống bằng cách thêm các phiên bản mới của cùng một dịch vụ và phân chia công việc giữa các phiên bản đó. Điều này giúp tăng khả năng xử lý số lượng yêu cầu lớn mà không ảnh hưởng đến hiệu suất hoặc sự ổn định của hệ thống. Ngoài ra, kiến trúc này cho phép tối ưu hóa việc sử dụng tài nguyên bằng cách chỉ mở rộng những phần của hệ thống đòi hỏi nhiều tài nguyên hơn. Bằng cách phân tách ứng dụng thành các dịch vụ nhỏ, các kỹ sư có thể phân bổ tài nguyên dựa trên yêu cầu của từng dịch vụ, giúp tối ưu hóa việc sử dụng tài nguyên và giảm thiểu lãng phí.
Mỗi dịch vụ trong Microservices có thể được mở rộng độc lập với nhau. Điều này cho phép các kỹ sư tập trung mở rộng những phần của hệ thống cần thiết mà không ảnh hưởng đến các phần khác. Họ có thể áp dụng mức độ mở rộng khác nhau cho từng dịch vụ dựa trên yêu cầu và tiêu chí hiệu suất. Kiến trúc Microservices cho phép nhà phát triển và vận hành linh hoạt đáp ứng với sự thay đổi trong yêu cầu và tải công việc, có thể thêm, loại bỏ hoặc thay đổi các dịch vụ một cách độc lập mà không ảnh hưởng đến toàn bộ hệ thống.
Điều này giúp hệ thống dễ dàng thích ứng với môi trường kinh doanh thay đổi và tăng cường khả năng mở rộng. c) Khả năng triển khai độc lập Mỗi dịch vụ có thể được triển khai độc lập. Điều này cho phép nhóm phát triển triển khai các thay đổi và cập nhật chỉ trên các dịch vụ cần thiết mà không ảnh hưởng đến các phần khác trong hệ thống. Kết quả là, quá trình triển khai trở nên nhanh chóng và linh hoạt hơn, không cần chờ đợi cho toàn bộ ứng dụng được triển khai.
Với khả năng triển khai độc lập, các lỗi hoặc sự cố có thể được giới hạn chỉ trong phạm vi của một dịch vụ cụ thể. Khi có lỗi xảy ra, các kỹ sư có thể tạm dừng hoặc quay lại phiên bản trước của dịch vụ đó mà không ảnh hưởng đến các dịch vụ khác. Điều này giảm rủi ro và tác động tiêu cực lên toàn bộ hệ thống. Kiến trúc Microservices thích hợp với các phương pháp tích hợp liên tục (CI) và triển khai liên tục (CD).
Với triển khai độc lập, nhà phát triển có thể tự động hóa quá trình triển khai và tích hợp, giúp tăng nhanh tốc độ triển khai và đảm bảo tính nhất quán của hệ thống. 13 d) Khả năng cô lập lỗi Trong kiến trúc Microservices, mỗi dịch vụ hoạt động độc lập với các dịch vụ khác. Điều này có nghĩa là nếu một dịch vụ gặp lỗi, lỗi chỉ ảnh hưởng đến dịch vụ đó mà không lan rộng sang các phần khác của hệ thống. Việc cô lập lỗi giúp hạn chế tác động của lỗi, giúp hệ thống tiếp tục hoạt động một cách bình thường trong khi vẫn có thể xử lý các yêu cầu từ các dịch vụ khác.
Khi một dịch vụ gặp lỗi, các dịch vụ khác trong hệ thống vẫn có thể tiếp tục hoạt động mà không bị ảnh hưởng. Điều này giúp tăng độ tin cậy của hệ thống và khả năng phục hồi sau lỗi. Nhà phát triển có thể xử lý lỗi trong dịch vụ bị lỗi mà không phải tắt toàn bộ hệ thống, đồng thời cho phép các dịch vụ khác vẫn tiếp tục phục vụ yêu cầu. Với kiến trúc Microservices, việc xác định và sửa lỗi trở nên dễ dàng hơn.
Nhà phát triển có thể xác định rõ ràng dịch vụ nào gặp lỗi và tập trung vào việc sửa lỗi trong dịch vụ đó mà không cần kiểm tra và sửa lỗi ở toàn bộ hệ thống. Điều này giúp giảm thời gian và công sức cần thiết để xử lý lỗi, đồng thời giảm thiểu rủi ro gây lỗi cho các phần khác của hệ thống. Mỗi dịch vụ trong kiến trúc Microservices có thể được xây dựng bằng công nghệ và ngôn ngữ khác nhau. Điều này cho phép sử dụng các công nghệ tốt nhất và phù hợp nhất cho từng dịch vụ cụ thể.
Đồng thời, nếu một dịch vụ gặp lỗi do sự cố công nghệ hoặc ngôn ngữ, chỉ dịch vụ đó bị ảnh hưởng và không ảnh hưởng đến các dịch vụ khác. e) Khả năng tích hợp với các công nghệ và ngăn xếp công nghệ khác nhau Kiến trúc Microservices cho phép sử dụng và tích hợp nhiều công nghệ khác nhau trong các dịch vụ riêng biệt. Mỗi dịch vụ có thể được xây dựng bằng ngôn ngữ lập trình và công nghệ phù hợp nhất cho nhiệm vụ cụ thể của nó. Việc này mang lại sự linh hoạt và khả năng tận dụng các công nghệ mới và phổ biến nhất cho từng thành phần của hệ thống.