Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 91 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
91
Dung lượng
2,97 MB
Nội dung
ĐẠ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 VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS.TS TRƯƠNG ANH HOÀNG HÀ NỘI - 2021 LỜI CAM ĐOAN Tôi xin cam đoan 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) phần giao diện (micro-frontends)” sản phẩm nghiên cứu cá nhân tôi, thực hướng dẫn PGS.TS Trương Anh Hồng Các nội dung trình bày luận văn cơng trình nghiên cứu thân tơi, hồn tồn khơng chép từ sản phẩm người khác Các nội dung kiến thức tổng hợp từ nhiều nguồn tài liệu tham khảo trích dẫn rõ ràng Tơi cam kết chịu trách nhiệm cho lời cam đoan 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 đến PGS.TS Trương Anh Hoàng, người thầy tận tâm hướng dẫn giúp đỡ nhiều suốt trình hồn thành luận văn Tơi xin gửi lời cảm ơn tới thầy cô giáo khoa công nghệ thông tin, trường Đại Học Công Nghệ, Đại Học Quốc Gia Hà Nội, thầy tận tình bảo, giúp đỡ tạo điều kiện để tơi hồn thành q trình học tập, nghiên cứu suốt thời gian qua trường Cuối cùng, tơi xin cảm ơn gia đình tơi bạn bè khóa, người ln khích lệ, động viên giúp đỡ 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 i LỜI CẢM ƠN 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 ix MỞ ĐẦU Lý chọn đề tài Mục tiêu nghiên cứu Đối tượng phạm vi nghiên cứu Phương pháp nghiên cứu Kết cấu luận văn CHƯƠNG PHÁT TRIỂN PHẦN MỀM THEO HƯỚNG MICROSERVICES 1.1 Một số hướng kiến trúc phần mềm truyền thống 1.1.1 Kiến trúc nguyên khối 1.1.2 Kiến trúc hướng dịch vụ 1.1.3 ESB việc tích hợp ứng dụng SOA 1.2 Sơ lược kiến trúc microservices 1.2.1 Kiến trúc microservices gì? 1.2.2 Các mẫu thiết kế microservices 12 1.3 Nguyên tắc thiết kế microservices 19 1.3.1 Đảm bảo tính đơn nhiệm 19 1.3.2 Áp dụng phương pháp thiết kế hướng miền 20 1.3.3 Sử dụng chuẩn API 22 Tóm lược chương 22 CHƯƠNG PHÁT TRIỂN ỨNG DỤNG WEB THEO HƯỚNG MICROFRONTENDS 24 2.1 Sơ lược số mơ hình phát triển ứng dụng web phổ biến 24 2.1.1 Mơ hình web tĩnh 24 iii 2.1.2 Mơ hình web động 24 2.1.3 Mơ hình SPA 25 2.2 Kiến trúc micro-frontends 27 2.2.1 Tổng quan micro-frontends 27 2.2.2 Lợi ích micro-frontends 30 2.3 Cơ chế tích hợp micro-frontends 30 2.3.1 Tích hợp thời điểm xây dựng 30 2.3.2 Tích hợp thời điểm thực thi 31 2.3.3 Điều hướng micro-frontends 36 2.4 Giao tiếp micro-frontends 38 Tóm lược chương 40 CHƯƠNG XÂY DỰNG ỨNG DỤNG THỬ NGHIỆM THEO HƯỚNG MICROSERVICES VÀ MICRO-FRONTENDS 41 3.1 Giới thiệu hệ thống CEMS 41 3.2 Các chức CEMS 41 3.2.1 Sơ đồ phân cấp chức 41 3.2.2 Sơ đồ use case tổng quát 42 3.3 Giải pháp xây dựng hệ thống 43 3.3.1 Giải pháp triển khai 43 3.3.2 Lựa chọn công nghệ, công cụ 43 3.4 Giới thiệu tổng quan công nghệ dự án 43 3.4.1 Tổng quan Spring Boot 44 3.4.2 Tổng quan Single-SPA 45 3.5 Kiến trúc tổng quan hệ thống 46 3.5.1 Mơ hình hóa microservices 46 3.5.2 Kiến trúc tổng thể CEMS 47 3.5.3 Xây dựng mơ hình liệu 48 3.6 Thiết kế cài đặt tầng dịch vụ 50 3.6.1 Kiến trúc cụ thể microservice 50 iv 3.6.2 Xây dựng cổng API 51 3.6.3 Xây dựng mơ hình đăng ký khám phá dịch vụ 53 3.6.4 Quản lý cấu hình tập trung 56 3.6.5 Xây dựng chuẩn giao tiếp API 57 3.6.6 Quản lý logging 59 3.7 Thiết kế cài đặt tầng giao diện 62 3.7.1 Mơ hình tổng qt tầng giao diện 62 3.7.2 Kiến trúc micro-frontend 63 3.7.3 Quản lý vòng đời đối tượng micro-frontend 64 3.7.4 Một số hình giao diện mẫu 66 3.8 Kiểm thử ứng dụng 68 3.8.1 Thực kiểm thử đơn vị 69 3.8.2 Thực kiểm thử tích hợp 71 3.8.3 Thực kiểm thử giao diện 72 3.9 Triển khai ứng dụng 73 Tóm lược chương 74 KẾT LUẬN 75 Kết đạt 75 Đánh giá ưu nhược điểm học kinh nghiệm 75 Các tồn 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 đủ API Application Programming Interface CI/CD Continuous Integration (CI) and Continuous Delivery (CD) CSS Cascading Style Sheet Client DDD Client Domain Driven Design DI Dependency Injection DOM Document Object Model ELK Elasticsearch, Logstash and Kibana ESB Enterprise Service Bus 10 ERP Enterprise Resource Planning 11 12 13 14 Framework HTML HTTP JSON Framework Hypertext Markup Language Hypertext Transfer Protocol JavaScript Object Notation 15 16 MVC ORM Model View Controller Object Relational Mapping 17 18 SOA SOAP Service Oriented Architecture Simple Object Access Protocol 19 20 21 Server SPA REST Server Single Page Application Representational State Transfer 22 URL Uniform Resource Locator 23 XML Extensible Markup Language vi Mô tả Giao diện lập trình ứng dụng Q trình tích hợp chuyển giao liên tục Một kiểu ngôn ngữ định dạng, trang trí cho tài liệu HTML Phía máy khách Kỹ thuật thiết kế theo hướng miền Cơ chế tiêm phụ thuộc đối tượng Một chuẩn định nghĩa tổ chức W3C dùng để quản lý đối tượng tài liệu HTML Bộ ba công cụ phục vụ chế ghi log Một thành phần trung gian để tích hợp chương trình, dịch vụ khác Hệ thống hoạch định tài nguyên cho doanh nghiệp Bộ khung phát triển ứng dụng Ngôn ngữ đánh dấu siêu văn Giao thức truyền tải siêu văn Một kiểu liệu mở rộng JavaScript Một mẫu thiết kế ứng dụng Một kỹ thuật ánh xạ đối tượng lập trình với bảng sở liệu quan hệ Kiến trúc hướng dịch vụ Một giao thức để truy cập dịch vụ web Phía máy chủ Kiểu ứng dụng trang Một tiêu chuẩn thiết kế API sử dụng cho dịch vụ web Địa định vị tài nguyên Internet Ngôn ngữ đánh dấu mở rộng DANH MỤC HÌNH VẼ, ĐỒ THỊ Hình 1.1 Kiến trúc nguyên khối cho ứng dụng web Hình 1.2 Mơ hình hoạt động hệ thống SOA Hình 1.3 Mơ hình trục tích hợp ESB Hình 1.4 Hệ thống web bán hàng theo mơ hình microservices 10 Hình 1.5 Mơ hình cổng API hệ thống microservices 13 Hình 1.6 Mơ hình client-side discovery 15 Hình 1.7 Mơ hình server-side discovery 16 Hình 1.8 Mơ hình dùng riêng sở liệu 17 Hình 1.9 Mơ hình dùng chung sở liệu 19 Hình 1.10 Miền nghiệp vụ hệ thống quản lý bán hàng 21 Hình 1.11 Tổ chức microservice 21 Hình 2.1 Mơ hình web tĩnh [15] 24 Hình 2.2 Mơ hình web động 25 Hình 2.3 Cơ chế hoạt động mơ hình CSR 26 Hình 2.4 Ba mơ hình triển khai web truyền thống 28 Hình 2.5 Trang thơng tin sản phẩm web bán hàng 29 Hình 2.6 Ba module riêng biệt trang danh sách sản phẩm 29 Hình 2.7 Cấu trúc trang web checkout-order 30 Hình 2.8 Tệp tin cấu hình quản lý gói thư viện ứng dụng 31 Hình 2.9 Sử dụng iframe để tích hợp micro-frontends 32 Hình 2.10 Tích hợp micro-frontends JavaScript 33 Hình 2.11 Tệp tin index.html 35 Hình 2.12 Quản lý cấu hình tệp server.config 35 Hình 2.13 Điều hướng micro-frontends sử dụng frontend proxy 36 Hình 2.14 Điều hướng micro-frontends sử dụng app shell 37 Hình 2.15 Ví dụ RouterModule Angular 38 Hình 2.16 Giao tiếp micro-frontends sử dụng EventEmitter 39 Hình 2.17 Tạo custom event Angular 40 Hình 3.1 Chức tổng quát hệ thống CEMS 42 Hình 3.2 Sơ đồ use case tổng quát hệ thống CEMS 42 Hình 3.3 Kiến trúc tổng thể ứng dụng single-spa 46 Hình 3.4 Phân vùng hành vi hệ thống CEMS 47 Hình 3.5 Kiến trúc tổng thể hệ thống CEMS 48 Hình 3.6 Mơ hình sở liệu CEMS 49 Hình 3.7 Mối quan hệ lớp thực thể module user-service 49 Hình 3.8 Kiến trúc tổng thể microservice 51 Hình 3.9 Vai trò cổng API CEMS 52 Hình 3.10 Cấu hình Zuul API Gateway 53 Hình 3.11 Cơ chế hoạt động Eureka Service Registry 54 vii Hình 3.12 Quy trình đăng ký khám phá dịch vụ 54 Hình 3.13 Cấu hình đăng ký dịch vụ sử dụng Eureka Server 55 Hình 3.14 Các dịch vụ đăng ký Eureka Server 55 Hình 3.15 Quản lý cấu hình tập trung với Spring Cloud Config 57 Hình 3.16 Lấy thông tin khách hàng theo mã khách hàng 58 Hình 3.17 Lấy thơng tin khách hàng dùng Http Get 58 Hình 3.18 Ví dụ đặc tả chi tiết cho API: GET /customers/{customerCode} 59 Hình 3.19 Cấu hình ghi log tệp application.properties 60 Hình 3.20 Cấu hình minh họa cho logstash elasticsearch 61 Hình 3.21 Mơ hình hoạt động ELK 61 Hình 3.22 Ví dụ thông tin log module customer-service 62 Hình 3.23 Các micro-frontends hệ thống 62 Hình 3.24 Kiến trúc tổng thể micro-frontend 63 Hình 3.25 Ví dụ tạo thành phần web Angular 64 Hình 3.26 Vịng đời hoạt động ứng dụng single-spa 65 Hình 3.27 Trang chủ hệ thống CEMS 66 Hình 3.28 Trang danh mục người dùng 66 Hình 3.29 Trang danh mục khách hàng 67 Hình 3.30 Trang danh mục trạm quan trắc 67 Hình 3.31 Trang thơng tin chi tiết trạm quan trắc 68 Hình 3.32 Trang danh mục thiết bị 68 Hình 3.33 Các mức kiểm thử áp dụng hệ thống CEMS 68 Hình 3.34 Các thành phần microservice 69 Hình 3.35 Minh họa sơ đồ lớp thuộc module customer-service 70 Hình 3.36 Ví dụ thực kiểm thử đơn vị với Mockito 70 Hình 3.37 Minh họa kiểm thử tích hợp việc tạo user 72 Hình 3.38 Ví dụ kiểm thử tích hợp lớp UserControllerIntegrationTest 72 Hình 3.39 Đóng gói microservices tạo container 73 Hình 3.40 Mơ tả Dockerfile docker-compose.yml 74 viii 3.7.4 Một số hình giao diện mẫu Mục trình bày số hình giao diện module web Màn hình trang chủ Hình 3.27 Trang chủ hệ thống CEMS Màn hình danh mục người dùng Hình 3.28 Trang danh mục người dùng 66 Màn hình danh sách khách hàng Hình 3.29 Trang danh mục khách hàng Màn hình danh mục trạm quan trắc Hình 3.30 Trang danh mục trạm quan trắc 67 Màn hình thơng tin chi tiết trạm quan trắc Hình 3.31 Trang thơng tin chi tiết trạm quan trắc Màn hình danh mục thiết bị Hình 3.32 Trang danh mục thiết bị 3.8 Kiểm thử ứng dụng Sau giai đoạn thiết kế cài đặt hồn thiện, q trình kiểm thử chương trình áp dụng theo ba mức bao gồm kiểm thử đơn vị (unit test), kiểm thử tích hợp (integration test) kiểm thử mức giao diện (ui test) Hình 3.33 Các mức kiểm thử áp dụng hệ thống CEMS 68 3.8.1 Thực kiểm thử đơn vị Mỗi microservice cấu thành nhiều thành phần nhỏ Các thành phần module thể hình 3.34 Hình 3.34 Các thành phần microservice Hoạt động kiểm thử đơn vị tiến hành để đảm bảo thành phần hoạt động chức nó, ví dụ: lớp repository cung cấp bốn chức để phục vụ cơng việc đọc, thêm, sửa xóa liệu (thuật ngữ gọi CRUD) Khi kiểm thử đơn vị, cần kiểm tra chức CRUD hoạt động hay chưa Để cài đặt phần kiểm thử đơn vị, số cơng cụ framework sau dùng: • Junit: cung cấp API để viết unit test cách thuận tiện • Mockito: cung cấp kỹ thuật để thực Mocking Test55 Sơ đồ hình 3.35 mơ tả mối quan hệ ba thành phần UserRepository, UserService UserServiceImpl Giả sử, ta cần thực unit test cho phương thức 55 https://devopedia.org/mock-testing 69 retrieveUser(Long id) thuộc thành phần UserService Việc kiểm thử thực lớp UserServiceTest sử dụng Mockito để giả lập đối tượng (mock object) cho UserRepository Mã nguồn minh họa thể hình 3.36 Hình 3.35 Minh họa sơ đồ lớp thuộc module customer-service Hình 3.36 Ví dụ thực kiểm thử đơn vị với Mockito 70 3.8.2 Thực kiểm thử tích hợp Sau thực kiểm thử mức đơn vị, module cần phải kiểm thử tích hợp Q trình kiểm tra giao tiếp tương tác thành phần nhằm phát lỗi có Bên cạnh việc kiểm tra tính đắn, logic hành vi bên hệ thống, công đoạn xem xét việc tương tác chương trình với dịch vụ bên ngồi Ví dụ bên minh họa kịch kiểm thử tích hợp hai thành phần microservice sử dụng SpringBootTest56 SpringRunner57 để kiểm tra trường hợp tạo người dùng (user) Kịch minh họa hình 3.37 với bước sau: • Bước 1: Thành phần SpringRunner chạy nạp môi trường test để gọi lớp UserControllerIntegrationTest (lớp định nghĩa test case) • Bước 2: Thực thi test Phương thức test định nghĩa bên lớp UserControllerIntegrationTest thực triệu gọi lớp UserController để chạy hai phương thức - Tạo user (có user_code = ‘1001’) - Tìm kiếm user với user_code = ‘1001’ (vừa tạo trên) • Bước 3: Sau bước 2, thực kiểm tra kết Giả sử user (1001) tìm thấy tồn sở liệu hành động tạo user thực thành công Trong trình kiểm thử trên, ba thành phần gồm UserController, UserService UserRepository tương tác với để thực chức thêm user Việc liên kết chúng thực thông qua chế DI 56 https://docs.spring.io/springboot/docs/current/api/org/springframework/boot/test/context/SpringBootTest.html 57 https://docs.spring.io/spring-framework/docs/current/javadocapi/org/springframework/test/context/junit4/SpringRunner.html 71 Hình 3.37 Minh họa kiểm thử tích hợp việc tạo user Để minh họa cách đơn giản, việc kiểm thử tích hợp thực có tương tác lớp controller, lớp service lớp repository Trên thực tế, microservices giao tiếp với thân microservice cịn tương tác với dịch vụ bên thứ ba (ví dụ Google API hay Facebook API), việc kiểm thử tích hợp phải đảm bảo hoạt động diễn yêu cầu toán Đoạn mã nguồn hình 3.38 minh họa cho trường hợp kiểm thử tích hợp vừa nêu Hình 3.38 Ví dụ kiểm thử tích hợp lớp UserControllerIntegrationTest 3.8.3 Thực kiểm thử giao diện Công đoạn kiểm thử giao diện thực cuối để đảm bảo chức ứng dụng hoạt động thông suốt từ phần giao diện đến việc kết nối, tích hợp với API 72 tầng dịch vụ Công đoạn kiểm thử kiểm tra logic xử lý tầng web lẫn tầng dịch vụ để đảm bảo hai thành phần hoạt động nhịp nhàng với Các công việc thực giai đoạn bao gồm: • Kiểm tra tính đắn, hợp lý giao diện, có phù hợp với đặc tả yêu cầu phía người dùng hay khơng • Kiểm tra q trình tương tác, gửi, nhận hiển thị liệu phía máy khách với máy chủ • Kiểm tra hành vi giao diện để đảm bảo chúng hoạt động theo yêu cầu chức 3.9 Triển khai ứng dụng Để đảm bảo tính triển khai độc lập thống mặt mơi trường, dự án sử dụng Docker để đóng gói microservices thành container Ở giai đoạn thử nghiệm, microservices đóng gói triển khai mơi trường AWS EC258 Q trình đóng gói microservices chạy container minh họa hình 3.39 Hình 3.39 Đóng gói microservices tạo container Mỗi microservice chứa Dockerfile59 nhằm định nghĩa đặc tả môi trường thực thi ứng dụng Docker tạo Docker Image60 cách đọc thị Dockerfile Để định nghĩa chạy container, công cụ Docker Compose61 dùng Các thông số để định nghĩa cho container mô tả tệp tin có tên “docker-compose.yml” Ví dụ cách tổ chức nội dung Dockerfile thơng số mơ tả cấu hình cho container thể hình 3.40 58 https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/concepts.html https://docs.docker.com/engine/reference/builder/ 60 https://docs.openshift.com/enterprise/3.0/architecture/core_concepts/containers_and_images.html 61 https://docs.docker.com/compose/ 59 73 Sau định nghĩa thơng số cấu hình, cách đơn giản để tạo chạy dịch vụ định nghĩa “docker-compose.yml” sử dụng câu lệnh “dockercompose-up” [33] Hình 3.40 Mơ tả Dockerfile docker-compose.yml Tóm lược chương Kết thúc chương 3, luận văn tập trung giải thích quy trình xây dựng ứng dụng CEMS theo hướng kiến trúc microservices micro-frontends Các nội dung q trình phát triển ứng dụng mơ tả bao gồm: • • • • • Phân tích tổng quan yêu cầu chức toán Thiết kế kiến trúc tổng thể cho tầng dịch vụ theo hướng microservices Xây dựng thành phần microservices Thiết kế kiến trúc tổng thể cài đặt micro-frontends Các loại hình kiểm thử áp dụng dự án bao gồm kiểm thử đơn vị, kiểm thử tích hợp kiểm thử giao diện • Tổng qt q trình đóng gói microservices sử dụng docker, docker compose 74 KẾT LUẬN Kết đạt Nội dung nghiên cứu luận văn trình bày dựa kiến thức kết làm việc thực tế tác giả dự án cơng ty phần mềm FPT Các đóng góp luận văn thu bao gồm: Về mặt phương pháp luận, lý thuyết Luận văn làm rõ phạm trù phương pháp phát triển phần mềm theo hướng microservices micro-frontends áp dụng nguyên tắc thiết kế, sử dụng mẫu thiết kế cốt lõi để xây dựng hệ thống vận dụng kỹ thuật thiết kế hướng miền để phân hoạch, thiết kế chương trình Micro-frontends hướng kiến trúc mới, việc sử dụng single-spa để tích hợp ứng dụng SPA theo hướng micro-frontends trình bày luận văn khía cạnh kiến trúc tổng thể single-spa, chế tích hợp, điều hướng giao tiếp micro-frontends Về mặt kỹ thuật, công nghệ Qua phần thực nghiệm, tác giả đưa số đánh giá kỹ thuật, công nghệ áp dụng: Trên tảng Java, Spring Boot Spring Cloud xem framework mã nguồn mở tốt tính đến thời điểm để xây dựng microservices Tác giả cài đặt thử nghiệm đưa đánh giá tổng quát Spring Boot với hai framework phổ biến khác Play Micronaut chương Khi sử dụng single-spa để tích hợp micro-frontends (viết Angular, ReactJS), cần cân nhắc việc sử dụng chế “build-time” “run-time” thống phiên thư viện module web Khả ứng dụng vào thực tiễn Các kết thu mặt lý thuyết thực hành (kỹ thuật, công nghệ) áp dụng vào dự án theo hướng “xây dựng chuyển đổi hệ thống monolithic sang microservices micro-frontends” mà tác giả tham gia công ty phần mềm FPT Đánh giá ưu nhược điểm học kinh nghiệm Dựa vào trình tìm hiểu, nghiên cứu kinh nghiệm làm việc, tác giả đưa số nhận định bên hướng kiến trúc microservices micro-frontends Như đề cập chương chương 2, nhờ đặc tính trội tính độc lập, khả chịu lỗi cao, khả mở rộng hệ thống tốt mà ứng dụng 75 theo hướng microservices xây dựng ngày nhiều Bên cạnh ưu điểm, microservices bộc lộ nhiều hạn chế mà hạn chế xuất phát từ đặc tính triển khai phân tán ứng dụng Một số nhược điểm thách thức xây dựng hệ thống kể đến như: Vấn đề thứ nhất: microservices giao tiếp cách gửi thông điệp cho nhau, số lượng microservices nhiều việc tương tác gặp cố, ví dụ việc gửi phản hồi thơng điệp bị trì hỗn, tốc độ truyền tải liệu bị ảnh hưởng Kết nối dịch vụ trở nên rối Vấn đề thứ hai: tính triển khai độc lập mặt sở liệu phân tán máy việc đảm bảo tính tồn vẹn cho giao dịch phân tán điều không dễ dàng Quản lý giao dịch phân tán yêu cầu áp dụng nhiều phương pháp kỹ thuật phức tạp Vấn đề thứ ba: việc thực kiểm thử tự động cho dịch vụ hệ thống microservices nhiều cần phải kết hợp với việc chạy dịch vụ mà phụ thuộc Nếu phụ thuộc thành phần với chặt hoạt động kiểm thử trở thành phức tạp Để giải khó khăn này, cần đến linh hoạt thiết kế nhằm hạn chế tối đa phụ thuộc chặt module Vấn đề thứ tư: hệ thống microservices lớn (gồm vài chục đến vài trăm dịch vụ) vấn đề quản lý trình phát triển triển khai cài đặt không đơn giản Để đảm bảo tính hiệu quả, suất cho việc triển khai vận hành hệ thống, đội phát triển cần phải áp dụng quy trình tích hợp chuyển giao liên tục (CI/CD62), điều đỏi hỏi đầu tư cho chi phí hạ tầng cơng nghệ Vấn đề thứ năm: việc chia nhỏ microservices tới mức vấn đề cần quan tâm Nếu quan niệm việc tách chương trình đến độ nhỏ mức từ vài chục đến vài trăm dịng lệnh, coi microservice điều thực khơng hiệu quả, mà ngược lại cịn làm tăng tính phức tạp cho hệ thống Một số khó khăn sử dụng micro-frontends kể đến như: Các framework để làm tầng giao diện nhiều chế quản lý gói thư viện chúng chưa thống ổn định công nghệ cho tầng dịch vụ Thêm vào đó, cập nhật nâng cấp phiên thư viện diễn thường xuyên, gây nhiều khơng tương thích việc tích hợp ứng dụng Trong phần thử nghiệm dự án trên, tác giả sử dụng “single-spa” để tích hợp micro-frontends Framework hoạt động tốt với Angular nhiều lại khó tương thích với ứng dụng viết ReactJS số thành phần “single-spa” chưa hỗ trợ 62 https://www.redhat.com/en/topics/devops/what-is-ci-cd 76 thành phần React Ngoài ra, việc điều hướng micro-frontends nhiều gây số vấn đề cho q trình kết xuất phía giao diện, ví dụ: thành phần CSS đơi hoạt động không mượt, việc tạo nạp nhiều module web với liệu phức tạp trang ảnh hưởng đến tính hiệu ứng dụng Từ ưu nhược điểm nêu trên, việc áp dụng microservices hay micro-frontends cần phải tính đến yêu cầu mặt nghiệp vụ, loại hình kinh doanh (bài tốn) yếu tố mặt người (chuyên mơn, kỹ năng) Giả sử tốn “vừa phải” cần phát triển nhanh cho dự án kiểu “start-up” việc áp dụng hướng kiến trúc nguyên khối hoàn toàn đáp ứng yêu cầu Các tồn hướng phát triển Một số tồn chưa nghiên cứu triển khai luận văn bao gồm: • Với tầng dịch vụ: chưa thử nghiệm cài đặt chế kỹ thuật để quản lý giao dịch phân tán giao tiếp bất đồng microservices • Với tầng giao diện: thử nghiệm việc tích hợp micro-frontends theo hướng “build time”, chưa áp dụng chế kiểm thử tự động cho phần giao diện Hướng phát triển Tác giả dự định nghiên cứu cài đặt số công nghệ, kỹ thuật nhằm giải tồn nêu sau: • Triển khai áp dụng mẫu thiết kế Saga63 để quản lý giao dịch phân tán • Triển khai áp dụng Apache Kafka64 để quản lý giao tiếp bất đồng microservices • Nghiên cứu tích hợp micro-frontends theo hướng “run-time” áp dụng kiểm thử tự động cho tầng giao diện • Nghiên cứu số framework Jasmine65 để viết unit test cho tầng giao diện 63 https://microservices.io/patterns/data/saga.html https://kafka.apache.org/ 65 https://jasmine.github.io/ 64 77 TÀI LIỆU THAM KHẢO [1] T O Group, “Service-Oriented Architecture – What Is SOA?,” [Online] Available: https://www.opengroup.org/soa/source-book/soa/p1.htm [2] T Erl, “Understanding Service-Orientation,” in Service-Oriented Architecture: Analysis and Design for Services and Microservices, 2nd ed., Arcitura Education Inc., 2017, pp 20-58 [3] MuleSoft, “What is an ESB?,” MuleSoft, [Online] Available: https://www.mulesoft.com/resources/esb/what-esb [4] J L a M Fowler, “Microservices Guide,” 2014 [Online] Available: https://martinfowler.com/microservices/ [5] S Newman, in Buiding Microservices Designing Fine-Grained Systems, O’Reilly Media, Inc, 2015, p 16 [6] C Richardson, in Microservices Patterns with examples in Java, Manning Publications Co., 2019, pp 259-263 [7] “Pattern: Service registry,” [Online] Available: https://microservices.io/patterns/service-registry.html [8] C Richardson, “Service Discovery in a Microservices Architecture,” 12 10 2015 [Online] Available: https://www.nginx.com/blog/service-discovery-in-amicroservices-architecture/ [9] “Pattern: Client-side service discovery,” [Online] Available: https://microservices.io/patterns/client-side-discovery.html [10] “Pattern: Server-side service discovery,” [Online] Available: https://microservices.io/patterns/server-side-discovery.html [11] “Pattern: Database per service,” [Online] Available: https://microservices.io/patterns/data/database-per-service.html [12] “Pattern: Shared database,” [Online] Available: https://microservices.io/patterns/data/shared-database.html [13] E Evans, in Domain-Driven Design - Tackling Complexity in the Heart of Software, Addison Wesley, 2003, p 25 78 [14] S Miteva, “The Concept of Domain-Driven Design Explained,” [Online] Available: https://dzone.com/articles/the-concept-of-domain-driven-designexplained [15] “Static Web Page – how it all began,” [Online] Available: https://webdiy.org/static-web-page/ [16] Z Bettenbuk, “Server-Side Rendering Explained,” [Online] Available: https://dzone.com/articles/what-is-server-side-rendering-and-why-do-you-need [17] “What Is Ajax Programming - Explained,” [Online] Available: https://www.keycdn.com/support/ajax-programming [18] J M a A Osmani, “Rendering on the Web,” 02 2019 [Online] Available: https://developers.google.com/web/updates/2019/02/rendering-on-the-web [19] A University, “Angular Single Page Applications (SPA): What are the Benefits?,” 17 12 2020 [Online] Available: https://blog.angularuniversity.io/why-a-single-page-application-what-are-the-benefits-what-is-aspa/ [20] ThoughtWorks, “Micro frontends,” 07 11 2016 [Online] Available: https://www.thoughtworks.com/radar/techniques/micro-frontends [21] C Jackson, “Micro Frontends Build-time Integration,” 19 06 2019 [Online] Available: https://martinfowler.com/articles/micro-frontends.html#BuildtimeIntegration [22] G Michael, in Micro Frontends in Action, Manning Publications Co., 2020, pp 85-98 [23] “Web Components,” [Online] Available: https://developer.mozilla.org/enUS/docs/Web/Web_Components [24] G Michael, “Server-side composition,” in Micro Frontends in Action, Manning Publications Co., 2020, pp 59-84 [25] B Myers, “The Strengths and Benefits of Micro Frontends,” [Online] Available: https://www.toptal.com/front-end/micro-frontends-strengths-benefits [26] M Geers, “Client-side routing and the application shell,” in Micro Frontends in Action, Manning Publications Co., 2020, pp 118-144 [27] M Geers, “Communication patterns,” in Micro Frontends in Action, Manning Publications Co., 2020, pp 99-117 79 [28] “Getting Started with single-spa,” [Online] Available: https://singlespa.js.org/docs/getting-started-overview/ [29] C Herath, “Building Micro Frontends Using Single-SPA Framework,” 07 04 2021 [Online] Available: https://blog.bitsrc.io/building-microfrontends-usingsingle-spa-framework-94019ca2fb4d [30] “HTTP response status codes,” [Online] Available: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status [31] “Configuring single-spa,” [Online] Available: https://singlespa.js.org/docs/configuration/ [32] J Denning, “A step-by-step guide to single-spa,” 16 12 2016 [Online] Available: https://single-spa.js.org/blog/2016/12/16/a-step-by-step-guide-tosingle-spa/ [33] “docker-compose up,” [Online] Available: https://docs.docker.com/compose/reference/up/ 80 ... 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... NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS.TS TRƯƠNG ANH HỒNG HÀ NỘI - 2021 LỜI CAM ĐOAN Tơi xin cam đoan 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). .. mềm theo hướng chia nhỏ phần dịch vụ (microservices) phần giao diện (micro- frontends)? ?? Mục tiêu nghiên cứu Luận văn nhắm tới mục đích nghiên cứu phương pháp xây dựng ứng dụng theo hướng kiến trúc