Thấy được những lợi ích mà kiến trúc Microservices mang lại, tôi quyết định thực hiện đề tài luận văn “Phát triển ứng dụng thi trắc nghiệm trực tuyến dùng kiến trúc Microservices” để ngh
Trang 2MSSV: B1805843 Ngành: Kỹ thuật phần mềm Khóa: 44
Trang 3GVHD: TS Nguyễn Công Danh i SVTH: Nguyễn Lâm Hoàng Anh
Đã báo cáo tại hội đồng ngành: Công nghệ phần mềm
Ngày báo cáo: 12/12/2022
Hội đồng báo cáo gồm:
Luận văn đã được chỉnh sửa theo góp ý của Hội đồng
Cần Thơ, ngày … tháng …… năm 20…
Giáo viên hướng dẫn
(Ký và ghi họ tên)
Trang 4GVHD: TS Nguyễn Công Danh ii SVTH: Nguyễn Lâm Hoàng Anh
Đầu tiên, em xin cảm ơn các Thầy Cô trường Công nghệ thông tin và truyền thông đã tạo điều kiện cho em học tập và truyền đạt những kiến thức chuyên môn cũng như các kinh nghiệm trong suốt quá trình học tập tại trường
để em có đủ khả năng để nghiên cứu và thực hiện đề tài
Em cũng xin cảm ơn trường Công nghệ thông tin và truyền thông đã tạo mọi điều kiện về tài liệu tham khảo, không gian học tập và làm việc góp phần
để em hoàn thành tốt luận văn Đồng thời, em cũng xin cảm ơn ban lãnh đạo trường đã tạo điều kiện cũng như cơ sở hạ tầng để hỗ trợ các sinh viên thực hiện tốt đề tài nghiên cứu
Đặc biệt, em xin chân thành cảm ơn thầy Nguyễn Công Danh đã giúp đỡ
em rất nhiều trong suốt quá trình thực hiện luận văn Nhờ sự giúp đỡ và hướng dẫn tận tình của thầy mà em có thể quản lý được tiến độ dự án và đảm bảo hoàn thành đúng thời gian quy định, giúp em tích lũy nhiều kiến thức chuyên môn cho sau này
Mặc dù đã có nhiều cố gắng thực hiện đề tài một cách hoàn chỉnh nhất, song do hạn chế về thời gian nghiên cứu cũng như kiến thức và kinh nghiệm không thể tránh khỏi những thiếu sót nhất định mà em chưa thấy được Em rất mong được sự góp ý của thầy để đề tài em hoàn chỉnh hơn
Cuối cùng em xin kính chúc quý thầy cô được dồi dào sức khỏe và luôn luôn thành công trong cuộc sống
Cần Thơ, ngày 27 tháng 08 năm 2022
Sinh viên thực hiện Nguyễn Lâm Hoàng Anh
Trang 5GVHD: TS Nguyễn Công Danh iii SVTH: Nguyễn Lâm Hoàng Anh
Em xin cam đoan luận văn “Phát triển ứng dụng thi trắc nghiệm trực tuyến dùng kiến trúc Microservices” được hoàn thành hoàn toàn dựa trên kết quả nghiên cứu của em dưới sự hướng dẫn của TS Nguyễn Công Danh, các nguồn tài liệu tham khảo đã được chỉ rõ trong danh mục tài liệu tham khảo
Cần Thơ, ngày 27 tháng 08 năm 2022
Sinh viên thực hiện
Trang 6GVHD: TS Nguyễn Công Danh iv SVTH: Nguyễn Lâm Hoàng Anh
Cần Thơ, ngày tháng năm 2022
Cán bộ hướng dẫn
Trang 7GVHD: TS Nguyễn Công Danh v SVTH: Nguyễn Lâm Hoàng Anh
Cần Thơ, ngày tháng năm 2022
Cán bộ phản biện
Trang 8GVHD: TS Nguyễn Công Danh vi SVTH: Nguyễn Lâm Hoàng Anh
LỜI CÁM ƠN I LỜI CAM ĐOAN III NHẬN XÉT CỦA CÁN BỘ PHẢN BIỆN V MỤC LỤC VI DANH MỤC BẢNG IX DANH MỤC HÌNH XI DANH MỤC KÝ HIỆU VÀ VIẾT TẮT XIII TÓM TẮT XIV ABSTRACT XV
PHẦN 1 PHẦN GIỚI THIỆU 1
1 Đặt vấn đề 1
2 Lịch sử giải quyết vấn đề 1
3 Mục tiêu đề tài 2
4 Đối tượng và phạm vi nghiên cứu 2
5 Nội dung nghiên cứu 2
6 Những đóng góp chính của đề tài 3
7 Bố cục của quyển luận văn 3
PHẦN 2 NỘI DUNG 4
CHƯƠNG 1: MÔ TẢ BÀI TOÁN 4
1.1 Yêu cầu cho ứng dụng 4
Mô tả chi tiết bài toán 4
Tiếp cận giải quyết vấn đề 5
1.2 Yêu cầu phát triển và nghiên cứu: 19
Yêu cầu phát triển 19
Yêu cầu nghiên cứu 19
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 20
2.1 Kiến trúc Microservices 20
Tổng quan về Microservices: 20
Đặc điểm chính của Microservices: 20
Một số mẫu thiết kế trong Microservices: 20
2.2 .Net Framework 21
2.3 NodeJS và ExpressJS 22
2.4 ReactJS 23
2.5 Socket.IO 23
2.6 MongoDB 23
2.7 PostgreSQL 24
PostgreSQL là gì? 24
Các tính năng của PostgreSQL: 24
Trang 9GVHD: TS Nguyễn Công Danh vii SVTH: Nguyễn Lâm Hoàng Anh
Docker là gì? 25
Cách thức hoạt động của Docker 25
Lợi ích của việc dùng Docker: 25
2.9 Kubernetes 26
Giới thiệu tổng quan: 26
Một số tính năng chính của Kubernetes: 26
2.10 RabbitMQ 27
Giới thiệu tổng quan: 27
Một số khái niệm trong RabbitMQ: 27
Vận chuyển thông tin trong Rabbitmq 27
2.11 gRPC 28
Giới thiệu tổng quan: 28
Tại sao cần gRPC: 28
CHƯƠNG 3: THIẾT KẾ VÀ CÀI ĐẶT GIẢI PHÁP 29
3.1 Tổng quan hệ thống 29
3.2 Kiến trúc hệ thống 30
3.3 Thiết kế dữ liệu 31
Cơ sở dữ liệu UserDB (PostgreSQL): 31
Cơ sở dữ liệu ExamDB (PostgreSQL): 33
Cơ sở dữ liệu AuthDB (MongoDB): 36
Cơ sở dữ liệu ExamChallengeDB (MongoDB): 37
Các kiểu dữ liệu liên lạc giữa các Service: 38
3.4 Thiết kế theo chức năng 41
Auth Service 43
User Service 49
Exam Service 53
Exam Challenge Service 69
CHƯƠNG 4: KIỂM THỬ VÀ ĐÁNH GIÁ KẾT QUẢ 77
4.1 Giới thiệu 77
Mục tiêu 77
Phạm vi kiểm thử 77
4.2 Kế hoạch kiểm thử 77
Các tính năng sẽ được kiểm thử 77
Các tính năng sẽ không được kiểm thử 77
Cách tiếp cận 77
Tiêu chí kiểm thử thành công / thất bại 78
Tiêu chí đình chỉ và yêu cầu bắt đầu lại 78
4.3 Quản lý kiểm thử 78
Trang 10GVHD: TS Nguyễn Công Danh viii SVTH: Nguyễn Lâm Hoàng Anh
78
Môi trường 78
Trách nhiệm quyền hạn 78
Giao tiếp giữa các nhóm liên quan 78
Tài nguyên và cấp phát 78
Huấn luyện 79
Kế hoạch dự đoán và chi phí 79
Các rủi ro 79
Kịch bản kiểm thử 79
4.4 Các trường hợp kiểm thử 80
Đăng ký 80
Đăng nhập 81
Tạo bài thi 82
Thêm câu hỏi 83
4.5 Đánh giá kết quả kiểm thử: 84
CHƯƠNG 5: ĐÁNH GIÁ HỆ THỐNG MICROSERVICES 85
5.1 Khi nào nên áp dụng kiến trúc Microservices? 85
5.2 Xác định phạm vi của mỗi Service như thế nào? 85
5.3 Thiết kế cơ sở dữ liệu cho từng Service như thế nào? 85
Phân tán cơ sở dữ liệu 85
Thiết kế cơ sở dữ liệu riêng cho từng Service 86
5.4 Làm thế nào để liên lạc giữa các Service một cách hiệu quả? 86
Giao tiếp đồng bộ 86
Giao tiếp bất đồng bộ 87
5.5 Đánh giá kết quả đạt được của hệ thống thi trực tuyến 87
PHẦN 3 KẾT LUẬN 88
1 KẾT QUẢ ĐẠT ĐƯỢC 88
1.1 Về lý thuyết và công nghệ 88
1.2 Về website 88
1.2 Hạn chế 88
2 HƯỚNG PHÁT TRIỂN 88
TÀI LIỆU THAM KHẢO 89
Trang 11GVHD: TS Nguyễn Công Danh ix SVTH: Nguyễn Lâm Hoàng Anh
Bảng 1.1 Đặc điểm người dùng 6
Bảng 1.2 Usecase đăng ký 9
Bảng 1.3 Usecase đăng nhập 9
Bảng 1.4 Usecase tạo bài thi 10
Bảng 1.5 Usecase sửa bài thi 10
Bảng 1.6 Usecase xóa bài thi 10
Bảng 1.7 Usecase tạo câu hỏi 11
Bảng 1.8 Usecase sửa câu hỏi 11
Bảng 1.9 Usecase xóa câu hỏi 12
Bảng 1.10 Usecase xem bài thi 12
Bảng 1.11 Usecase tạo phòng thi 13
Bảng 1.12 Usecase tham gia phòng thi 14
Bảng 1.13 Usecase thực hiện bài thi 14
Bảng 1.14 Usecase xem điểm bài thi 15
Bảng 1.15 Usecase xuất kết quả thi ra file excel 15
Bảng 1.16 Usecase thay đổi thông tin cá nhân 15
Bảng 1.17 Usecase đổi mật khẩu 16
Bảng 1.18 Usecase tạo chủ đề 16
Bảng 1.19 Usecase sửa chủ đề 17
Bảng 1.20 Usecase xóa chủ đề 17
Bảng 1.21 Usecase xem tất cả điểm trên bài thi 18
Bảng 1.22 Usecase xem thông tin người dùng 18
Bảng 3.1 Mô tả bảng User của UserDB 32
Bảng 3.2 Mô tả bảng Role của UserDB 33
Bảng 3.3 Mô tả bảng User của ExamDB 34
Bảng 3.4 Mô tả bảng Exam của ExamDB 34
Bảng 3.5 Mô tả bảng Topic của ExamDB 34
Bảng 3.6 Mô tả bảng Question của ExamDB 34
Bảng 3.7 Mô tả bảng QuestionType của ExamDB 35
Bảng 3.8 Mô tả bảng Attemp của ExamDB 35
Bảng 3.9 Mô tả bảng Answer của ExamDB 35
Bảng 3.10 Mô tả bảng Option của ExamDB 36
Bảng 3.11 Mô tả bảng ExamMode của ExamDB 36
Bảng 3.12 Mô tả bảng UserCredential của AuthDB 37
Bảng 3.13 Mô tảng bảng Exam của ExamChallengeDB 38
Bảng 3.14 Mô tả bảng Question của ExamChallengeDB 38
Bảng 3.15 Mô tả dữ liệu liên lạc usercredential 38
Bảng 3.16 Mô tả dữ liệu liên lạc exam 39
Trang 12GVHD: TS Nguyễn Công Danh x SVTH: Nguyễn Lâm Hoàng Anh
Bảng 3.18 Mô tả dữ liệu liên lạc attemp 40
Bảng 3.19 Định danh Queue cho mỗi Service 41
Bảng 3.20 Định danh Exchange cho mỗi Service 42
Bảng 3.21 Định danh các sự kiện trong Message Bus 42
Bảng 3.22 Mô tả thành phần giao diện đăng ký 45
Bảng 3.23 Mô tả dữ liệu sử dụng trong giao diện đăng ký 45
Bảng 3.24 Mô tả thành phần giao diện đăng nhập 47
Bảng 3.25 Mô tả dữ liệu sử dụng trong giao diện đăng nhập 47
Bảng 3.26 Thành phần giao diện sửa thông tin người dùng 51
Bảng 3.27 Mô tả dữ liệu sử dụng trong chức năng xem sửa thông tin người dùng 51
Bảng 3.28 Mô tả thành phần trong giao diện xem bài thi 59
Bảng 3.29 Mô tả dữ liệu sử dụng trong chức năng xem bài thi 60
Bảng 3.30 Mô tả thành phần giao diện chức năng tạo bài thi 61
Bảng 3.31 Mô tả dữ liệu sử dụng trong chức năng tạo bài thi 61
Bảng 3.32 Mô tả thành phần trong giao diện tạo câu hỏi 63
Bảng 3.33: Mô tả dữ liệu sử dụng trong chức năng tạo câu hỏi 63
Bảng 3.34 Mô tả thành phần trong giao diện chức năng sửa câu hỏi 65
Bảng 3.35 Mô tả dữ liệu sử dụng trong chức năng sửa câu hỏi 65
Bảng 3.36 Mô tả thành phần trong giao diện xoá câu hỏi 67
Bảng 3.37 Mô tả dữ liệu sử dụng trong chức năng xoá câu hỏi 67
Bảng 3.38 Bảng thành phần trong giao diện thống kê điểm thi 69
Bảng 3.39 Bảng thành phần giao diện tạo phòng thi 72
Bảng 3.40 Bảng thành phần giao diện tạo phòng thi 73
Bảng 3.41 Mô tả thành phần trong giao diện xoá câu hỏi 74
Bảng 4.1 Mô tả trách nhiệm, quyền hạn của thành viên 78
Bảng 4.2 Mô tả kế hoạch dự đoán và chi phí 79
Bảng 4.3 Mô tả rủi ro 79
Bảng 4.4 Mô tả kịch bản kiểm thử 79
Bảng 4.5 Kiểm thử chức năng đăng ký 80
Bảng 4.6 Kiểm thử chức năng đăng nhập 81
Bảng 4.7 Kiểm thử chức năng tạo bài thi 82
Bảng 4.8 Kịch bảng kiểm thử thêm câu hỏi 83
Trang 13GVHD: TS Nguyễn Công Danh xi SVTH: Nguyễn Lâm Hoàng Anh
Hình 1-1 Sơ đồ use case của hệ thống thi trắc nghiệm trực tuyến 8
Hình 2-1 Mô phỏng API Gateway 21
Hình 2-2 Mô phỏng mô hình NET 22
Hình 2-3 Mô hình kiến trúc của docker 25
Hình 2-4 Mô hình kiến trúc kubernetes 26
Hình 2-5 Sơ đồ vận chuyển message trong rabbitmq 28
Hình 3-1 Sơ đồ kiến trúc hệ thống thi trắc nghiệm trực tuyến 30
Hình 3-2 Mô hình dữ liệu logic của UserDB 32
Hình 3-3 Mô hình dữ liệu logic của ExamDB 33
Hình 3-4 Mô hình dữ liệu của AuthDB 37
Hình 3-5 Mô hình dữ liệu ExamChallengeDB 37
Hình 3-6 Mô tả cấu hình Message Bus Client cho Auth Service 43
Hình 3-7 Cấu hình message subscriber cho Auth Service 44
Hình 3-8 Giao diện mẫu chức năng đăng ký 45
Hình 3-9 Sơ đồ quy trình hoạt động chức năng đăng ký 46
Hình 3-10 Mô tả luồng chuyển gói tin trong Message Bus của chức năng đăng ký 46
Hình 3-11 Giao diện mẫu chức năng đăng nhập 47
Hình 3-12 Sơ đồ quy trình hoạt động chức năng đăng nhập 48
Hình 3-13 Mô tả cài đặt Message Bus Client cho User Service 49
Hình 3-14 Mô tả cài đặt MessageBusSubscriber cho User Service 50
Hình 3-15 Giao diện mẫu chức năng sửa thông tin người dùng 51
Hình 3-16 Sơ đồ quy trình sủa thông tin người dùng 52
Hình 3-17 Mô tả luồng chuyển gói tin cập nhật mật khẩu trong Message Bus 52
Hình 3-18 Giao diện mẫu chức năng xem thông tin tất cả người dùng 53
Hình 3-19 Sơ đồ quy trình xem thông tin tất cả người dùng 53
Hình 3-20 Mô tả cài đặt MessageBusClient cho Exam Service 54
Hình 3-21 Mô tả cài đặt MessageBusClient cho Exam Service 55
Hình 3-22 Giao diện mẫu chức năng xem thông tin tất cả bài thi 56
Hình 3-23 Sơ đồ quy trình chức năng xem thông tin của tất cả bài thi 56
Hình 3-24 Giao diện mẫu chức năng xem thông tin tất cả chủ đề 57
Hình 3-25 Sơ đồ quy trình xem thông tin tất cả chủ đề 57
Hình 3-26 Giao diện mẫu chức năng thêm chủ đề 58
Hình 3-27 Sơ đồ quy trình chức năng thêm chủ đề 58
Hình 3-28 Giao diện mẫu chức năng sửa chủ đề 58
Hình 3-29 Sơ đồ quy trình chức năng sửa thông tin chủ đề 59
Hình 3-30 Giao diện mẫu chức năng xem bài thi 59
Trang 14GVHD: TS Nguyễn Công Danh xii SVTH: Nguyễn Lâm Hoàng Anh
Hình 3-32 Giao diện mẫu chức năng tạo bài thi 61
Hình 3-33 Sơ đồ quy trình hoạt động của chức năng tạo bài thi 62
Hình 3-34 Mô tả luồng chuyển gói tin tạo bài thi mới trong Message Bus 62
Hình 3-35 Giao diện mẫu chức năng tạo câu hỏi 63
Hình 3-36 Sơ đồ hoạt động chức năng tạo câu hỏi 64
Hình 3-37 Mô tả luồng chuyển gói tin tạo câu hỏi mới trong Message Bus 64
Hình 3-38 Giao diện mẫu chức năng sửa câu hỏi 65
Hình 3-39 Sơ đồ quy trình hoạt động chức năng sửa câu hỏi 66
Hình 3-40 Mô tả luồng chuyển gói tin cập nhật đáp án trong Message Bus 66
Hình 3-41 Giao diện mẫu chức năng xoá câu hỏi 67
Hình 3-42 Sơ đồ quy trình chức năng xoá câu hỏi 68
Hình 3-43 Mô tả luồng chuyển gói tin xoá câu hỏi trong Message Bus 68
Hình 3-44 Giao diện mẫu chức năng xem thống kê điểm thi 69
Hình 3-45 Sơ đồ quy trình xem thống kê điểm thi 69
Hình 3-46 Mô tả cài đặt MessageBusClient cho Exam Challenge Service 70
Hình 3-47 Mô tả cài đặt MessageBusSubscriber cho Exam Challenge Service 71
Hình 3-48 Giao diện mẫu chức năng tạo phòng thi 72
Hình 3-49 Sơ đồ quy trình chức năng tạo phòng thi 72
Hình 3-50 Giao diện mẫu chức năng mời người khác vào phòng 73
Hình 3-51 Sơ đồ quy trình chức năng mời người khác vào phòng 73
Hình 3-52 Sơ đồ quy trình chức năng tham gia phòng 74
Hình 3-53 Giao diện mẫu chức năng thực hiện bài thi 75
Hình 3-54 Sơ đồ quy trình chức năng thực hiện bài thi 75
Hình 3-55 Giao diện mẫu chức năng thống kê kết quả thi 76
Hình 3-56 Thành phần giao diện chức năng thống kê kết quả thi 76
Hình 3-57 Sơ đồ quy trình thống kê kết quả thi 76
Hình 3-58 Mô tả luồng chuyển gói tin kết quả thi trong Message Bus 76
Hình 5-1 Giao tiếp đồng bộ thông qua HTTP/1.1 86
Hình 5-2 Giao tiếp bất đồng bộ thông qua Message Broker 87
Hình 5-3 Đánh giá những tiêu chí về Microservices mà hệ thống đã đạt được 87
Trang 15GVHD: TS Nguyễn Công Danh xiii SVTH: Nguyễn Lâm Hoàng Anh
DANH MỤC KÝ HIỆU VÀ VIẾT TẮT
Trang 16GVHD: TS Nguyễn Công Danh xiv SVTH: Nguyễn Lâm Hoàng Anh
Để giải quyết việc phát triển không ngừng của các hệ thống phần mềm, kiến trúc Microservices được sinh ra Ý tưởng của kiến trúc này là chia nhỏ hệ thống ra thành những Serivce nhỏ hơn, hoạt động độc lập phục vụ mục đích chung của hệ thống Nhờ đó mà kiểu kiến trúc này giúp cho hệ thống được phân chia ra thành những thành phần đơn giản, dễ bảo trì, dễ mở rộng hơn, tăng khả năng tích hợp điểm mạnh của nhiều công nghệ Chính vì vậy mà rất nhiều hệ thống lớn đã và đang chuyển sang sử dụng kiến trúc Microservices
Thấy được những lợi ích mà kiến trúc Microservices mang lại, tôi quyết định thực hiện đề tài luận văn “Phát triển ứng dụng thi trắc nghiệm trực tuyến dùng kiến trúc Microservices” để nghiên cứu, tìm hiểu đặc điểm, những ưu điểm, nhược điểm cũng như cách để thiết kế và xây dựng một hệ thống Microservices hiệu quả Vận dụng những kiến thức tìm hiểu, học hỏi được, tôi
sẽ xây dựng một hệ thống đáp ứng nhu cầu thi trực tuyến một cách thú vị cho cộng đồng học sinh, sinh viên, giúp họ có một nền tảng giáo dục, giải trí lành mạnh
Trang 17GVHD: TS Nguyễn Công Danh xv SVTH: Nguyễn Lâm Hoàng Anh
In order to handle the continuous growing of software systems, a type of software architecture has been born, it is call Microservices The main idea of this architecture is to devide the whole system into many small components called Service so that each Service will be simpler, independent, easier to maintain, develop new features and integrate advantages of many technologies Because of that, many large system has been using and migrating their system into Microservices
Aware of the benefits come with Microservice architecture, I decided to make the thesis topic “Developing an Online Exam System using Microservices Architecture” to study the characteristics, advantages, disadvantages of Microservice as well as how to design and build a Microservices system effectively Using that knowledge, I will build an system to provide the need of students to do exam online, provide them an interesting way of education
Trang 18GVHD: TS Nguyễn Công Danh 1 SV thực hiện: Nguyễn Lâm Hoàng Anh
PHẦN 1 PHẦN GIỚI THIỆU
1 Đặt vấn đề
Ngày nay, công nghệ ngày càng phát triển kéo theo nhu cầu của người dùng về các ứng dụng phần mềm ngày càng phức tạp Cho nên, ứng dụng sẽ phải không ngừng phát triển, dẫn đến việc những nhà phát triển phải xây dựng những ứng dụng có tính thích nghi, tái sử dụng cao và hơn hết là khả năng mở rộng
Tuy nhiên, việc mở rộng một hệ thống không hề đơn giản, chúng ta phải đảm bảo việc thêm tính năng mới nhưng không làm ảnh hưởng đến các tính năng đã có của hệ thống Không chỉ thế, một khi phạm vi của hệ thống càng lớn thì việc kiểm thử, bảo trì sẽ càng phức tạp dẫn đến chí phí phát triển hệ thống sẽ rất cao Chính những điều này làm cho việc xây dựng và phát triển một hệ thống theo kiến trúc nguyên khối - Monolithic truyền thống sẽ không còn thích hợp với những hệ thống lớn, mà chúng ta cần một kiểu kiến trúc phần mềm mới để giải quyết được bài toán này
Hơn nữa việc sử dụng duy nhất một công nghệ cho hệ thống có thể khiến quá trình phát triển phần mềm gặp nhiều khó khăn do hạn chế của công nghệ
đó Vì vậy việc tích hợp điểm mạnh của nhiều công nghệ sẽ giúp hệ thống phát triển, vận hành dễ dàng hơn Điển hình như để cài đặt các tính năng thời gian thực một cách dễ dàng và nhanh chóng, nhiều hệ thống sẽ cần đến thư viện như Socket.IO Thế nhưng điểm yếu của công nghệ này là chỉ hỗ trợ server trên nền tảng Node.js Nhưng Node.js lại tương tác không được mạnh
mẽ với cơ sở dữ liệu quan hệ so với Net hay SpringBoot
Kiến trúc Microservices chính là đáp án cho bài toán của chúng ta Một
số công ty thậm chí còn tái cấu trúc phần mềm của họ từ kiến trúc đơn khối
- Monolithic sang Microservices
2 Lịch sử giải quyết vấn đề
Kiến trúc Microservices được giới thiệu lần đầu tiên bởi giáo sư Peter Rodgers vào năm 2005 trong một bài diễn thuyết về điện toán đám mây Kiến trúc này đang ngày một phổ biến vì nó có thể giải quyết rất nhiều vấn đề như gia tăng tốc độ xử lý, tăng tính mở rộng và đẩy nhanh quá trình kiểm thử Hiện nay trên thế giới có rất nhiều công ty phần mềm lớn đang áp dụng kiến trúc Microservices vào hệ thống của họ Chúng ta có thể dễ dàng nhận
ra các cái tên như Facebook, Amazon, SoundCloud, Đặc điểm chung của hầu hết các công ty lớn như vậy là đều phải đáp ứng yêu cầu từ một số lượng người dùng rất lớn, phải liên tục đổi mới và phát triển để cạnh tranh với các đối thủ khác Cho nên, Microservices là đáp án hoàn hảo dành cho họ
Trang 19GVHD: TS Nguyễn Công Danh 2 SV thực hiện: Nguyễn Lâm Hoàng Anh
Tuy nhiên ở mảng giáo dục, chưa nhiều hệ thống thực tế áp dụng kiến trúc này Cái tên rất nổi tiếng đang áp dụng kiến trúc này là Kahoot Thế nhưng đây lại là một mảng đang và ngày càng quan trọng, chính vì vậy nhu cầu về một hệ thống giáo dục dùng kiến trúc Microservices là rất cần thiết
3 Mục tiêu đề tài
Từ những ý nghĩa thực tiễn trên, tôi đã thực hiện đề tài luận văn “Phát triển ứng dụng thi trắc nghiệm trực tuyến dùng kiến trúc Microservices” để nghiên cứu và áp dụng kiến trúc Microservices vào xây dựng ứng dụng để có tích hợp điểm mạnh của nhiều công nghệ và dễ dàng tiếp tục phát triển trong tương lai Bên cạnh đó, tôi cũng tìm hiểu được thêm một số framework và kĩ thuật để áp dụng xây dựng hệ thống tích hợp Microservices như Net, Docker, Kubernetes, API Gateway, Message Broker, Đặc biệt là thư viện SocketIO
để cài đặt các chức năng thời gian thực cho hệ thống Từ đó đưa ra các phân tích, đánh giá về kiến trúc Microservices cũng như cách vận hành một hệ thống theo kiến trúc Microservices một cách hiệu quả
Trang web của tôi có những chức năng chính như sau:
- Tạo bộ đề thi trắc nghiệm
- Cho phép người dùng có thể tạo phòng, mời và tham gia thi trắc nghiệm theo 2 chế độ khác nhau: thi bình thường và thi cạnh tranh
- Thống kê kết quả thi và xuất kết quả thi ra file excel
4 Đối tượng và phạm vi nghiên cứu
- Đối tượng nghiên cứu chính là kiến trúc Microservices và các công nghệ cần để xây dựng hệ thống như: Net framework, Docker, Kubernetes, RabbitMQ, SocketIO, …
- Tham khảo các hệ thống kiểm tra trắc nghiệm trực tuyến đã có như ioe.vn, elcit.ctu.edu.vn, Kahoot, …
5 Nội dung nghiên cứu
- Tìm hiểu và nghiên cứu tài liệu về kiến trúc Microservices và các công nghệ kỹ thuật cần thiết ở nhiều nguồn tài liệu
- Xác định ưu, nhược điểm cũng như vai trò của từng công nghệ, kĩ thuật trong hệ thống
- Áp dụng kiến trúc Microservices và những công nghệ, kỹ thuật liên quan
để xây dựng ứng dụng
- Rút ra cách thiết kế, xây dựng và vận hành hiệu quả hệ thống Microservices
Trang 20GVHD: TS Nguyễn Công Danh 3 SV thực hiện: Nguyễn Lâm Hoàng Anh
6 Những đóng góp chính của đề tài
- Kết quả nghiên cứu có thể làm tài liệu tham khảo
- Phần nghiên cứu lý thuyết sẽ cung cấp một cách nhìn tổng quát về quá trình phát triển phần mềm theo kiến trúc Microservices
- Hệ thống có thể phát triển tiếp để cung cấp một nền tảng giáo dục, kiểm tra trực tuyến dành cho học sinh, sinh viên
7 Bố cục của quyển luận văn
Tài liệu được chia làm 3 phần chính và 1 phần tài liệu tham khảo
- Phần mở đầu: trình bày vấn đề cần giải quyết, tóm tắt lịch sử giải quyết
vấn đề, mục tiêu của đề tài, đối tượng và phạm vi nghiên cứu, nội dung nghiên cứu, những đóng góp chính của đề tài, bố cục của quyển luận văn
- Phần nội dung:
o Chương 1: Mô tả các yêu cầu và chức năng cần có của hệ thống
o Chương 2: Trình bày khái niệm về kiến trúc Microservices và các công nghệ, kĩ thuật được áp dụng vào hệ thống
o Chương 3: Đưa ra giải pháp, thiết kế và xây dựng hệ thống Chương này gồm những nội dung như: thiết kế kiến trúc cho hệ thống, thiết
kế cơ sở dữ liệu cho mỗi service, thiết kế chức năng cho hệ thống
o Chương 4: Kiểm thử hệ thống Microservices
o Chương 5: Nêu bài học rút ra và đánh giá những gì hệ thống đã đạt được
- Phần kết luận: Trình bày kết quả đạt được và hướng phát triển
- Tài liệu tham khảo: Ghi chú những tài liệu tham khảo với nguồn và tác
giả
Trang 21GVHD: TS Nguyễn Công Danh 4 SV thực hiện: Nguyễn Lâm Hoàng Anh
PHẦN 2 NỘI DUNG CHƯƠNG 1: MÔ TẢ BÀI TOÁN
Chương này sẽ mô tả các yêu cầu cơ bản của hệ thống kiểm tra trắc nghiệm trực tuyến: mô tả chi tiết bài toán, đặt vấn đề, các yêu cầu giao tiếp bên ngoài, các yêu cầu phi chức năng, chức năng chính của hệ thống và sơ đồ usecase
Yêu cầu cho ứng dụng
Mô tả chi tiết bài toán
Đề tài “Phát triển ứng dụng thi trắc nghiệm trực tuyến dùng kiến trúc Microservices” đáp ứng những yêu cầu sau:
Admin: có quyền cao nhất trong hệ thống, quản lý toàn bộ thông tin tài khoản người dùng và bài thi
Người dùng khách: người dùng chưa đăng ký tài khoản trong hệ thống
o Xem bài thi: xem các bài thi
o Đăng ký tài khoản
Thành viên: người đã đăng ký tài khoản thành công trên hệ thống
o Đăng nhập
o Tạo bài thi
o Tạo phòng thi
o Mời người khác vào phòng
o Tham gia thi cùng nhiều người
o Xem thống kê điểm thi
o Xuất thống kê điểm thi ra file excel
o Xem lịch sử thi
o Xem thông tin bài thi
Với những tính năng thời gian thực của hệ thống, việc dùng WebSocket
sẽ khá phức tạp và tốn thời gian cài đặt lâu Thế nên những thư việc hỗ trợ các tính năng thời gian thực như Socket.IO sẽ trở nên cần thiết Tuy nhiên để sử dụng Socket.IO chúng ta cần một server chạy trên Node.js bởi vì thư viện này chỉ hỗ trợ server trên nền tảng này Mặt khác, để quản lý hệ thống đề thi, điểm thi và người dùng một cách chặt chẽ vào bảo mật, ta cần sự hỗ trợ mạnh mẽ từ các Framework tương thích tốt với cơ sở dữ liệu quan hệ
Trang 22GVHD: TS Nguyễn Công Danh 5 SV thực hiện: Nguyễn Lâm Hoàng Anh
Tiếp cận giải quyết vấn đề
1.1.2.1 Mô tả tổng quan
1.1.2.1.1 Bối cảnh sản phẩm
Vào lúc đại dịch Covid-19 bùng phát, việc thi cử kiểm tra đã được chuyển sang hình thức trực tuyến, tuy giờ đại dịch đã gần như qua đi nhưng nhu cầu chuyển đổi việc giáo dục, thi cử sang hình thức trực tuyến vẫn là xu hướng của rất nhiều trung tâm giáo dục Để việc giáo dục và kiểm tra thú vị hơn, tôi sẽ xây dựng một hệ thống thi trực tuyến với hai chế độ: bình thường và cạnh tranh (nhiều người cùng làm một câu hỏi cùng lúc và chỉ tính điểm cho người trả lời đúng đầu tiên) 1.1.2.1.2 Các chức năng của sản phẩm
Đối với Admin
- Đăng nhập
- Xem danh sách các tài khoản: Admin có thể xem danh sách toàn bộ người dùng trong hệ thống và tạo tài khoản cho thành viên
- Xem danh sách tất cả bài thi theo chủ đề
- Xem thống kê điểm thi và xuất thống kê ra file
- Thêm, sửa thông tin của các chủ đề
Đối với người dùng chưa đăng ký:
- Đăng ký
- Xem các bài thi ở chế độ công khai
Đối với người dùng đã đăng ký:
- Đăng nhập
- Tạo bài thi: tạo bài thi theo chủ đề và tạo bộ câu hỏi cho bài thi
- Tạo phòng thi: tạo và chọn chế độ cho phòng thi với bài thi và cung cấp mã phòng thi cho người khác để họ có thể tham gia thực hiện bài thi cùng nhau Phòng thi sẽ có hai chế độ: bình thường và cạnh tranh
- Tham gia phòng thi: nhập mã phòng thi để tham gia phòng
- Thực hiện bài thi: người dùng sẽ cùng tham gia lựa chọn đáp
án cho cùng một câu hỏi, ở chế độ cạnh tranh thì chỉ có người trả lời đúng nhanh nhất mới được tính điểm cho câu hỏi đó
- Xem kết quả thi: xem kết quả vừa thi và kết quả thi cũ cũng như xuất kết quả ra file
Trang 23GVHD: TS Nguyễn Công Danh 6 SV thực hiện: Nguyễn Lâm Hoàng Anh
trịu trách nhiệm quản lý toàn bộ
hệ thống
Quản lý tất cả người dùng, bài thi và chủ đề
- Quản lý bài thi
- Quản lý thông tin cá nhân
- Tạo phòng thi
- Tham gia phòng thi
- Mời người khác vào phòng
- Thực hiện bài thi
- Xem thống kê thông tin điểm thi
- Xuất thống kê điểm thi ra file excel
Trang 24GVHD: TS Nguyễn Công Danh 7 SV thực hiện: Nguyễn Lâm Hoàng Anh
o Các Framework: Net 6, ExpressJS
o Các thư việc: ReactJS, SocketIO
o Các công cụ hỗ trợ: Docker, Kubernetes, RabbitMQ
o Hệ quản trị cở sở dữ liệu: MongoDB, PostgreSQL
o Giao diện đơn giản, thân thiện với người dùng
1.1.2.2 Các yêu cầu bên ngoài
1.1.2.2.1 Giao diện người dùng:
Giao diện nền web: ReactJS
Giao diện thân thiện với người dùng
Máy tính phải có trình duyệt web và kết nối Internet
Cở sở dữ liệu: MongoDB, PostgreSQL
Hệ điều hành: Window 10
1.1.2.2.3 Giao tiếp truyền thông tin:
Trình duyệt web: Google Chrome, Microsoft Edge, FireFox (hỗ trợ tốt nhất cho Google Chrome)
Chuẩn truyền thông tin: dùng giao thức để truyền và nhận dữ liệu giữa máy chủ và các máy client
Trang 25GVHD: TS Nguyễn Công Danh 8 SV thực hiện: Nguyễn Lâm Hoàng Anh
1.1.2.3 Các yêu cầu chức năng của hệ thống
Hình 1-1 Sơ đồ use case của hệ thống thi trắc nghiệm trực tuyến
Trang 26GVHD: TS Nguyễn Công Danh 9 SV thực hiện: Nguyễn Lâm Hoàng Anh
Sơ đồ use case ở hình 1.1 sẽ được mô tả cụ thể bằng các bảng sau đây:
1.1.2.3.1 Đăng ký
Bảng 1.2 Usecase đăng ký
Tên yêu cầu Đăng ký
Mức độ ưu tiên Cao
Mô tả Người dùng muốn đăng ký tài khoản để sử dụng hệ
thống Đối tượng sử
1 Người dùng truy cập vào trang web
2 Người dùng nhấn nút “Sign up”
3 Người dùng nhập đầy đủ thông tin đăng ký và nhấn nút “Sign up”
4 Hệ thống kiểm tra và xử lý đăng ký
5 Thông báo thành công hay thất bại
6 Kết thúc sự kiện Kết quả Người dùng đăng ký tài khoản thành công
1.1.2.3.2 Đăng nhập
Bảng 1.3 Usecase đăng nhập
Tên yêu cầu Đăng nhập
Mức độ ưu tiên Cao
Mô tả Người dùng muốn đăng nhập để sử dụng hệ thống Đối tượng sử
dụng
Người dùng thành viên, Admin
Tiền điều kiện Tài khoản của người dùng đã được tạo
Các thao tác xử
lý
1 Người dùng truy cập vào trang web
2 Người dùng nhấn nút “Sign in”
3 Người dùng nhập đầy đủ thông tin đăng nhập và nhấn nút “Sign in”
4 Hệ thống kiểm tra và xử lý đăng nhập
5 Thông báo thành công hay thất bại
6 Kết thúc sự kiện Kết quả Người dùng đăng nhập thành công và hệ thống trả
về token dùng để xác thực người dùng
Trang 27GVHD: TS Nguyễn Công Danh 10 SV thực hiện: Nguyễn Lâm Hoàng Anh
1.1.2.3.3 Tạo bài thi
Bảng 1.4 Usecase tạo bài thi
Tên yêu cầu Tạo bài thi
Mức độ ưu tiên Cao
Mô tả Người dùng muốn tạo bài thi để nhiều người cùng
tham gia Đối tượng sử
1 Người dùng truy cập vào trang web
2 Người dùng nhấn nút “Create exam”
3 Người dùng nhập tên bài thi và chọn chủ đề, sau
đó nhấn nút “Create exam”
4 Hệ thống kiểm tra và xử lý tạo bài thi
5 Thông báo thành công hay thất bại
Kết quả Người dùng tạo bài thi thành công
1.1.2.3.4 Sửa bài thi
Bảng 1.5 Usecase sửa bài thi
Tên yêu cầu Sửa bài thi
Mức độ ưu tiên Cao
1 Người dùng truy cập vào trang web
2 Người dùng chọn bài thi muốn sửa
3 Người dùng sửa thông tin của bài thi và nhấn nút
“Save”
4 Hệ thống kiểm tra và xử lý sửa bài thi
5 Thông báo thành công hay thất bại
Kết quả Người dùng sửa bài thi thành công
1.1.2.3.5 Xóa bài thi
Bảng 1.6 Usecase xóa bài thi
Tên yêu cầu Xóa bài thi
Trang 28GVHD: TS Nguyễn Công Danh 11 SV thực hiện: Nguyễn Lâm Hoàng Anh
Mức độ ưu tiên Cao
1 Người dùng truy cập vào trang web
2 Người dùng chọn bài thi muốn xoá
3 Người dùng nhấn nút “Xoá”
4 Hệ thống kiểm tra và xử lý xoá bài thi
5 Thông báo thành công hay thất bại
Kết quả Người dùng xóa bài thi tành công
1.1.2.3.6 Tạo câu hỏi
Bảng 1.7 Usecase tạo câu hỏi
Tên yêu cầu Tạo câu hỏi
Mức độ ưu tiên Cao
Mô tả Người dùng muốn tạo câu hỏi cho bài thi
1 Người dùng truy cập vào trang web
2 Người dùng chọn bài thi muốn thêm câu hỏi
3 Người dùng nhấn biểu tượng thêm câu hỏi
4 Người dùng nhập thông tin câu hỏi và nhấn nút
“Save”
5 Hệ thống kiểm tra và xử lý thêm câu hỏi
6 Thông báo thành công hay thất bại
Kết quả Người dùng tạo câu hỏi thành công
1.1.2.3.7 Sửa câu hỏi
Bảng 1.8 Usecase sửa câu hỏi
Tên yêu cầu Sửa câu hỏi
Mức độ ưu tiên Cao
Mô tả Người dùng muốn sửa câu hỏi trong bài thi
Đối tượng sử
dụng
Người dùng thành viên
Trang 29GVHD: TS Nguyễn Công Danh 12 SV thực hiện: Nguyễn Lâm Hoàng Anh
Tiền điều kiện Người dùng đã đăng nhập thành công và đã tạo câu
hỏi cho bài thi Các thao tác xử
lý
1 Người dùng truy cập vào trang web
2 Người dùng chọn bài thi và chọn câu hỏi muốn sửa
3 Người dùng nhấn biểu tượng sửa câu hỏi
4 Người dùng nhập thông tin câu hỏi và nhấn nút
“Save”
5 Hệ thống kiểm tra và xử lý sửa câu hỏi
6 Thông báo thành công hay thất bại
Kết quả Người dùng sửa câu hỏi thành công
1.1.2.3.8 Xóa câu hỏi
Bảng 1.9 Usecase xóa câu hỏi
Tên yêu cầu Xóa câu hỏi
Mức độ ưu tiên Cao
Mô tả Người dùng muốn xóa câu hỏi trong bài thi
Đối tượng sử
dụng
Người dùng thành viên
Tiền điều kiện Người dùng đã đăng nhập thành công và đã tạo câu
hỏi cho bài thi Các thao tác xử
lý
1 Người dùng truy cập vào trang web
2 Người dùng chọn bài thi và chọn câu hỏi muốn xoá
3 Người dùng nhấn biểu tượng xoá câu hỏi và chọn xác nhận xoá câu hỏi
4 Hệ thống kiểm tra và xử lý xoá câu hỏi
5 Thông báo thành công hay thất bại
Kết quả Người dùng xóa câu hỏi thành công
1.1.2.3.9 Xem bài thi
Bảng 1.10 Usecase xem bài thi
Tên yêu cầu Xem bài thi
Mức độ ưu tiên Cao
Mô tả Người dùng muốn xem thông tin bài thi
Đối tượng sử
dụng
Người dùng thành viên, người dùng khách Tiền điều kiện Không
Trang 30GVHD: TS Nguyễn Công Danh 13 SV thực hiện: Nguyễn Lâm Hoàng Anh
Các thao tác xử
lý 1 Người dùng truy cập vào trang web 2 Người dùng chọn bài thi muốn xem
3 Hệ thống hiển thị thông tin bài thi Kết quả Người dùng nhận được thông tin về bài thi
1.1.2.3.10 Tạo phòng thi
Bảng 1.11 Usecase tạo phòng thi
Tên yêu cầu Tạo phòng thi
Mức độ ưu tiên Cao
Mô tả Người dùng muốn tạo phòng thi để nhiều người
cùng tham gia thực hiện bài thi Đối tượng sử
dụng
Người dùng thành viên
Tiền điều kiện Không
Các thao tác xử
lý 1 Người dùng truy cập vào trang web 2 Người dùng chọn bài thi muốn tạo phòng thi
3 Người dùng nhấn nút “Create room”
4 Người dùng chọn chế độ thi
5 Hệ thống kiểm tra và xử lý tạo phòng thi
6 Thông báo thành công hay thất bại Nếu thành công thì trả về mã phòng cho người dùng
Kết quả Người dùng tạo phòng thi thành công và nhận được
mã phòng thi để chia sẻ cho người khác cùng tham gia
1.1.2.3.11 Mời người khác vào phòng
Tên yêu cầu Mời người khác vào phòng thi
Mức độ ưu tiên Cao
Mô tả Người dùng muốn mời người khác vào phòng thi Đối tượng sử
2 Người dùng chọn người muốn mời vào phòng
3 Hệ thống gửi lời mời đến người nhận
4 Nếu người được mời chấp nhận thì sẽ được tham gia vào phòng thi
Trang 31GVHD: TS Nguyễn Công Danh 14 SV thực hiện: Nguyễn Lâm Hoàng Anh
Kết quả Người dùng gửi lời mời thành công Nếu người
được mời chấp nhận thì sẽ được thêm vào phòng
1.1.2.3.12 Tham gia phòng thi
Bảng 1.12 Usecase tham gia phòng thi
Tên yêu cầu Tham gia phòng thi
Mức độ ưu tiên Cao
Mô tả Người dùng muốn Tham gia phòng thi để cùng
nhiều người thực hiện bài thi Đối tượng sử
3 Thông báo thành công hay thất bại Nếu thành công thì giao diện của người dùng sẽ được chuyển đến phòng thi đã được tạo trước
Kết quả Người dùng tham gia phòng thi thành công và sẵn
sàng để thực hiện bài thi 1.1.2.3.13 Thực hiện bài thi
Bảng 1.13 Usecase thực hiện bài thi
Tên yêu cầu Thực hiện bài thi
Mức độ ưu tiên Rất cao
Mô tả Người dùng thực hiện bài thi cùng với nhiều người
khác Mọi người sẽ cùng làm một câu hỏi tại một thời điểm, chỉ có người trả lời đúng đầu tiên sẽ nhận được điểm của câu hỏi đó
3 Thông báo kết quả cho người dùng
Trang 32GVHD: TS Nguyễn Công Danh 15 SV thực hiện: Nguyễn Lâm Hoàng Anh
Kết quả Người dùng chọn đáp án thành công và nhận được
kết quả của lựa chọn 1.1.2.3.14 Xem thống kê kết quả thi
Bảng 1.14 Usecase xem điểm bài thi
Tên yêu cầu Xem điểm của bài thi
Mức độ ưu tiên Cao
Mô tả Người dùng muốn xem điểm của bài thi mà mình
đã thực hiện Đối tượng sử
1 Người dùng truy cập vào trang web
2 Người dùng chọn bài thi muốn xem điểm đã thi
3 Hệ thống trả về kết quả thi của người dùng Kết quả Người dùng nhận được kết quả lần thi
1.1.2.3.15 Xuất kết quả thi ra file excel
Bảng 1.15 Usecase xuất kết quả thi ra file excel
Tên yêu cầu Xuất kết quả thi ra file excel
Mức độ ưu tiên Cao
Mô tả Người dùng muốn xuất kết quả thi ra file excel Đối tượng sử
1 Người dùng hoàn thành bài thi hoặc xem thống
kê kết quả của bài thi cũ
1.1.2.3.16 Thay đổi thông tin cá nhân
Bảng 1.16 Usecase thay đổi thông tin cá nhân
Trang 33GVHD: TS Nguyễn Công Danh 16 SV thực hiện: Nguyễn Lâm Hoàng Anh
Tên yêu cầu Thay đổi thông tin cá nhân
Mức độ ưu tiên Cao
Mô tả Người dùng muốn thay đổi thông tin cá nhân
1 Người dùng truy cập vào trang web
2 Người dùng chọn nút “Setting” ở góc trên bên phải và chọn “Personal Information”
3 Người dùng cập nhật thông tin cá nhân và nhấn nút “Save”
4 Hệ thống kiểm tra và xử lý thay đổi thông tin người dùng
5 Thông báo thành công hay thất bại
Kết quả Người dùng cập nhật thông tin cá nhân thành công
1.1.2.3.17 Đổi mật khẩu
Bảng 1.17 Usecase đổi mật khẩu
Tên yêu cầu Đổi mật khẩu
Mức độ ưu tiên Cao
1 Người dùng truy cập vào trang web
2 Người dùng chọn nút “Setting” ở góc trên bên phải và chọn “Change password”
3 Người dùng cập nhật mật khẩu và nhấn nút
“Save”
4 Hệ thống kiểm tra và xử lý thay đổi thông tin người dùng
5 Thông báo thành công hay thất bại
Kết quả Người dùng đổi mật khẩu thành công
1.1.2.3.18 Tạo chủ đề
Bảng 1.18 Usecase tạo chủ đề
Tên yêu cầu Tạo chủ đề
Trang 34GVHD: TS Nguyễn Công Danh 17 SV thực hiện: Nguyễn Lâm Hoàng Anh
Mức độ ưu tiên Cao
3 Người dùng nhập tên chủ đề và nhấn nút “Create topic”
4 Hệ thống kiểm tra và xử lý thêm chủ đề
5 Thông báo thành công hay thất bại
Kết quả Người dùng tạo chủ đề mới thành công
1.1.2.3.19 Sửa chủ đề
Bảng 1.19 Usecase sửa chủ đề
Tên yêu cầu Sửa chủ đề
Mức độ ưu tiên Cao
3 Người dùng chọn chủ đề muốn sửa
4 Người dùng cập nhật thông tin chủ đề và nhấn nút “Save”
5 Hệ thống kiểm tra và xử lý sửa chủ đề
6 Thông báo thành công hay thất bại
Kết quả Người dùng sửa thông tin chủ đề thành công
1.1.2.3.20 Xóa chủ đề
Bảng 1.20 Usecase xóa chủ đề
Tên yêu cầu Xóa chủ đề
Mức độ ưu tiên Cao
Đối tượng sử
dụng
Admin
Trang 35GVHD: TS Nguyễn Công Danh 18 SV thực hiện: Nguyễn Lâm Hoàng Anh
Tiền điều kiện Người dùng đã đăng nhập thành công
4 Hệ thống kiểm tra và xử lý xoá chủ đề
5 Thông báo thành công hay thất bại
Kết quả Người dùng xóa chủ đề thành công
1.1.2.3.21 Xem tất điểm thi trên bài thi
Bảng 1.21 Usecase xem tất cả điểm trên bài thi
Tên yêu cầu Xem tất điểm thi trên bài thi
Mức độ ưu tiên Cao
Mô tả Admin muốn xem điểm của tất cả người dùng trên
một bài thi Đối tượng sử
dụng
Admin
Tiền điều kiện Người dùng đã đăng nhập thành công
Các thao tác xử
lý 1 Người dùng truy cập vào trang web 2 Người dùng chọn mục quản lý bài thi
3 Người dùng chọn bài thi muốn xem điểm của những người dùng đã thi
4 Hệ thống hiển thị điểm trên bài thi
Kết quả Người dùng nhận được thông tin về điểm của tất cả
người đã tham gia bài thi 1.1.2.3.22 Xem thông tin của người dùng
Bảng 1.22 Usecase xem thông tin người dùng
Tên yêu cầu Xem thông tin của người dùng
Mức độ ưu tiên Cao
1 Người dùng truy cập vào trang web
2 Người dùng chọn mục quản lý người dùng
3 Người dùng chọn người dùng muốn xem thông tin
Trang 36GVHD: TS Nguyễn Công Danh 19 SV thực hiện: Nguyễn Lâm Hoàng Anh
4 Hệ thống hiển thị thông tin người dùng
Kết quả Admin nhận được thông tin về người dùng
1.1.2.4 Yêu cầu phi chức năng:
1.1.2.4.1 Yêu cầu thực thi
- Phần mềm hoạt động tốt trên các hệ điều hành được đề ra
- Tốc độ truy cập trang web phải nhanh và ổn định (ngắn hơn 5s)
- Hệ thống vẫn có thể hoạt động nếu 1 trong các Service gặp vấn đề
1.1.2.4.2 Yêu cầu an toàn
- Phục hồi dữ liệu ngay lập tức từ các bản sao lưu nếu có sự cố xảy ra
1.1.2.4.3 Yêu cầu bảo mật
- Hệ thống không chứa virus, malware, tập tin rác
- Thông điệp được gửi đến hệ thống phải được xác thực và phân quyền
- Dễ dàng bảo trì và sửa chửa
- Có các thông báo xác nhận khi người dùng thực hiện các thao tác cập
nhật hoặc xóa dữ liệu
- Tài liệu của dự án được quản lý có hệ thống
Yêu cầu phát triển và nghiên cứu:
Yêu cầu phát triển
- Phần mềm cần được phát triển bằng mô hình Microservics để tăng tính
mô đun hóa, tái sử dụng và dễ mở rộng
- Phần mềm cần được triển khai lên web
Yêu cầu nghiên cứu
- Microservices là gì?
- Khi nào nên áp dụng kiến trúc Microservices?
- Xác định phạm vi của mỗi Service như thế nào?
- Thiết kế cơ sở dữ liệu cho mỗi Service như thế nào?
- Làm thế nào để liên lạc giữa các Service một cách hiệu quả?
Trang 37GVHD: TS Nguyễn Công Danh 20 SV thực hiện: Nguyễn Lâm Hoàng Anh
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT
Chương 2 sẽ trình bày các khái niệm nền tảng của kiến trúc Microservices: định nghĩa kiến trúc Microservices và các mẫu thiết kế của kiến trúc Microservices Chương này tham khảo từ [4], [5], [6], [7], [8]
Kiến trúc Microservices
Tổng quan về Microservices:
Microservices là kiến trúc phần mềm mà toàn bộ hệ thống sẽ được thiết
kế và cấu trúc nên từ nhiều thành phần nhỏ độc lập, tập trung giải quyết một nhóm chức năng cho hệ thống và giao tiếp với nhau qua các API Mỗi thành phần nhỏ này sẽ được gọi là một Service, mỗi Service sẽ được phát triển và bảo trì bởi một nhóm thành viên của dự án
Các Microservices giao tiếp với nhau thông qua API Mỗi API dùng để kết nối các Microservices sẽ có hai kiểu kết nối như sau:
- Đồng bộ: Service A sử dụng API kết nối Service B bằng cách gửi thông báo và đợi B phản hồi
- Bất đồng bộ: Service A gửi đi thông báo nhưng không đợi Service khác phản hồi mà tiếp tục thực hiện xử lý công việc của mình
Đối với các Microservices dành cho người dùng đầu cuối sẽ không được kết nối trực tiếp vào các Microservices khác mà chúng sẽ giao tiếp với nhau thông qua một cổng API Cổng API này có nhiệm vụ phân tải, lưu trữ tạm thời
và kiểm tra quyền đăng nhập của người dùng đầu cuối
Đặc điểm chính của Microservices:
- Tính độc lập: mỗi Service là một thành phần độc lập, tuy các Service cần giao tiếp với nhau nhưng chúng lại không bị phụ thuộc vào nhau nhưng lại
có thể hoạt động bình thường khi các Service khác gặp sự cố Mỗi Service
có thể được phát triển, vận hành mà không ảnh hưởng đến Service khác
- Tính chuyên biệt: mỗi Service sẽ đảm nhiệm một vai trò chuyên biệt cho hệ thống Nếu một Service đảm nhiệm quá nhiều chức năng qua quá trình phát triển, ta có thể tách nó thành những Service riêng biệt
- Tính bao đóng: Microservices nên sở hữu dữ liệu của chúng và ẩn việc triển khai chúng Mỗi Microservices phải có kho lưu trữ dữ liệu riêng và phải giữ
nó ở chế độ riêng tư Dữ liệu liên tục của một Microservices chỉ có thể được truy cập thông qua API được xác định rõ ràng của nó
Một số mẫu thiết kế trong Microservices:
- API Gateway: là một công cụ quản lý API nằm giữa các máy khách (client)
và nhóm các backend service API gateway hoạt động như một reverse
Trang 38GVHD: TS Nguyễn Công Danh 21 SV thực hiện: Nguyễn Lâm Hoàng Anh
proxy, chấp nhận tất cả các lệnh gọi API, tìm nạp và tổng hợp các tài nguyên thích hợp trước khi gửi phản hồi cho mỗi yêu cầu API Hình 2-1 là mẫu mô phỏng của một API Gate của trang web thương mại điện tử
Hình 2-1 Mô phỏng API Gateway
- Service Discovery: do Microservices được cấu thành từ nhiều Service khác nhau, nên các Service cần biết được địa chỉ của Service khác trong hệ thống
để giao tiếp với nhau Service Discovery giúp các Service có thể dễ dàng định vị được nhau
- Load Balancing: cân bằng tải bằng cách chia các request đều đến các server khác nhau, tránh gây quá tải ở một server
Net Framework
.NET là một nền tảng mã nguồn mở để xây dựng và thực thi ứng dụng được viết bởi các ngôn ngữ mà NET hỗ trợ (C#, VB.NET, F#, ) Các chương trình này sẽ được dịch sang mã trung gian (Intermediate Language) dù chương trình ở dạng thư viện dll hoặc tự thực thi exe Khi chạy, mã trung gian sẽ được một trình biên dịch khác có tên là Just-In-Time (JIT) compiler chuyển tiếp thành một dạng mã máy và thực thi trong một môi trường khép kín do NET quản lý Mỗi trường thực thi này có tên gọi là Common Language Runtime Dưới đây là hình minh họa quy trình hoạt động của NET Framework
Trang 39GVHD: TS Nguyễn Công Danh 22 SV thực hiện: Nguyễn Lâm Hoàng Anh
Hình 2-2 Mô phỏng mô hình NET
.NET framework hỗ trợ tạo khung xương cho nhiều loại ứng dụng khác nhau, bao gồm ứng dụng Web (ASP.NET), ứng dụng Desktop (Window Forms), Web API, Ngoài ra NET Framework còn cung cấp hệ thống thư viện khổng lồ mà tất cả framework trên nó đều có thể sử dụng
NodeJS và ExpressJS
NodeJs là một môi trường chạy mã nguồn mở, đa nền tảng của Javascript
trên máy chủ NodeJs được chạy trên Javascript engine (V8 Engine) giúp thực thi mã Javascript bên ngoài trình duyệt web NodeJs được xây dựng trên kiến trúc hướng sự kiện có thể thực hiện xử lý I/O bất đồng bộ Điều này có nghĩa
là các tiến trình input/output có thể cho phép các tiến trình khác hoạt động mà không phải đợi quá trình xử lý input/out hoàn thành Thiết kế này hướng đến
sự tối ưu hóa việc truyền tải thông điệp và khả năng mở rộng trong một ứng dụng web với nhiều tiến trình I/O, đặc biệt là cho các ứng dụng thời gian thực như giao tiếp thời gian thực giữa các chương trình và trò chơi trên trình duyệt web
ExpressJS là một framework ứng dụng web có mã nguồn mở và miễn phí
được xây dựng trên nền tảng Node.js ExpressJS được sử dụng để thiết kế và phát triển các ứng dụng web một cách nhanh chóng Để hiểu ExpressJS, người dùng chỉ cần phải biết JavaScript, do đó nên việc xây dựng các ứng dụng web
và API trở nên đơn giản hơn đối với các lập trình viên và nhà phát triển đã thành thạo JavaScript trước đó
Ưu điểm của ExpressJS:
Trang 40GVHD: TS Nguyễn Công Danh 23 SV thực hiện: Nguyễn Lâm Hoàng Anh
● Dễ học, chỉ cần ta biết JavaScript, ta sẽ không cần phải học một ngôn ngữ mới để học ExpressJS
● Mã JavaScript được diễn giải thông qua Google V8 JavaScript Engine của Node.js Do đó, mã sẽ được thực hiện một cách nhanh chóng và dễ dàng
● ExpressJS rất đơn giản để tùy chỉnh và sử dụng theo nhu cầu
● Cung cấp một module phần mềm trung gian linh hoạt và rất hữu ích để thực hiện các tác vụ bổ sung theo phản hồi và yêu cầu
● Hỗ trợ phát triển ứng dụng theo mô hình MVC, đây là mô hình phổ biến cho việc lập trình web hiện nay
ReactJS
ReactJS là một thư viện Javascript vô cùng nổi tiếng được phát triển bởi Facebook, dùng để xây dựng những ứng dụng SPA (Single Page Application) Đây là một thư viện UI hỗ trợ việc xây dựng giao diện website thông qua các components có tính tương tác cao, có trạng thái riêng và có thể tái sử dụng Nhìn chung tất cả những tính năng hay sức mạnh của ReactJS thường xuất phát từ việc tập trung vào các phần riêng lẻ chính vì điểm này nên khi làm việc trên web thay vì nó sẽ làm việc trên toàn bộ ứng dụng của website thì ReactJS cho phép developer có chức năng phá vỡ giao diện của người dùng từ một cách phức tạp và biến nó trở thành các phần đơn giản hơn nhiều lần có nghĩa là render dữ liệu không chỉ được thực hiện ở vị trí server mà còn có thể thực hiện
ở vị trí Client khi sử dụng ReactJS
Socket.IO
Socket.IO là một thư việc hỗ trợ các tính năng thời gian thực với độ trễ thấp, giao tiếp hai chiều giữa web clients và servers Socket.IO được xây dựng dựa trên WebSocket và cung cấp thêm các tính năng như tự động kết nối lại, hỗ trợ truyển tin broadcast
Trước đây, Socket.IO chỉ hỗ trợ cài đặt trên server Node.js và client được viết bằng Javascript Nhưng giờ đây, chúng ta có thể có client được viết bằng Java, C++, Swift, Net…Tuy nhiên mặt hạn chế ở thư viện này là chỉ hỗ trợ server trên Node.js
MongoDB
MongoDB là phần mềm cơ sở dữ liệu mã nguồn mở NoSQL, được thiết kế hướng theo đối tượng và hỗ trợ trên đa nền tảng Các bảng MongoDB có cấu trúc linh hoạt, cho phép dữ liệu không cần tuân theo bất kỳ dạng cấu trúc nào