CHƯƠNG 1: TỔNG QUAN VỀ KIẾN TRÚC MICROSERVICES Khi chúng ta bước vào thế giới kỹ thuật số hiện đại, trang web đã trở thành một công cụ không thể thiếu để tạo dựng một hình ảnh và tạo sự hiện diện trực tuyến cho cá nhân, doanh nghiệp và tổ chức. Tuy nhiên, việc xây dựng một trang web không đơn giản như một việc bỏ vài mã lệnh vào một trang giấy trắng. Để tạo ra một trang web chất lượng cao và mạnh mẽ, chúng ta cần tuân thủ một số nguyên tắc và sử dụng các công nghệ phù hợp. Trước tiên, chúng ta cần xác định rõ mục tiêu của trang web.
Mục tiêu có thể là cung cấp thông tin, tạo ra một trang thương mại điện tử hoặc tạo ra một cộng đồng trực tuyến. Quan trọng là chúng ta xác định mục tiêu này trước khi bắt đầu xây dựng để đảm bảo rằng trang web được thiết kế và phát triển để đáp ứng được nhu cầu của người dùng. Sau đó, chúng ta cần tạo một thiết kế giao diện người dùng hấp dẫn và thân thiện. Cấu trúc trang web cần được xác định, các phần tử được sắp xếp một cách hợp lý, và lựa chọn màu sắc, hình ảnh và biểu đồ phù hợp để tạo nên một trải nghiệm tốt cho người dùng.
Tuy nhiên, chỉ xây dựng một trang web đơn lẻ không đủ để đáp ứng được sự phức tạp và đa dạng của nhu cầu người dùng hiện đại. Đây là lúc Microservices xuất hiện để giúp chúng ta giải quyết vấn đề này. Microservices là gì? Microservices là một kiến trúc phần mềm phát triển ứng dụng dựa trên nguyên tắc chia nhỏ thành phần của hệ thống thành các dịch vụ nhỏ độc lập. Hiểu đơn giản là chia để trị.
Mỗi dịch vụ sẽ được đặt trên một server riêng (nếu có đủ điều kiện) để có thể dễ dàng để nâng cấp hoặc chỉnh sửa ứng dụng. Có thể thuê nhiều đơn vị khác nhau làm từng service khác nhau mà không ảnh hưởng gì đến dự án. Các service chạy độc lập với nhau hoặc giao tiếp với nhau. Thay vì xây dựng một ứng dụng monolithic (đơn lớp) lớn, microservices cho phép phân chia chức năng của hệ thống thành các dịch vụ riêng biệt, có thể được triển khai và quản lý độc lập.
1: Hình ảnh tổng quan về kiến trúc Microservices Hiểu đơn giản là nó tách nhỏ các chức năng ra làm 1 dịch vụ riêng lẽ độc lập và gần như không liên quan gì đến nhau. Chúng giao tiếp với nhau qua rất nhiều phương thức như rest API hay là GRPC hoặc có thể là lambda hoặc bất cứ phương thức nào có thể giao tiếp được. Với các dịch vụ được tách nhỏ độc lập như vậy thì các bạn hoàn toàn có thể nâng cấp, bảo trì bổ sung từng service riêng lẻ mà không hề làm ảnh hưởng tới cả tổng thể của cả 1 dự án. Với từng service nhỏ, các bước quản lý, tính toán và kiểm soát, xử lý lỗi sẽ trở nên đơn giản và nhanh chóng hơn so với cả phần mềm.
Kiến trúc microservices là gì? Kiến trúc Microservices là một kiến trúc phần mềm 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, gọi là microservices. Mỗi microservice thực hiện một chức năng cụ thể trong hệ thống và có thể được triển khai, quản lý và mở rộng độc lập với các microservice khác. 2 Kiến trúc microservice Trong kiến trúc Microservices, hệ thống ban đầu được phân chia thành các phần nhỏ hơn, gọi là microservices, thay vì xây dựng một ứng dụng monolithic (đơn lớp) lớn. Mỗi microservice có thể được xây dựng bằng ngôn ngữ và công nghệ riêng, và có thể chạy trên các máy chủ độc lập hoặc trong các môi trường đám mây.
Ưu điểm của Microservices − Độ linh hoạt và khả năng mở rộng: Kiến trúc microservices cho phép phát triển, triển khai và mở rộng từng dịch vụ độc lập nhau. Điều này cho phép các nhóm phát triển làm việc độc lập trên từng dịch vụ, sử dụng công nghệ và ngôn ngữ lập trình khác nhau. Nếu một dịch vụ cần được mở rộng hoặc nâng cấp, chỉ cần tăng cường dịch vụ đó mà không ảnh hưởng đến các dịch vụ khác. − Tính tổ chức và quản lý tốt: Mỗi dịch vụ trong kiến trúc microservices có thể được phát triển và quản lý bởi một nhóm độc lập, tập trung vào mục tiêu cụ thể của 17 dịch vụ đó.
Điều này tạo điều kiện cho sự tập trung và chuyên môn hóa trong quá trình phát triển và quản lý dịch vụ. Ngoài ra, kiến trúc microservices cũng hỗ trợ sự mở rộng ngang cho các nhóm phát triển, giúp tăng tốc độ phát triển và cải thiện hiệu suất. − Tích hợp dễ dàng: Mỗi dịch vụ trong kiến trúc microservices hoạt động như một thành phần độc lập, có thể tương tác và giao tiếp với các dịch vụ khác thông qua các giao thức và giao diện chuẩn. Điều này giúp dễ dàng tích hợp và mở rộng hệ thống bằng cách thêm, thay đổi hoặc loại bỏ các dịch vụ mà không ảnh hưởng đến toàn bộ ứng dụng.
Ngoài ra, mỗi dịch vụ có thể được xây dựng bằng ngôn ngữ và công nghệ phù hợp nhất cho nhiệm vụ của nó, giúp tối ưu hóa hiệu suất và sự linh hoạt. − Khả năng phát triển độc lập và triển khai liên tục: Với kiến trúc microservices, các dịch vụ có thể được phát triển độc lập nhau và triển khai một cách linh hoạt. Điều này giúp tăng tốc độ phát triển và cung cấp khả năng triển khai liên tục. Mỗi dịch vụ có thể được triển khai một cách độc lập, không cần phải triển khai toàn bộ ứng dụng.
Điều này giúp giảm thiểu rủi ro và hạn chế tác động đến các thành phần khác trong hệ thống. − Khả năng mở rộng và sử dụng lại: Kiến trúc microservices cho phép các dịch vụ được sử dụng lại và mở rộng một cách linh hoạt. Một dịch vụ có thể được sử dụng bởi nhiều ứng dụng hoặc giao diện người dùng khác nhau. Điều này giúp giảm thiểu việc phát triển và bảo trì lại nhiều lần cùng một chức năng và đồng thời tăng tính tái sử dụng và hiệu quả trong việc quản lý và duy trì mã nguồn.
Tóm lại, kiến trúc microservices mang lại nhiều lợi ích vượt trội như tính linh hoạt, khả năng mở rộng, quản lý tốt, tích hợp dễ dàng, phát triển độc lập và khả năng sử dụng lại. Tuy nhiên, cần lưu ý rằng việc triển khai và quản lý kiến trúc microservices cũng đòi hỏi sự phức tạp và quản lý tốt để đảm bảo tính ổn định và hiệu suất của toàn bộ hệ thống. Nhược điểm của Microservices Mặc dù kiến trúc microservices mang lại nhiều lợi ích, nhưng nó cũng có một số nhược điểm cần được xem xét. − Phức tạp trong việc quản lý và triển khai: Với kiến trúc microservices, hệ thống được chia thành nhiều dịch vụ độc lập, đòi hỏi quản lý và triển khai phức tạp hơn so với kiến trúc monolithic truyền thống.
Việc phải quản lý nhiều dịch vụ riêng 18 biệt, xử lý việc triển khai, theo dõi và gỡ lỗi các dịch vụ độc lập có thể gây khó khăn và đòi hỏi kỹ năng và công cụ quản lý tốt. − Vấn đề về tính nhất quán dữ liệu: Mỗi dịch vụ trong kiến trúc microservices có cơ sở dữ liệu riêng của mình. Điều này có thể dẫn đến vấn đề về tính nhất quán dữ liệu giữa các dịch vụ. Khi cần phải cập nhật hoặc truy vấn dữ liệu liên quan đến nhiều dịch vụ, việc đảm bảo tính nhất quán và đồng bộ hóa dữ liệu có thể trở nên phức tạp và tốn thời gian.
− Quản lý các phụ thuộc giữa các dịch vụ: Trong kiến trúc microservices, các dịch vụ có thể phụ thuộc vào nhau để hoạt động. Điều này có thể tạo ra các phụ thuộc phức tạp và có thể dẫn đến vấn đề về hiệu suất và khả năng mở rộng. Nếu một dịch vụ bị lỗi hoặc gặp vấn đề, có thể ảnh hưởng đến các dịch vụ khác và gây ra sự gián đoạn trong toàn bộ hệ thống. Để dễ hiểu, nếu các dịch vụ nhỏ thiết kế phục thuộc vào nhau theo chuỗi.
A gọi B, B gọi C, C gọi D. Nếu một mắt xích có giao tiếp API thay đổi, liệu các mắt xích khác có phải thay đổi theo không? Nếu có thì việc bảo trì, kiểm thử sẽ phức tạp tương tự ứng dụng một khối. Thiết kế dịch vụ tốt sẽ giảm tối đa ảnh hưởng lan truyền đến các dịch vụ khác. thay đổi lan truyền trong ứng dụng khiến cho việc nâng cấp, kiểm tra khó khăn hơn − Độ trễ và khả năng giao tiếp: Vì các dịch vụ trong kiến trúc microservices tương tác thông qua giao thức mạng, việc giao tiếp giữa các dịch vụ có thể tạo ra độ trễ.
Khi hệ thống phụ thuộc vào việc gọi qua lại giữa các dịch vụ, độ trễ này có thể ảnh hưởng đến hiệu suất tổng thể của ứng dụng. Đồng thời, việc quản lý và bảo mật các kênh giao tiếp cũng là một thách thức. Phải xử lý sự cố khi kết nối chậm, lỗi khi thông điệp không gửi được hoặc thông điệp gửi đến nhiều đích đến vào các thời điểm khác nhau. − Đòi hỏi kiến thức và kỹ năng cao: Triển khai và quản lý kiến trúc microservices đòi hỏi kiến thức và kỹ năng cao từ các nhà phát triển và quản lý hệ thống.
Việc tách biệt ứng dụng thành các dịch vụ độc lập và quản lý chúng đòi hỏi sự hiểu biết về kiến trúc, công nghệ, giao thức và các công cụ hỗ trợ liên quan. Điều này có thể là một thách thức đối với những tổ chức không có đủ nguồn lực và kiến thức để triển khai và duy trì kiến trúc microservices. Tóm lại, kiến trúc microservices có nhược điểm như phức tạp trong việc quản lý và triển khai, vấn đề về tính nhất quán dữ liệu, quản lý phụ thuộc, độ trễ và khả năng giao tiếp, 19 cũng như đòi hỏi kiến thức và kỹ năng cao. Trước khi triển khai kiến trúc microservices, cần xem xét cẩn thận và đảm bảo rằng lợi ích mà nó mang lại vượt qua nhược điểm và phù hợp với mục tiêu và yêu cầu của dự án.
Thiết kế phần mềm theo kiến trúc Microservices Thiết kế phần mềm theo kiến trúc Microservices (kiến trúc hướng dịch vụ) đặt trọng tâm vào việc chia ứng dụng thành các thành phần nhỏ độc lập gọi là microservices, mỗi microservice có thể được triển khai, quản lý và mở rộng độc lập với các microservice khác. Mỗi microservice thực hiện một chức năng cụ thể trong hệ thống và tương tác với nhau thông qua các giao thức mạng, chẳng hạn như HTTP, để truyền tải dữ liệu và gọi các chức năng của nhau.