1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Luận văn tốt nghiệp khoa công nghệ phần mềm Đề 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

106 0 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Phát triển ứng dụng thi trắc nghiệm trực tuyến dùng kiến trúc Microservices
Tác giả Nguyễn Lâm Hoàng Anh
Người hướng dẫn TS. Nguyễn Công Danh
Trường học Đại học Cần Thơ, Trường Công nghệ thông tin và truyền thông, Khoa Công nghệ phần mềm
Chuyên ngành Công nghệ phần mềm
Thể loại Luận văn tốt nghiệp
Năm xuất bản 2022
Thành phố Cần Thơ
Định dạng
Số trang 106
Dung lượng 3,14 MB

Nội dung

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 2

MSSV: B1805843 Ngành: Kỹ thuật phần mềm Khóa: 44

Trang 3

GVHD: 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 4

GVHD: 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 5

GVHD: 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 6

GVHD: 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 7

GVHD: 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 8

GVHD: 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 9

GVHD: 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 10

GVHD: 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 11

GVHD: 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 12

GVHD: 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 13

GVHD: 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 14

GVHD: 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 15

GVHD: 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 16

GVHD: 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 17

GVHD: 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 18

GVHD: 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 19

GVHD: 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 20

GVHD: 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 21

GVHD: 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 22

GVHD: 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 23

GVHD: 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 24

GVHD: 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 25

GVHD: 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 26

GVHD: 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ử

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 27

GVHD: 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 28

GVHD: 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 29

GVHD: 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ử

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ử

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 30

GVHD: 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 31

GVHD: 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 32

GVHD: 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 33

GVHD: 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 34

GVHD: 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 35

GVHD: 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 36

GVHD: 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 37

GVHD: 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 38

GVHD: 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 39

GVHD: 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 40

GVHD: 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

Ngày đăng: 30/10/2024, 08:48