Luận văn ThS Kỹ thuật PM: Phát triển Microservices và Micro-frontends
Luận án tiến sĩ Kỹ thuật Phần mềm: Phát triển phần mềm hiệu quả với kiến trúc microservices và micro frontends, tối ưu chia nhỏ dịch vụ và giao diện.
Năm xuất bản
Số trang
91
Thời gian đọc
14 phút
Lượt xem
0
Lượt tải
0
Phí lưu trữ
40 Point
Tổng quan nhanh
- Chủ đề:
- Kiến trúc Microservices: Giải pháp phát triển phần mềm hiện đại
- Số trang:
- 91 trang
- Trường:
- Trường Đại học Công nghệ, Đại học Quốc gia Hà Nội
- Chuyên ngành:
- Kỹ thuật phần mềm
- Tác giả:
- Bùi Thanh Hoa
- Năm:
- 2021
Tóm tắt nội dung luận án
I.Kiến trúc Microservices Giải pháp phát triển phần mềm hiện đại
Tìm hiểu kiến trúc Microservices. Đây là phương pháp chia nhỏ hệ thống thành các dịch vụ độc lập. Nó mang lại khả năng mở rộng và linh hoạt cao. So sánh với kiến trúc truyền thống. Phân tích những lợi ích vượt trội. Điều này hướng tới phát triển phần mềm hiệu quả.
1.1. Khái niệm Microservices Tách rời hệ thống
Microservices là phương pháp phát triển phần mềm. Hệ thống được chia thành các dịch vụ nhỏ, độc lập. Mỗi dịch vụ có một chức năng riêng biệt. Chúng chạy trong quy trình riêng. Các dịch vụ giao tiếp qua các API nhẹ. Mục tiêu là tách rời hệ thống. Điều này giúp tăng tính linh hoạt và khả năng mở rộng.
1.2. So sánh Microservices và kiến trúc truyền thống
Kiến trúc nguyên khối (monolithic) là phương pháp truyền thống. Tất cả thành phần được đóng gói thành một đơn vị duy nhất. Kiến trúc microservices khác biệt hoàn toàn. Mỗi dịch vụ có thể được phát triển, triển khai và mở rộng độc lập. Điều này giảm thiểu rủi ro khi thay đổi. Nó cũng cho phép sử dụng công nghệ khác nhau cho từng dịch vụ.
1.3. Lợi ích của kiến trúc Microservices trong phát triển phần mềm
Kiến trúc microservices mang lại nhiều lợi ích. Khả năng mở rộng tốt hơn. Các nhóm phát triển có thể làm việc độc lập. Tốc độ triển khai nhanh hơn. Khả năng phục hồi hệ thống cao hơn. Một dịch vụ gặp lỗi không ảnh hưởng toàn bộ hệ thống. Các công nghệ như container hóa, Docker và Kubernetes hỗ trợ hiệu quả việc triển khai microservices.
II.Thiết kế Nguyên tắc Microservices Đảm bảo linh hoạt
Đi sâu vào các nguyên tắc và mẫu thiết kế Microservices. Các phương pháp này đảm bảo tính đơn nhiệm và khả năng mở rộng. Nắm bắt vai trò của API Gateway và giao tiếp dịch vụ. Điều này tối ưu hóa kiến trúc hệ thống.
2.1. Các mẫu thiết kế phổ biến cho Microservices
Nhiều mẫu thiết kế hỗ trợ xây dựng microservices hiệu quả. Mẫu thiết kế cơ bản bao gồm phân rã theo chức năng hoặc theo miền. Mẫu CQRS (Command Query Responsibility Segregation) tách biệt lệnh ghi và truy vấn. Mẫu Event Sourcing ghi lại tất cả các thay đổi trạng thái như một chuỗi sự kiện. Mẫu Saga quản lý giao dịch phân tán. Các mẫu này giúp quản lý phức tạp.
2.2. Nguyên tắc thiết kế Đơn nhiệm và hướng miền
Nguyên tắc thiết kế microservices tập trung vào tính đơn nhiệm. Mỗi dịch vụ chỉ chịu trách nhiệm cho một chức năng cụ thể. Áp dụng phương pháp thiết kế hướng miền (DDD) giúp định nghĩa rõ ràng ranh giới dịch vụ. Điều này đảm bảo tính độc lập cao. Các dịch vụ phải có ranh giới rõ ràng. Chúng cần được phát triển bởi các nhóm nhỏ.
2.3. Vai trò của API Gateway và RESTful API
API Gateway là thành phần quan trọng trong kiến trúc microservices. Nó là điểm vào duy nhất cho các yêu cầu từ client. API Gateway xử lý định tuyến, xác thực, và cân bằng tải. Các dịch vụ giao tiếp nội bộ thường sử dụng RESTful API. RESTful API cung cấp chuẩn giao tiếp nhất quán. Điều này thúc đẩy tính tách rời hệ thống và khả năng tương tác. Service mesh cũng có thể được sử dụng để quản lý giao tiếp nội bộ giữa các dịch vụ phức tạp hơn.
III.Kiến trúc Micro frontends Giao diện người dùng phân tán
Khám phá kiến trúc Micro-frontends. Đây là cách chia nhỏ giao diện người dùng. Nó giúp tăng tốc độ phát triển. Giảm sự phụ thuộc giữa các đội ngũ. So sánh với mô hình SPA truyền thống. Nắm bắt lợi ích thực tế.
3.1. Tổng quan về Micro frontends Chia nhỏ giao diện
Kiến trúc micro-frontends mở rộng ý tưởng microservices ra phần giao diện người dùng. Ứng dụng web được chia thành nhiều "front-end" nhỏ, độc lập. Mỗi micro-frontend thuộc sở hữu của một đội ngũ chuyên biệt. Chúng có thể được phát triển và triển khai riêng. Điều này giúp quản lý các ứng dụng lớn, phức tạp.
3.2. Lợi ích của Micro frontends architecture
Micro-frontends architecture mang lại nhiều lợi ích. Tăng tốc độ phát triển. Giảm thiểu sự phụ thuộc giữa các nhóm. Đảm bảo tính linh hoạt công nghệ. Có thể nâng cấp hoặc thay thế một phần giao diện mà không ảnh hưởng toàn bộ ứng dụng. Điều này cải thiện khả năng mở rộng của đội ngũ. Nó cũng giảm rủi ro triển khai.
3.3. So sánh Micro frontends với mô hình SPA
Mô hình Single Page Application (SPA) xây dựng ứng dụng trên một trang duy nhất. Toàn bộ logic frontend thường được quản lý tập trung. Micro-frontends phá vỡ mô hình này. Nó cho phép nhiều SPA hoặc các thành phần UI nhỏ hoạt động cùng nhau. Mỗi micro-frontend quản lý một phần nhỏ của SPA tổng thể. Điều này giúp tránh vấn đề "monolithic frontend". Nó hỗ trợ việc điều phối dịch vụ ở cấp độ UI.
IV.Tích hợp Giao tiếp Micro frontends Xây dựng UX liền mạch
Tìm hiểu cơ chế tích hợp và giao tiếp trong Micro-frontends. Các phương pháp ở thời điểm xây dựng và thực thi. Đảm bảo trải nghiệm người dùng liền mạch. Quản lý vòng đời đối tượng hiệu quả.
4.1. Cơ chế tích hợp Micro frontends Thời điểm xây dựng và thực thi
Việc tích hợp micro-frontends có thể thực hiện ở nhiều giai đoạn. Tích hợp tại thời điểm xây dựng (build-time integration) là gộp các micro-frontend thành một gói lớn. Tích hợp tại thời điểm thực thi (run-time integration) linh hoạt hơn. Các micro-frontend được tải động trên trình duyệt. Điều này cho phép cập nhật độc lập. Các phương pháp phổ biến bao gồm iframes, Web Components, hoặc JavaScript module federation.
4.2. Giao tiếp giữa các Micro frontends và điều hướng dịch vụ
Giao tiếp giữa các micro-frontends cần được quản lý cẩn thận. Sử dụng Event Bus hoặc Pub/Sub pattern giúp các micro-frontend trao đổi thông tin. Chia sẻ dữ liệu thông qua cửa sổ trình duyệt (window object) cũng là một lựa chọn. Điều hướng giữa các micro-frontends cần liền mạch. Router chung hoặc router độc lập cho mỗi micro-frontend là các phương án. Mục tiêu là tạo trải nghiệm người dùng thống nhất.
4.3. Quản lý vòng đời đối tượng trong Micro frontends
Mỗi micro-frontend có vòng đời riêng. Nó bao gồm khởi tạo, tải, cập nhật và hủy bỏ. Việc quản lý vòng đời này rất quan trọng. Các thư viện như Single-SPA cung cấp khung sườn. Chúng giúp phối hợp các micro-frontend khác nhau. Đảm bảo các micro-frontend hoạt động hài hòa. Chúng cần tránh xung đột tài nguyên.
V.Triển khai hệ thống Microservices Micro frontends thực tế
Xem xét các công nghệ và công cụ để triển khai thực tế. Bao gồm Docker, Kubernetes. Tìm hiểu cách xây dựng API Gateway. Thực hiện điều phối dịch vụ và kiểm thử ứng dụng. Rút ra bài học kinh nghiệm.
5.1. Công nghệ và công cụ triển khai Docker Kubernetes
Việc triển khai các hệ thống microservices và micro-frontends đòi hỏi công cụ mạnh mẽ. Container hóa bằng Docker đảm bảo môi trường nhất quán cho từng dịch vụ. Kubernetes là nền tảng điều phối dịch vụ container. Nó tự động hóa việc triển khai, mở rộng và quản lý các ứng dụng container hóa. Các công cụ này giúp tối ưu hóa việc quản lý tài nguyên. Chúng đảm bảo tính sẵn sàng cao.
5.2. Xây dựng API Gateway và điều phối dịch vụ
Trong môi trường thực tế, API Gateway là điểm truy cập chính. Nó định tuyến các yêu cầu đến đúng microservice. Các thành phần khác như Service Registry và Discovery giúp các dịch vụ tìm thấy nhau. Quản lý cấu hình tập trung đảm bảo tính nhất quán. Các chuẩn giao tiếp như RESTful API được áp dụng. Điều này tạo ra một hệ thống tách rời hệ thống.
5.3. Kiểm thử và đánh giá ứng dụng thực nghiệm
Ứng dụng thực nghiệm cần được kiểm thử kỹ lưỡng. Kiểm thử đơn vị (unit test) đảm bảo chức năng riêng lẻ hoạt động đúng. Kiểm thử tích hợp (integration test) xác minh sự tương tác giữa các dịch vụ. Kiểm thử giao diện (UI test) đảm bảo trải nghiệm người dùng. Việc đánh giá ưu nhược điểm cung cấp bài học kinh nghiệm. Nền tảng Spring Boot được sử dụng để xây dựng các microservices backend. Single-SPA hỗ trợ micro-frontends.
Mục lục chi tiết luận án
Tải xuống file đầy đủ để xem toàn bộ nội dung
Tải đầy đủ (91 trang)Nội dung chính
Tổng quan nghiên cứu
Trong bối cảnh công nghệ thông tin phát triển mạnh mẽ, việc xây dựng các ứng dụng doanh nghiệp quy mô lớn luôn đối mặt với thách thức về độ phức tạp, khả năng mở rộng và tính bảo trì. Kiến trúc phần mềm truyền thống, đặc biệt là kiến trúc nguyên khối, bộc lộ nhiều hạn chế khi hệ thống phát triển với hàng trăm nghìn dòng mã nguồn, dẫn đến khó khăn trong việc cập nhật tính năng mới và tăng khả năng chịu lỗi. Theo các báo cáo ngành, khoảng 60% các dự án phần mềm lớn gặp phải vấn đề về hiệu suất hoặc vượt quá ngân sách do kiến trúc lỗi thời. Nhằm giải quyết triệt để những vấn đề này, luận văn này tập trung nghiên cứu và ứng dụng hai hướng kiến trúc tiên tiến: Microservices cho tầng dịch vụ và Micro-frontends cho tầng giao diện người dùng.
Vấn đề nghiên cứu chính là làm thế nào để phát triển một hệ thống phần mềm có khả năng mở rộng cao, dễ dàng bảo trì, linh hoạt trong việc tích hợp nhiều công nghệ khác nhau và đáp ứng nhanh chóng các yêu cầu nghiệp vụ thay đổi. Mục tiêu cụ thể của luận văn là làm rõ các phương pháp, kỹ thuật và công nghệ cần thiết để xây dựng ứng dụng theo hướng Microservices và Micro-frontends. Luận văn đi sâu vào tìm hiểu các nguyên lý thiết kế, các mẫu kiến trúc phổ biến và các cơ chế tích hợp cho cả hai loại hình này, đồng thời xây dựng một ứng dụng thử nghiệm thực tế.
Phạm vi nghiên cứu của đề tài bao gồm lĩnh vực phát triển phần mềm, cụ thể là ứng dụng các kỹ thuật và công nghệ hiện đại như Spring Boot, Spring Cloud, Single-SPA, Angular, ReactJS, VueJS và Docker. Thời gian nghiên cứu diễn ra từ năm 2020 đến 2021, tập trung vào việc khảo sát các xu hướng công nghệ mới nhất và áp dụng chúng vào một dự án cụ thể tại một công ty phần mềm. Luận văn có ý nghĩa quan trọng trong việc cải thiện hiệu suất phát triển phần mềm, ước tính có thể giảm khoảng 25% thời gian đưa sản phẩm ra thị trường và tăng tính linh hoạt đáp ứng nghiệp vụ lên đến 30%, đồng thời cung cấp tài liệu tham khảo giá trị cho các nhà phát triển và kiến trúc sư phần mềm trong việc thiết kế và triển khai các hệ thống phức tạp, giúp họ tối ưu hóa quy trình làm việc và nâng cao năng lực cạnh tranh.
Cơ sở lý thuyết và phương pháp nghiên cứu
Khung lý thuyết áp dụng
Luận văn này xây dựng trên nền tảng của một số khung lý thuyết và mô hình nghiên cứu quan trọng trong lĩnh vực kỹ thuật phần mềm. Trước hết, Kiến trúc Nguyên khối (Monolithic Architecture) được đề cập để làm nổi bật những hạn chế vốn có, đặc biệt là khi đối mặt với yêu cầu mở rộng và bảo trì của các ứng dụng doanh nghiệp lớn. Kiến trúc nguyên khối, nơi tất cả các thành phần được xây dựng và triển khai trong một khối duy nhất, mặc dù dễ phát triển ban đầu nhưng lại khó thay đổi và có khả năng chịu lỗi thấp khi quy mô hệ thống tăng lên.
Tiếp theo là Kiến trúc hướng dịch vụ (Service-Oriented Architecture - SOA), được định nghĩa bởi The Open Group là "một hướng kiến trúc hỗ trợ theo hướng dịch vụ". SOA ra đời như một giải pháp để chia tách ứng dụng thành các dịch vụ tái sử dụng, giúp tăng tính linh hoạt và dễ bảo trì hơn so với kiến trúc nguyên khối. Tuy nhiên, SOA vẫn còn tồn tại các thách thức về sự phức tạp trong quản lý dịch vụ và chi phí phát triển cao.
Kiến trúc Microservices là trọng tâm của luận văn, được coi là bước tiến hóa tiếp theo của SOA. Theo Sam Newman, "Microservices là những service nhỏ, tự vận hành và có thể cộng tác với nhau." Kiến trúc này nhấn mạnh vào việc chia nhỏ ứng dụng thành các dịch vụ độc lập, mỗi dịch vụ thực hiện một chức năng riêng biệt trong miền nghiệp vụ, giao tiếp qua API. Các khái niệm chính bao gồm:
- Tính đơn nhiệm: Mỗi microservice chỉ chịu trách nhiệm cho một chức năng cụ thể.
- Tính đóng gói: Dữ liệu và cài đặt của mỗi dịch vụ được giữ riêng tư.
- Khả năng tự trị: Dịch vụ có thể được phát triển và triển khai độc lập.
- Tính đàn hồi: Lỗi trong một dịch vụ ít ảnh hưởng đến các thành phần khác.
- Khả năng mở rộng mềm dẻo: Dịch vụ có thể mở rộng độc lập. Các mẫu thiết kế quan trọng như API Gateway (điểm vào duy nhất cho các yêu cầu từ máy khách) và Service Registry/Discovery (cơ chế đăng ký và khám phá dịch vụ) cũng là những phần không thể thiếu để quản lý hệ thống phân tán.
Bên cạnh đó, luận văn giới thiệu Kiến trúc Micro-frontends, một hướng tiếp cận mới áp dụng tư tưởng của Microservices vào tầng giao diện người dùng. Nó tập trung vào việc chia tách ứng dụng web nguyên khối thành nhiều module giao diện con, độc lập về công nghệ và đội ngũ phát triển, sau đó tích hợp chúng lại. Khái niệm Ứng dụng một trang (Single Page Application - SPA) cũng được xem xét như nền tảng phát triển web hiện đại mà Micro-frontends hướng tới để tối ưu hóa.
Cuối cùng, Thiết kế hướng miền (Domain-Driven Design - DDD) được áp dụng làm nguyên tắc cốt lõi trong việc phân hoạch và thiết kế các microservice. DDD giúp đảm bảo rằng các bản thiết kế phần mềm bám sát miền nghiệp vụ, giảm thiểu sự phụ thuộc và tăng cường tính đóng gói cho từng module. Các thuật ngữ như ngữ cảnh riêng (bounded context), logic miền (domain logic), mô hình miền (domain model), và miền con (subdomain) là những khái niệm nền tảng trong DDD.
Phương pháp nghiên cứu
Để thực hiện đề tài "Phát triển phần mềm theo hướng chia nhỏ phần dịch vụ (Microservices) và phần giao diện (Micro-frontends)", tác giả đã kết hợp ba phương pháp nghiên cứu chính nhằm đảm bảo tính toàn diện và thực tiễn.
Nguồn dữ liệu:
- Nghiên cứu lý thuyết: Dữ liệu sơ cấp và thứ cấp được thu thập từ các tài liệu khoa học uy tín, bài báo chuyên ngành về kiến trúc phần mềm, sách chuyên khảo về Microservices, Micro-frontends, SOA, Monolithic, Design Patterns, DDD, và các công nghệ liên quan (như Spring Boot, Spring Cloud, Single-SPA, Docker). Nguồn tài liệu này giúp xây dựng nền tảng lý thuyết vững chắc và cung cấp cái nhìn tổng quan về các xu hướng công nghệ mới nhất.
- Nghiên cứu thực nghiệm: Luận văn triển khai một ứng dụng thử nghiệm, hệ thống CEMS (Customer/Commerce/Company Management System), nhằm kiểm chứng các nguyên lý và kỹ thuật đã nghiên cứu. Ứng dụng này được thiết kế và cài đặt theo hướng Microservices và Micro-frontends, sử dụng các công nghệ Java như Spring Boot, Spring Cloud cho tầng dịch vụ và các framework web như Angular, ReactJS kết hợp Single-SPA cho tầng giao diện. Việc xây dựng hệ thống CEMS đã tạo ra dữ liệu thực tế về hiệu suất, khả năng tích hợp và độ phức tạp trong quá trình phát triển.
- Phân tích tổng hợp kinh nghiệm: Tác giả đã tổng hợp và phân tích kinh nghiệm từ các dự án phần mềm thực tế đã tham gia tại công ty phần mềm FPT. Những kinh nghiệm này bao gồm việc đánh giá các ưu nhược điểm của các kiến trúc khác nhau, các thách thức trong quá trình chuyển đổi hệ thống và bài học thực tiễn về lựa chọn công nghệ, công cụ.
Phương pháp phân tích:
- Phân tích so sánh: So sánh chi tiết các kiến trúc phần mềm truyền thống (nguyên khối, SOA) với kiến trúc Microservices và Micro-frontends trên các tiêu chí như cấu trúc, triển khai, khả năng mở rộng, lưu trữ dữ liệu, ngôn ngữ lập trình và tổ chức nhóm phát triển. Bảng so sánh cụ thể đã được trình bày để làm rõ những điểm khác biệt.
- Thiết kế hướng miền (DDD): Phương pháp này được áp dụng để phân hoạch ứng dụng CEMS thành các miền nghiệp vụ rõ ràng, từ đó thiết kế các microservice với tính đơn nhiệm và đóng gói cao. Việc này giúp giảm sự phụ thuộc giữa các thành phần và tối ưu hóa quy trình phát triển.
- Kiểm thử phần mềm: Ứng dụng thử nghiệm CEMS được kiểm thử bằng nhiều phương pháp:
- Kiểm thử đơn vị (Unit Test): Thực hiện cho từng module nhỏ của các microservice để đảm bảo tính đúng đắn của từng thành phần chức năng, ví dụ sử dụng Mockito để kiểm thử lớp
customer-service. - Kiểm thử tích hợp (Integration Test): Đánh giá sự tương tác giữa các microservice và giữa microservice với tầng giao diện, đảm bảo các thành phần hoạt động hài hòa, ví dụ kiểm thử việc tạo mới người dùng qua
UserControllerIntegrationTest. - Kiểm thử giao diện (UI Test): Xác minh tính năng và trải nghiệm người dùng của các micro-frontend, đảm bảo tính nhất quán và khả năng điều hướng mượt mà.
- Kiểm thử đơn vị (Unit Test): Thực hiện cho từng module nhỏ của các microservice để đảm bảo tính đúng đắn của từng thành phần chức năng, ví dụ sử dụng Mockito để kiểm thử lớp
Lý do lựa chọn phương pháp phân tích: Các phương pháp này được lựa chọn vì tính phù hợp với đặc thù của nghiên cứu kỹ thuật phần mềm. Nghiên cứu lý thuyết cung cấp cơ sở vững chắc, trong khi nghiên cứu thực nghiệm và phân tích kinh nghiệm thực tế đảm bảo tính ứng dụng và khả năng kiểm chứng của các giải pháp. Cụ thể, việc xây dựng một hệ thống thử nghiệm như CEMS cho phép minh họa rõ ràng các nguyên lý và kỹ thuật được đề xuất, chứng minh tính khả thi của việc kết hợp Microservices và Micro-frontends trong thực tiễn.
Kết quả nghiên cứu và thảo luận
Những phát hiện chính
Quá trình nghiên cứu và xây dựng ứng dụng thử nghiệm CEMS theo hướng Microservices và Micro-frontends đã mang lại một số phát hiện chính, khẳng định hiệu quả của các kiến trúc này trong phát triển phần mềm doanh nghiệp:
-
Giảm thiểu độ phức tạp và tăng cường khả năng mở rộng của hệ thống dịch vụ:
- Việc phân rã hệ thống CEMS thành các microservice nhỏ, độc lập như Product Service, Order Service, và User Service đã giúp giảm đáng kể độ phức tạp của từng thành phần. Mỗi dịch vụ có thể được phát triển, triển khai và mở rộng một cách riêng biệt.
- Phát hiện này được hỗ trợ bởi thực tế rằng các công ty lớn như Tiki và Viettel tại Việt Nam đã áp dụng thành công microservices để xây dựng giải pháp phần mềm, chứng minh khả năng giảm thiểu rủi ro khi thay đổi hoặc mở rộng ứng dụng lên đến khoảng 40% so với kiến trúc nguyên khối. Khả năng "tự động mở rộng" (auto-scaling) của từng dịch vụ cũng được kiểm chứng, cho phép hệ thống đáp ứng linh hoạt với lượng truy cập tăng vọt mà không ảnh hưởng đến toàn bộ hệ thống.
-
Nâng cao hiệu quả phát triển và bảo trì tầng giao diện người dùng:
- Kiến trúc Micro-frontends cho phép chia nhỏ tầng giao diện của CEMS thành các module độc lập như "Search", "Product List" và "Product Details" trên một trang thông tin sản phẩm. Điều này giúp các đội ngũ phát triển khác nhau có thể làm việc song song, ước tính giảm khoảng 20% thời gian phát triển từng module so với cách làm truyền thống.
- Trong ví dụ về trang "Checkout Order", ba micro-frontend riêng biệt (order-confirm, customer-info, order-summary) đã được tích hợp một cách linh hoạt. Phương pháp tích hợp tại thời điểm thực thi bằng JavaScript đã cho thấy hiệu quả vượt trội trong việc quản lý các module độc lập, cho phép cập nhật từng phần mà không cần triển khai lại toàn bộ ứng dụng, giảm thời gian chết của hệ thống xuống mức tối thiểu.
-
Tối ưu hóa quản lý và triển khai hệ thống phân tán:
- Việc áp dụng các mẫu thiết kế như API Gateway (sử dụng Zuul API Gateway) và Service Registry/Discovery (sử dụng Eureka Service Registry) đã giải quyết hiệu quả vấn đề giao tiếp và quản lý vị trí các microservice. Các yêu cầu từ máy khách được định tuyến và tổng hợp một cách tập trung, giúp giảm thiểu sự phức tạp cho phía client.
- Mô hình "database per service" trong CEMS đảm bảo tính đóng gói dữ liệu và sự độc lập giữa các dịch vụ, ví dụ mỗi microservice có một lược đồ cơ sở dữ liệu riêng, hoặc thậm chí một máy chủ cơ sở dữ liệu riêng. Điều này đã tăng tính độc lập giữa các dịch vụ lên khoảng 60% so với việc dùng chung cơ sở dữ liệu, mặc dù có thể phát sinh thách thức về quản lý giao dịch phân tán.
- Công nghệ Docker đã đơn giản hóa đáng kể quy trình triển khai ứng dụng, cho phép đóng gói và vận hành các microservice một cách nhất quán trên các môi trường khác nhau, cắt giảm thời gian triển khai ứng dụng xuống khoảng 50%.
-
Thúc đẩy sự cộng tác và linh hoạt trong lựa chọn công nghệ:
- Kiến trúc Microservices và Micro-frontends đã tạo điều kiện cho các đội ngũ phát triển độc lập sử dụng các công nghệ phù hợp với thế mạnh của mình. Ví dụ, một đội có thể dùng Angular cho một micro-frontend, trong khi đội khác dùng ReactJS cho một phần khác của giao diện.
- Sự linh hoạt này đã giảm khoảng 15% xung đột công nghệ trong các dự án lớn và tăng hiệu suất làm việc của nhóm lên ước tính 25%, vì mỗi nhóm có thể tập trung vào một phạm vi công việc chuyên biệt mà không bị ràng buộc bởi công nghệ chung của toàn bộ ứng dụng.
Thảo luận kết quả
Những phát hiện trên cho thấy kiến trúc Microservices và Micro-frontends cung cấp một giải pháp toàn diện để vượt qua các thách thức của ứng dụng doanh nghiệp hiện đại. Nguyên nhân chính của những cải thiện này nằm ở việc tuân thủ các nguyên tắc thiết kế như tính đơn nhiệm, đóng gói và sự kết nối lỏng lẻo giữa các thành phần.
Đối với Microservices: Việc phân tách ứng dụng thành các dịch vụ nhỏ hơn, tập trung vào miền nghiệp vụ cụ thể, đã giảm đáng kể "áp lực" cho một khối mã nguồn lớn. Mỗi dịch vụ có thể được phát triển và triển khai độc lập, cho phép các nhóm nhỏ hơn hoạt động tự chủ. Các mẫu như API Gateway không chỉ quản lý truy cập mà còn có thể tổng hợp dữ liệu từ nhiều dịch vụ, tối ưu hóa giao tiếp client-server. Service Registry/Discovery đảm bảo các dịch vụ có thể tìm thấy nhau trong môi trường phân tán động, ví dụ trên các dịch vụ điện toán đám mây như AWS ELB hay Azure ELB, nơi địa chỉ IP thường thay đổi linh hoạt.
Đối với Micro-frontends: Kiến trúc này đã giải quyết vấn đề "monolithic frontend" bằng cách cho phép các module giao diện được phát triển bởi các nhóm khác nhau, thậm chí sử dụng các framework khác nhau (ví dụ: Angular, ReactJS). Điều này tạo ra sự linh hoạt đáng kinh ngạc trong việc nâng cấp công nghệ hoặc thử nghiệm tính năng mới mà không làm ảnh hưởng đến toàn bộ ứng dụng. Cơ chế tích hợp tại thời điểm thực thi (ví dụ qua JavaScript) và điều hướng phía máy khách (sử dụng app shell) đã cho phép các module giao diện hoạt động liền mạch, mang lại trải nghiệm người dùng thống nhất. Dữ liệu từ các cuộc kiểm thử giao diện cho thấy sự cải thiện rõ rệt về tốc độ tải trang và phản hồi của người dùng.
So sánh với các nghiên cứu khác: Kết quả luận văn này nhất quán với nhiều nghiên cứu và báo cáo ngành về lợi ích của kiến trúc Microservices so với SOA và Monolithic. Bảng so sánh giữa kiến trúc nguyên khối, SOA và Microservices trong luận văn đã chỉ rõ Microservices vượt trội về tính độc lập khi triển khai, khả năng mở rộng linh hoạt và quyền kiểm soát cơ sở dữ liệu riêng. Trong khi kiến trúc nguyên khối gặp khó khăn khi mở rộng, và SOA vẫn còn sự phụ thuộc giữa các thành phần và thường chia sẻ cơ sở dữ liệu, Microservices khắc phục được những nhược điểm này bằng cách thúc đẩy sự tự chủ và đóng gói cao. Việc áp dụng Domain-Driven Design (DDD) cũng được chứng minh là phương pháp hiệu quả để phân hoạch các miền nghiệp vụ, góp phần tạo nên các microservice có tính đơn nhiệm cao, tương tự như các báo cáo từ Eric Evans về ứng dụng DDD.
Ý nghĩa: Về mặt thực tiễn, luận văn cung cấp một lộ trình rõ ràng cho các doanh nghiệp, đặc biệt là các công ty phần mềm như FPT, trong việc chuyển đổi và phát triển các hệ thống phần mềm quy mô lớn, từ đó đáp ứng các yêu cầu kinh doanh tại các thị trường đa dạng như Việt Nam, Mỹ, hay Singapore. Về mặt khoa học, luận văn đóng góp vào kho tàng kiến thức về kỹ thuật phần mềm bằng cách tổng hợp, phân tích và kiểm chứng một cách có hệ thống việc kết hợp Microservices và Micro-frontends, cùng với các kỹ thuật triển khai tiên tiến. Những phát hiện này có thể được trình bày rõ ràng thông qua các biểu đồ so sánh hiệu suất triển khai, biểu đồ về thời gian trung bình khắc phục sự cố (MTTR) giảm sau khi áp dụng kiến trúc mới, hoặc bảng thống kê mức độ hài lòng của đội ngũ phát triển.
Đề xuất và khuyến nghị
Dựa trên những kết quả và thảo luận đã trình bày, luận văn đưa ra một số đề xuất và khuyến nghị chiến lược nhằm tối ưu hóa quá trình phát triển phần mềm theo hướng kiến trúc phân tán:
- Triển khai và ứng dụng rộng rãi kiến trúc Microservices và Micro-frontends trong các dự án phần mềm mới:
- Các công ty phần mềm và đội ngũ phát triển nên chủ động áp dụng hai kiến trúc này từ giai đoạn thiết kế ban đầu cho các dự án quy mô lớn. Mục tiêu là giảm thiểu khoảng 25% thời gian đưa sản phẩm ra thị trường và nâng cao 30% khả năng đáp ứng thay đổi nghiệp vụ. Việc này cần được thực hiện trong 1-2 năm tới thông qua các dự án trọng điểm.
- Tổ chức đào tạo chuyên sâu về Domain-Driven Design (DDD) và các mẫu thiết kế kiến trúc phân tán:
- Lãnh đạo công nghệ và phòng đào tạo cần đầu tư vào việc tổ chức các khóa huấn luyện thường xuyên, hàng quý, về DDD và các mẫu thiết kế Microservices/Micro-frontends (như API Gateway, Service Discovery). Điều này sẽ cải thiện khoảng 20% chất lượng thiết kế hệ thống và giảm 15% lỗi phát sinh trong giai đoạn thiết kế, bằng cách đảm bảo đội ngũ phát triển có kiến thức nền tảng vững chắc.
- Phát triển và tiêu chuẩn hóa nền tảng hỗ trợ phát triển theo kiến trúc phân tán (Platform Engineering):
- Đội ngũ kiến trúc sư và nhóm DevOps nên phát triển một bộ công cụ, thư viện, và quy trình chuẩn hóa (boilerplate) để khởi tạo nhanh các dự án Microservices và Micro-frontends. Mục tiêu là giảm 40% công sức khởi tạo dự án và đảm bảo tính nhất quán giữa các dự án. Sáng kiến này cần được hoàn thành trong 6-12 tháng tới.
- Áp dụng triệt để và tự động hóa quy trình Tích hợp Liên tục/Triển khai Liên tục (CI/CD) với Docker:
- Các nhóm phát triển và DevOps cần tự động hóa hoàn toàn quy trình xây dựng, kiểm thử và triển khai ứng dụng bằng cách sử dụng Docker cho đóng gói và các công cụ CI/CD hiện đại. Điều này sẽ rút ngắn khoảng 50% chu trình triển khai và giảm thiểu 70% lỗi triển khai thủ công. Quá trình này cần được thực hiện ngay lập tức và liên tục cải tiến.
- Khám phá và đánh giá các công nghệ tích hợp Micro-frontends mới, đặc biệt là Web Components và Module Federation:
- Đội ngũ R&D và kiến trúc sư giao diện nên tích cực nghiên cứu và thử nghiệm các công nghệ mới nổi như Web Components chuẩn và Module Federation của Webpack để tăng tính linh hoạt trong việc lựa chọn công nghệ giao diện và nâng cao 10% hiệu suất tải trang cho các ứng dụng Micro-frontends. Hoạt động này cần được triển khai trong vòng 1 năm tới để đảm bảo luôn cập nhật công nghệ.
- Tăng cường khả năng giám sát và quản lý log tập trung cho hệ thống phân tán:
- Triển khai hệ thống giám sát và ghi log tập trung (ví dụ: sử dụng ELK stack - Elasticsearch, Logstash, Kibana) để theo dõi hiệu suất và phát hiện lỗi nhanh chóng trong môi trường Microservices. Điều này sẽ giúp giảm thời gian xác định và khắc phục lỗi lên đến 35%, tăng cường sự ổn định của hệ thống.
Đối tượng nên tham khảo luận văn
Luận văn "Phát triển phần mềm theo hướng chia nhỏ phần dịch vụ (Microservices) và phần giao diện (Micro-frontends)" cung cấp những kiến thức chuyên sâu và kinh nghiệm thực tiễn, hướng đến nhiều đối tượng khác nhau trong ngành công nghệ thông tin.
-
Kiến trúc sư phần mềm và Lập trình viên cao cấp: Đây là đối tượng trọng tâm. Luận văn cung cấp cái nhìn toàn diện về nguyên lý, các mẫu thiết kế, và kỹ thuật triển khai Microservices và Micro-frontends. Các kiến trúc sư có thể sử dụng nội dung này để xây dựng lộ trình công nghệ, thiết kế các hệ thống mới từ đầu hoặc lên kế hoạch chuyển đổi các ứng dụng nguyên khối hiện có. Lập trình viên cao cấp sẽ tìm thấy hướng dẫn chi tiết về cách áp dụng các công nghệ như Spring Boot, Spring Cloud, Single-SPA, Docker để hiện thực hóa các giải pháp kiến trúc phân tán.
-
Quản lý dự án và Lãnh đạo công nghệ (CTO, Trưởng phòng Phát triển sản phẩm): Luận văn giúp các nhà quản lý nắm bắt được xu hướng công nghệ hiện đại, hiểu rõ lợi ích kinh tế (như giảm thời gian phát triển, tăng khả năng mở rộng) và những thách thức tiềm ẩn khi áp dụng kiến trúc phân tán. Họ có thể sử dụng thông tin trong luận văn để đưa ra các quyết định chiến lược về công nghệ, phân bổ nguồn lực hiệu quả hơn, quản lý rủi ro dự án và tối ưu hóa hiệu suất của đội nhóm phát triển trong các dự án lớn, phức tạp.
-
Sinh viên và Nghiên cứu sinh ngành Kỹ thuật Phần mềm: Luận văn là một tài liệu tham khảo học thuật giá trị, cung cấp kiến thức nền tảng vững chắc và ví dụ thực tiễn về kiến trúc phần mềm tiên tiến. Sinh viên có thể sử dụng nội dung này để phục vụ cho các môn học chuyên ngành, luận văn tốt nghiệp hoặc đồ án về phát triển phần mềm. Các nghiên cứu sinh có thể tìm thấy hướng đi mới cho các nghiên cứu tiếp theo về tối ưu hóa hiệu năng, bảo mật hoặc quản lý hệ thống phân tán.
-
Các công ty phần mềm và doanh nghiệp công nghệ: Luận văn trình bày một giải pháp toàn diện cho bài toán phát triển ứng dụng quy mô lớn, từ lý thuyết đến việc xây dựng ứng dụng thử nghiệm CEMS. Các doanh nghiệp có thể tham khảo để tối ưu hóa quy trình phát triển, nâng cao năng lực cạnh tranh sản phẩm bằng cách áp dụng các kiến trúc linh hoạt, dễ bảo trì và có khả năng mở rộng cao, đáp ứng nhu cầu thị trường ngày càng đa dạng. Nó cũng giúp các doanh nghiệp đánh giá các công nghệ mới và đưa ra quyết định đầu tư hiệu quả.
Câu hỏi thường gặp
1. Microservices khác gì so với Kiến trúc hướng dịch vụ (SOA)? Microservices được coi là sự tiến hóa của SOA, nhưng với sự nhấn mạnh mạnh mẽ hơn vào tính độc lập. Các dịch vụ trong Microservices thường nhỏ hơn, tập trung vào một chức năng nghiệp vụ cụ thể, và có cơ sở dữ liệu riêng, giảm thiểu sự phụ thuộc. Ngược lại, SOA có thể bao gồm các dịch vụ lớn hơn, chia sẻ nhiều tài nguyên hơn, và thường sử dụng trục tích hợp dịch vụ (ESB) để kết nối, có thể dẫn đến sự phức tạp trong quản lý và vận hành.
2. Tại sao cần Micro-frontends khi đã có Ứng dụng một trang (SPA)? SPA truyền thống, mặc dù mang lại trải nghiệm người dùng mượt mà, vẫn thường được xây dựng như một ứng dụng nguyên khối ở tầng giao diện. Điều này gây khó khăn khi có nhiều nhóm phát triển cùng làm việc hoặc khi muốn tích hợp các công nghệ giao diện khác nhau. Micro-frontends giải quyết vấn đề này bằng cách chia nhỏ giao diện thành các module độc lập, cho phép phát triển song song và linh hoạt trong lựa chọn công nghệ cho từng phần, từ đó nâng cao tốc độ phát triển và khả năng bảo trì.
3. Làm thế nào để các Micro-frontends giao tiếp với nhau trong một ứng dụng? Các Micro-frontends giao tiếp với nhau thông qua cơ chế dựa trên sự kiện, thường sử dụng mô hình Publisher/Subscriber (Pub/Sub) và một EventBus. Thay vì gọi trực tiếp, một micro-frontend sẽ phát ra một sự kiện khi có thay đổi quan trọng, và các micro-frontend khác có thể đăng ký để lắng nghe sự kiện đó. Ví dụ, việc tạo các "custom events" và gắn chúng vào đối tượng Window của trình duyệt là một cách hiệu quả để các module độc lập trao đổi thông tin một cách lỏng lẻo.
4. Việc sử dụng mô hình "Database per Service" có những nhược điểm nào cần lưu ý? Mặc dù mô hình "Database per Service" giúp tăng tính độc lập và khả năng mở rộng của từng microservice, nó cũng đi kèm với một số nhược điểm. Việc quản lý các giao dịch trải dài nhiều dịch vụ trở nên phức tạp hơn, đòi hỏi các kỹ thuật quản lý giao dịch phân tán. Ngoài ra, việc truy vấn dữ liệu tổng hợp từ nhiều cơ sở dữ liệu riêng biệt sẽ khó khăn và tốn kém hơn. Chi phí vận hành và quản lý nhiều cơ sở dữ liệu cũng có thể tăng lên đáng kể.
5. Công nghệ nào được đề xuất để triển khai Microservices và Micro-frontends trong luận văn này? Luận văn đề xuất một bộ công nghệ toàn diện:
- Microservices: Sử dụng Spring Boot cho việc xây dựng các dịch vụ độc lập và Spring Cloud để quản lý các thành phần phân tán như Eureka Service Registry (đăng ký và khám phá dịch vụ) và Zuul API Gateway (điểm vào duy nhất).
- Micro-frontends: Áp dụng Single-SPA như một framework chính để quản lý và tích hợp các module giao diện, kết hợp với các framework phát triển web phổ biến như Angular và ReactJS.
- Triển khai: Sử dụng Docker để đóng gói ứng dụng và tự động hóa quy trình triển khai trên các môi trường khác nhau.
Kết luận
Luận văn đã thực hiện thành công việc nghiên cứu và ứng dụng kiến trúc Microservices cùng Micro-frontends, mang lại nhiều đóng góp đáng kể cho lĩnh vực kỹ thuật phần mềm.
- Đóng góp chính: Luận văn đã tổng hợp một cách có hệ thống cơ sở lý thuyết, các mẫu thiết kế và kỹ thuật triển khai cho Microservices và Micro-frontends, đồng thời kiểm chứng tính hiệu quả thông qua việc xây dựng ứng dụng thử nghiệm CEMS.
- Ưu điểm của kiến trúc: Các phát hiện chứng minh rõ ràng khả năng giảm độ phức tạp của hệ thống lên đến khoảng 40%, tăng tính linh hoạt và khả năng mở rộng tới 30%, cùng với việc nâng cao đáng kể tính bảo trì cho các ứng dụng doanh nghiệp.
- Công nghệ nổi bật: Việc áp dụng một cách đồng bộ các công nghệ như Spring Boot, Spring Cloud, Single-SPA và Docker đã tạo ra một giải pháp toàn diện, từ phát triển đến triển khai, với quy trình tự động hóa cao.
- Hạn chế và Hướng phát triển: Mặc dù đạt được nhiều thành công, luận văn cũng nhận diện một số tồn tại như độ phức tạp trong quản lý giao dịch phân tán. Hướng phát triển tiếp theo nên tập trung vào các kỹ thuật tối ưu hóa hiệu năng, tăng cường bảo mật và phát triển hệ thống giám sát, cảnh báo tự động cho các kiến trúc phân tán.
- Lời kêu gọi hành động: Khuyến khích các nhà phát triển và doanh nghiệp tiếp tục khám phá và mạnh dạn áp dụng các kiến trúc Microservices và Micro-frontends. Việc này không chỉ giải quyết các thách thức hiện tại mà còn mở ra cơ hội đổi mới, nâng cao năng lực cạnh tranh trong kỷ nguyên số, chuẩn bị cho sự phát triển của các hệ thống thông minh hơn trong tương lai gần.
Trích đoạn nội dung luận án
Tải xuống để đọc toàn bộĐ¾I HàC QUàC GIA HÀ NàI TR¯âNG Đ¾I HàC CÔNG NGHÞ BÙI THANH HOA PHÁT TRIÂN PHÀN MÀM THEO H¯àNG CHIA NHâ PHÀN DÞCH VĀ (MICROSERVICES) VÀ PHÀN GIAO DIÞN (MICRO-FRONTENDS) HÀ NÞI - 2021 Đ¾I HàC QUàC GIA HÀ NàI TR¯âNG Đ¾I HàC CÔNG NGHÞ BÙI THANH HOA PHÁT TRIÂN PHÀN MÀM THEO H¯àNG CHIA NHâ PHÀN DÞCH VĀ (MICROSERVICES) VÀ PHÀN GIAO DIÞN (MICRO-FRONTENDS) NGÀNH: KỸ THUÂT PHÀN MÀM CHUYÊN NGÀNH: KỸ THUÂT PHÀN MÀM Mà SÞ: 8480103.01 LUÂN VN TH¾C S) CÔNG NGHÞ THÔNG TIN NG¯âI H¯àNG DÀN KHOA HàC: PGS. TR¯¡NG ANH HOÀNG HÀ NÞI - 2021 LâI CAM ĐOAN Tôi xin cam đoan bản luận văn th¿c sĩ công nghệ thông tin <Phát triển phần mềm theo hướng chia nhỏ phần dịch vụ (microservices) và phần giao diện (micro-frontends)= là sản phẩm nghiên cāu cÿa cá nhân tôi, được thực hiện dưới sự hướng dẫn cÿa PGS. Trương Anh Hoàng. Các nái dung được trình bày trong luận văn là công trình nghiên cāu cÿa bản thân tôi, hoàn toàn không sao chép từ sản phẩm cÿa ngưßi khác.
Các nái dung kiến thāc được tổng hợp từ nhiều nguồn tài liệu tham khảo và được trích dẫn rõ ràng. Tôi cam kết chßu trách nhiệm cho lßi cam đoan cÿa mình. Hà Nội, tháng 10 năm 2021 Tác giÁ Bùi Thanh Hoa i LâI CÀM ¡N Trước hết, tôi xin bày tß lòng biết ơn chân thành, sâu sắc cÿa mình đến PGS. Trương Anh Hoàng, ngưßi thầy đã hết sāc tận tâm hướng dẫn và giúp đỡ tôi rất nhiều trong suát quá trình hoàn thành luận văn.
Tôi xin gửi lßi cảm ơn tới các thầy cô giáo cÿa khoa công nghệ thông tin, trưßng Đ¿i Hác Công Nghệ, Đ¿i Hác Quác Gia Hà Nái, các thầy cô đã rất tận tình chỉ bảo, giúp đỡ và t¿o mái điều kiện để tôi có thể hoàn thành được quá trình hác tập, nghiên cāu trong suát thßi gian qua t¿i trưßng. Cuái cùng, tôi xin được cảm ơn gia đình tôi và b¿n bè cùng khóa, những ngưßi đã luôn khích lệ, đáng viên và giúp đỡ tôi trong thßi gian qua. Hà Nội, tháng 10 năm 2021 Tác giÁ Bùi Thanh Hoa ii MĀC LĀC LâI CAM ĐOAN. ii BÀNG CÁC THUÂT NGĂ VÀ CHĂ VI¾T TÄT.
vi DANH MĀC HÌNH VẼ, Đà THÞ. vii DANH MĀC BÀNG BIÂU. 1 Lý do chán đÁ tài. 1 Đßi t°ÿng và ph¿m vi nghiên cāu.
2 Ph°¢ng pháp nghiên cāu. PHÁT TRIÂN PHÀN MÀM THEO H¯àNG MICROSERVICES 4 1. Mßt sß h°áng ki¿n trúc phÁn mÁm truyÁn thßng. Kiến trúc nguyên khối.
Kiến trúc hướng dịch vụ. ESB và việc tích hợp ứng dụng SOA. S¢ l°ÿc vÁ ki¿n trúc microservices. Kiến trúc microservices là gì?.
Các mẫu thiết kế microservices. Nguyên tÅc thi¿t k¿ microservices. Đảm bảo tính đơn nhiệm. Áp dụng phương pháp thiết kế hướng miền.
Sử dụng các chuẩn về API. 22 Tóm l°ÿc ch°¢ng 1. PHÁT TRIÂN ĀNG DĀNG WEB THEO H¯àNG MICRO- FRONTENDS. S¢ l°ÿc vÁ mßt sß mô hình phát triÃn āng dāng web phổ bi¿n.
Mô hình web tĩnh. Mô hình web động. Mô hình SPA. Ki¿n trúc micro-frontends.
Tổng quan về micro-frontends. Lợi ích của micro-frontends. C¢ ch¿ tích hÿp trong micro-frontends. Tích hợp tại thời điểm xây dựng.
Tích hợp tại thời điểm thực thi. Điều hướng giữa các micro-frontends. Giao ti¿p giăa các micro-frontends. 38 Tóm l°ÿc ch°¢ng 2.
XÂY DĄNG ĀNG DĀNG THĀ NGHIÞM THEO H¯àNG MICROSERVICES VÀ MICRO-FRONTENDS. Giái thißu hß thßng CEMS. Các chāc nng chính cÿa CEMS. Sơ đồ phân cấp chức năng.
Sơ đồ use case tổng quát. GiÁi pháp xây dąng hß thßng. Giải pháp triển khai. Lựa chọn công nghệ, công cụ.
Giái thißu tổng quan các công nghß trong dą án. Tổng quan về Spring Boot. Tổng quan về Single-SPA. Ki¿n trúc tổng quan hß thßng.
Mô hình hóa các microservices. Kiến trúc tổng thể của CEMS. Xây dựng mô hình dữ liệu. Thi¿t k¿ và cài đặt tÁng dßch vā.
Kiến trúc cụ thể của một microservice. Xây dựng cổng API. Xây dựng mô hình đăng ký và khám phá dịch vụ. Quản lý cấu hình tập trung.
Xây dựng chuẩn giao tiếp API. Thi¿t k¿ và cài đặt tÁng giao dißn. Mô hình tổng quát tầng giao diện. Kiến trúc của một micro-frontend.
Quản lý vòng đời các đối tượng trong một micro-frontend. Một số màn hình giao diện mẫu. KiÃm thā āng dāng. Thực hiện kiểm thử đơn vị.
Thực hiện kiểm thử tích hợp. Thực hiện kiểm thử giao diện. TriÃn khai āng dāng. 73 Tóm l°ÿc ch°¢ng 3.
Đánh giá °u nh°ÿc điÃm và bài hác kinh nghißm. Các tán t¿i và h°áng phát triÃn. 77 TÀI LIÞU THAM KHÀO. 78 v BÀNG CÁC THUÂT NGĂ VÀ CHĂ VI¾T TÄT STT Tÿ vi¿t tÅt Tÿ vi¿t đÁy đÿ Mô tÁ 1 API Application Programming Interface Giao diện lập trình āng dụng 2 CI/CD Continuous Integration (CI) and Quá trình tích hợp và chuyển Continuous Delivery (CD) giao liên tục 3 CSS Cascading Style Sheet Mát kiểu ngôn ngữ đßnh d¿ng, trang trí cho tài liệu HTML 4 Client Client Phía máy khách 5 DDD Domain Driven Design Kỹ thuật thiết kế theo hướng miền 6 DI Dependency Injection Cơ chế tiêm sự phụ thuác giữa các đái tượng 7 DOM Document Object Model Mát chuẩn được đßnh nghĩa bái tổ chāc W3C dùng để quản lý các đái tượng trong tài liệu HTML 8 ELK Elasticsearch, Logstash and Kibana Bá ba công cụ phục vụ cơ chế ghi log 9 ESB Enterprise Service Bus Mát thành phần trung gian để tích hợp các chương trình, dßch vụ khác nhau 10 ERP Enterprise Resource Planning Hệ tháng ho¿ch đßnh tài nguyên cho doanh nghiệp 11 Framework Framework Bá khung phát triển āng dụng 12 HTML Hypertext Markup Language Ngôn ngữ đánh dấu siêu văn bản 13 HTTP Hypertext Transfer Protocol Giao thāc truyền tải siêu văn bản 14 JSON JavaScript Object Notation Mát kiểu dữ liệu má ráng cÿa JavaScript 15 MVC Model View Controller Mát mẫu thiết kế āng dụng 16 ORM Object Relational Mapping Mát kỹ thuật ánh x¿ các đái tượng lập trình với từng bảng trong cơ sá dữ liệu quan hệ 17 SOA Service Oriented Architecture Kiến trúc hướng dßch vụ 18 SOAP Simple Object Access Protocol Mát giao thāc để truy cập dßch vụ web 19 Server Server Phía máy chÿ 20 SPA Single Page Application Kiểu āng dụng mát trang 21 REST Representational State Transfer Mát tiêu chuẩn thiết kế các API sử dụng cho các dßch vụ web 22 URL Uniform Resource Locator Đßa chỉ đßnh vß tài nguyên trên Internet 23 XML Extensible Markup Language Ngôn ngữ đánh dấu má ráng vi DANH MĀC HÌNH VẼ, Đà THÞ Hình 1.
Kiến trúc nguyên khái cho āng dụng web. Mô hình ho¿t đáng cÿa mát hệ tháng SOA. Mô hình trục tích hợp ESB. Hệ tháng web bán hàng theo mô hình microservices.
Mô hình cổng API trong hệ tháng microservices. Mô hình client-side discovery. Mô hình server-side discovery. Mô hình dùng riêng cơ sá dữ liệu.
Mô hình dùng chung cơ sá dữ liệu. Miền nghiệp vụ hệ tháng quản lý bán hàng. Tổ chāc cÿa mát microservice. Mô hình web tĩnh [15].
Mô hình web đáng. Cơ chế ho¿t đáng cÿa mô hình CSR. Ba mô hình triển khai web truyền tháng. Trang thông tin sản phẩm cÿa mát web bán hàng.
Ba module riêng biệt cÿa trang danh sách sản phẩm. Cấu trúc mát trang web checkout-order. Tệp tin cấu hình quản lý gói thư viện trong āng dụng. Sử dụng iframe để tích hợp micro-frontends.
Tích hợp micro-frontends bằng JavaScript. Tệp tin index. Quản lý cấu hình trong tệp server. Điều hướng các micro-frontends sử dụng frontend proxy.
Điều hướng micro-frontends sử dụng app shell. Ví dụ mát RouterModule cÿa Angular. Giao tiếp giữa các micro-frontends sử dụng EventEmitter. T¿o mát custom event trong Angular.
Chāc năng tổng quát cÿa hệ tháng CEMS. Sơ đồ use case tổng quát cÿa hệ tháng CEMS. Kiến trúc tổng thể cÿa mát āng dụng single-spa. Phân vùng các hành vi trong hệ tháng CEMS.
Kiến trúc tổng thể hệ tháng CEMS. Mô hình cơ sá dữ liệu cÿa CEMS. Mái quan hệ giữa các lớp thực thể trong module user-service. Kiến trúc tổng thể cÿa mát microservice.
Vai trò cÿa cổng API trong CEMS. Cấu hình Zuul API Gateway. Cơ chế ho¿t đáng cÿa Eureka Service Registry. Quy trình đăng ký và khám phá dßch vụ.
Cấu hình đăng ký dßch vụ sử dụng Eureka Server. Các dßch vụ được đăng ký trong Eureka Server. Quản lý cấu hình tập trung với Spring Cloud Config. Lấy thông tin khách hàng theo mã khách hàng.
Lấy thông tin khách hàng dùng Http Get. Ví dụ đặc tả chi tiết cho API: GET /customers/{customerCode}. Cấu hình ghi log trong tệp application. Cấu hình minh háa cho logstash và elasticsearch.
Mô hình ho¿t đáng cÿa ELK. Ví dụ thông tin log cÿa module customer-service. Các micro-frontends trong hệ tháng. Kiến trúc tổng thể cÿa mát micro-frontend.
Ví dụ t¿o mát thành phần web trong Angular. Vòng đßi ho¿t đáng cÿa āng dụng single-spa. Trang chÿ cÿa hệ tháng CEMS. Trang danh mục ngưßi dùng.
Trang danh mục khách hàng. Trang danh mục tr¿m quan trắc. Trang thông tin chi tiết tr¿m quan trắc. Trang danh mục thiết bß.
Các māc kiểm thử được áp dụng trong hệ tháng CEMS. Các thành phần cơ bản cÿa mát microservice. Minh háa mát sơ đồ lớp thuác module customer-service. Ví dụ thực hiện kiểm thử đơn vß với Mockito.
Minh háa kiểm thử tích hợp việc t¿o mới mát user. Ví dụ kiểm thử tích hợp trong lớp UserControllerIntegrationTest. Đóng gói các microservices và t¿o container. Mô tả cÿa mát Dockerfile và docker-compose.
74 viii DANH MĀC BÀNG BIÂU Bảng 1. So sánh kiến trúc nguyên khái, SOA và microservices. So sánh Spring Boot, Micronaut và Play framework. Mát sá mã HTTP thông dụng.
58 ix Mä ĐÀU Lý do chán đÁ tài Trong những năm gần đây, việc áp dụng kiến trúc microservices để xây dựng các āng dụng doanh nghiệp ngày càng phổ biến. Sự ra đßi cÿa microservices đem l¿i nhiều lợi ích như làm giảm đá phāc t¿p trong việc xây dựng các āng dụng lớn cho doanh nghiệp, tăng tính má ráng cũng như nâng cao khả năng bảo trì hệ tháng. T¿i Việt Nam, nhiều công ty như Tiki, Viettel đều đã áp dụng mô hình microservices để xây dựng các giải pháp phần mềm phục vụ bài toán doanh nghiệp. Bên c¿nh thuật ngữ microservices đã khá quen thuác, hướng kiến trúc <micro- frontends= xuất hiện từ khoảng năm 2016.
Micro-frontends ra đßi mang l¿i mát cách tiếp cận mới trong việc xây dựng tầng āng dụng web theo hướng tách nhß phần giao diện thành nhiều module con, đác lập và tích hợp chúng l¿i với nhau. Tư tưáng cÿa micro-frontends không hoàn toàn mới, mà nó được kế thừa từ hướng tiếp cận cÿa microservices.
Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ
Trích dẫn luận án này
Bùi Thanh Hoa (2021). Phát triển phần mềm Microservices và Micro-frontends [Luận án tiến sĩ, trường đại học công nghệ, đại học quốc gia hà nội]. LuanAn.net. https://luanan.net/cong-nghe-thong-tin/khoa-hoc-may-tinh/phat-trien-phan-mem-microservices-micro-frontends
Câu hỏi thường gặp
Luận án "Phát triển phần mềm Microservices và Micro-frontends" nghiên cứu về vấn đề gì?
Luận án tiến sĩ Kỹ thuật Phần mềm: Phát triển phần mềm hiệu quả với kiến trúc microservices và micro frontends, tối ưu chia nhỏ dịch vụ và giao diện.
Luận án "Phát triển phần mềm Microservices và Micro-frontends" được bảo vệ tại trường nào?
Luận án này được bảo vệ tại trường đại học công nghệ, đại học quốc gia hà nội. Năm bảo vệ: 2021.
Luận án "Phát triển phần mềm Microservices và Micro-frontends" thuộc chuyên ngành gì?
Luận án "Phát triển phần mềm Microservices và Micro-frontends" thuộc chuyên ngành Kỹ thuật phần mềm. Danh mục: Khoa Học Máy Tính.
Luận án "Phát triển phần mềm Microservices và Micro-frontends" có bao nhiêu trang?
Luận án "Phát triển phần mềm Microservices và Micro-frontends" có 91 trang. Bạn có thể xem trước một phần tài liệu ngay trên trang web trước khi tải về.
Cách tải luận án "Phát triển phần mềm Microservices và Micro-frontends" về máy như thế nào?
Để tải luận án về máy, bạn nhấn nút "Tải xuống ngay" trên trang này, sau đó hoàn tất thanh toán phí lưu trữ. File sẽ được tải xuống ngay sau khi thanh toán thành công. Hỗ trợ qua Zalo: 0559 297 239.