Sản phẩm hoàn thành phảilà một ứng dụng Web được xây dựng có đầy đủ các thành phần của mô hìnhMicroservice và đáp ứng thêm các yêu cầu về ứng dụng mua, lựa chọn sản phẩm yêuthích, t
Trang 1MINH KHOA ĐÀO TẠO CHẤT LƯỢNG CAO
ĐỒ ÁN TỐT NGHIỆP
XÂY DỰNG WEBSITE SẢN PHẨM ĐIỆN TỬ SỬ DỤNG
MÔ HÌNH MICROSERVICE
SVTH : VÕ MINH HUY MSSV : 16110093 SVTH : NGUYỄN HỮU TOÀN MSSV : 16110226
Khoá: 16 Ngành: CÔNG NGHỆ THÔNG TIN GVHD: TS LÊ VĨNH THỊNH
Trang 3MINH KHOA ĐÀO TẠO CHẤT LƯỢNG CAO
ĐỒ ÁN TỐT NGHIỆP
XÂY DỰNG WEBSITE SẢN PHẨM ĐIỆN TỬ SỬ DỤNG
MÔ HÌNH MICROSERVICE
SVTH : VÕ MINH HUY MSSV : 16110093 SVTH : NGUYỄN HỮU TOÀN MSSV : 16110226
Khoá: 16 Ngành: CÔNG NGHỆ THÔNG TIN GVHD: TS LÊ VĨNH THỊNH
Trang 4Tp Hồ Chí Minh, ngày tháng năm 202
Trang 5CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập – Tự do – Hạnh phúc
*******
Tp Hồ Chí Minh, ngày 01 tháng 07 năm 2020
NHIỆM VỤ KHÓA LUẬN TỐT NGHIỆP
Họ và tên sinh viên: Võ Minh Huy
Họ và tên sinh viên:Nguyễn Hữu Toàn
MSSV: 16110093
MSSV: 16110226
Giảng viên hướng dẫn: TS Lê Vĩnh Thịnh ĐT: 0938 252 222
Ngày nhận đề tài: / /202 Ngày nộp đề tài: / /202
1 Tên đề tài: XÂY DỰNG WEBSITE SẢN PHẨM ĐIỆN TỬ SỬ DỤNG MÔ HÌNHMICROSERVICE
2 Các số liệu, tài liệu ban đầu: Không có
3 Nội dung thực hiện đề tài:
- Tìm hiểu về React Js, Node Js
- Tìm hiểu Microservice
- Xây dựng website demo
TRƯỞNG NGÀNH
Nguyễn Đăng Quang
GIẢNG VIÊN HƯỚNG DẪN
Lê Vĩnh Thịnh
Trang 6CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập – Tự do – Hạnh phúc
*******
PHIẾU NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
Họ và tên Sinh viên 1: Võ Minh Huy MSSV 1: 16110093
Họ và tên Sinh viên 2: Nguyễn Hữu Toàn MSSV 2: 16110226
Ngành: Công nghệ Thông tin
Tên đề tài: XÂY DỰNG WEBSITE BÁN SẢN PHẨM ĐIỆN TỬ SỬ DỤNG MÔ
Trang 7Tp Hồ Chí Minh, ngày tháng năm 202
Giáo viên hướng dẫn
(Ký & ghi rõ họ tên)
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập – Tự do – Hạnh phúc
*******
PHIẾU NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
Họ và tên Sinh viên 1: Võ Minh Huy MSSV 1: 16110093
Họ và tên Sinh viên 2: Nguyễn Hữu Toàn MSSV 2: 16110226
Ngành: Công nghệ Thông tin
Tên đề tài: XÂY DỰNG WEBSITE BÁN SẢN PHẨM ĐIỆN TỬ SỬ DỤNG MÔ
Trang 9Lời đầu tiên, cho phép nhóm em được gửi lời cảm ơn chân thành đến thầy LêVĩnh Thịnh, người đã phụ trách hướng dẫn nhóm chúng em trong việc thực hiện vàhoàn thành bài báo cáo một cách tốt và hiệu quả nhất Những sự chỉ dạy, nhật xét, đónggóp ý kiến từ thầy đã góp phần rất quan trọng trong việc giúp chúng em hoàn hành đềtài một cách hoàn thiện nhất.
Cảm ơn các thầy cô trong khoa Công Nghệ Thông Tin đã luôn nhiệt tình, cốnghiến, tận tình giải đáp các thắc mắc của chúng em Bên cạnh đó, chúng em xin đượccảm ơn các bạn cùng khóa, các anh chị khóa trên đã không ngần ngại chia sẻ các thôngtin, kinh nghiệm bổ ích giúp chúng em hoàn thiện hơn đề tài của mình
Báo cáo được thực hiện trong một khoảng thời gian có hạn, cùng với những hạnchế về mặt kiến thức nên việc sai sót là điều không thể tránh khỏi trong quá trình thựchiện Chúng em kính mong nhận được những lời nhận xét, ý kiến đóng góp quý báo từquý Thầy Cô để chúng em có thêm kinh nghiệm và hoàn thành tốt hơn những đề tài saunày
Chúng em xin chân thành cảm ơn !
Trang 10CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập – Tự do – Hạnh phúc
*******
ĐỀ CƯƠNG LUẬN VĂN TỐT NGHIỆP
Họ và tên Sinh viên 1: Võ Minh Huy MSSV 1: 16110093
Họ và tên Sinh viên 2: Nguyễn Hữu Toàn MSSV 2: 16110226
Ngành: Công nghệ Thông tin
Thời gian làm tiểu luận: từ: / /2020 đến: / /202
Tên đề tài: XÂY DỰNG WEBSITE BÁN SẢN PHẨM ĐIỆN TỬ SỬ DỤNG MÔ HÌNH MICROSERVICE
GV hướng dẫn: TS LÊ VĨNH THỊNH
Nhiệm vụ của luận văn:
1 Nghiên cứu về React JS
2 Nghiên cứu về cách viết REST API và cách ứng dụng
3 Sử dụng thư viện để tạo Model cho dữ liệu trong MySQL
4 Dùng Angular để làm front-end theo kiểu Single page application
5 Kiểm thử
Trang 11MỤC LỤC
LỜI CẢM ƠN 9
ĐỀ CƯƠNG LUẬN VĂN TỐT NGHIỆP 10
MỤC LỤC 11
MỤC LỤC HÌNH ẢNH 14
MỤC LỤC BẢNG 16
CHƯƠNG 1: TỔNG QUAN 19
1.1 Tính cấp thiết của đề tài 19
1.2 Mục đích đề tài 19
1.3 Đối tượng và phạm vi nghiên cứu 21
1.4 Kết quả dự kiến đạt được 21
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 22
2.1 Tổng quan về Microservice 22
2.1.1 Khái niệm Microservice Structure 22
2.1.2.Cách thức Microservice vận hành 23
2.1.3 Ưu nhược điểm của Microservice 23
2.1.4.Nguyên tắc xây dựng kiến trúc Microservice 25
2.1.5.Duy trì tính nhất quán của dữ liệu khi sử dụng kiến trúc Microservice 26
2.2 NodeJS 27
2.2.1 Tổng quan 27
2.2.2 Nguyên tắc hoạt động 28
2.2.4 Nhược điểm 30
2.3 Cơ sở dữ liệu MySQL 31
2.3.1.Định nghĩa 31
2.3.2.MySQL Server 31
2.3.3.MySQL Client 31
Trang 122.3.4.Cách thức hoạt động 32
2.4 Docker 32
2.4.1.Khái niệm docker 32
2.4.2.Khái niệm container 32
2.4.3.Ưu điểm của Docker 33
2.4.4.Các khái niệm liên quan 33
2.4.5 Quy trình hoạt động 34
CHƯƠNG 3: KHẢO SÁT HIỆN TRẠNG VÀ XÁC ĐỊNH YÊU CẦU 36
3.1 Khảo sát hiện trạng 36
3.1.1.Trang https://www.thegioididong.com/ 37
3.1.2 Trang https://dienmaythienhoa.vn/ 39
3.2 Xác định yêu cầu 40
3.3 Đặc tả chức năng 42
3.3.1.Bảng requirement cho use case 42
3.3.2.Liệt kê các actor 46
3.3.3.Bảng use case 47
CHƯƠNG 4: THIẾT KẾ ỨNG DỤNG 106
4.1 Thiết kế dữ liệu 106
4.1.1.Sơ đồ thiết kế dữ liệu 106
4.1.2.Mô tả sở đồ thiết kế dữ liệu 106
4.2 Sơ đồ tuần tự (Sequence Diagram) 106
4.2.1.Sơ đồ tìm kiếm sản phẩm “Search Product” 106
4.2.2 Sơ đồ lọc sản phẩm “Filter Product” 109
4.2.3 Sơ đồ bình luận và đánh giá “Comment and ratings” 113
4.2.4 Sơ đồ quản lý giỏ hàng 115
4.2.5 Sơ đồ đăng ký tài khoản “Register an account” 116
4.2.6 Sơ đồ đăng nhập vào tài khoản “Login” 116
4.2.7 Sơ đồ quản lý thông tin tài khoản 117
Trang 134.2.10 Sơ đồ quản lý danh mục “Manage Category” 121
4.2.12 Sơ đồ quản lý User “Manage User” 124
4.2.13 Sơ đồ quản lý đơn hàng “Manage Order” 126
4.2.14 Sơ đồ quản lý địa chí giao hàng “Manage Address Shipping” 129
4.2.15 Sơ đồ đăng xuất “Logout an account” 131
CHƯƠNG 5: GIAO DIỆN VÀ KIỂM THỬ 132
5.1 Giao diện 132
5.1.1 Giao diện khách hàng 132
5.1.2 Giao diện admin 138
5.2 Kiểm thử 146
5.2.1 Chức năng đăng ký 146
5.2.2 Chức năng đăng nhập 148
5.2.3 Chức năng đổi mật khẩu 149
5.2.4 Chức năng tìm kiếm sản phẩm 150
5.2.5 Chức năng thanh toán 151
CHƯƠNG 6: KẾT LUẬN 154
6.1 Kết quả đạt được 154
6.2 Ưu điểm và nhược điểm 154
6.2.1 Ưu điểm 154
6.2.2 Nhược điểm 154
6.2.3 Khó khăn 155
6.3 Kinh nghiệm đạt được 155
6.4 Hướng phát triển trong tương lai 155
TÀI LIỆU THAM KHẢO 156
Trang 14MỤC LỤC HÌNH ẢNH
Hình 1: Mô hình kiến trúc Microservice 22
Hình 2: Saga Pattern 26
Hình 3: Kiến trúc MySQL 32
Hình 4: Kiến trúc Docker 35
Hình 6: Giao diện thegioididong.com 37
Hình 7: Giao diện trang Điện máy Thiên Hòa 39
Hình 8: Sequence tìm sản phẩm theo tên 106
Hình 9: Sequence tìm sản phẩm theo danh mục 107
Hình 10: Sequence tìm sản phẩm theo hãng 108
Hình 11: Sequence lọc sản phẩm theo danh mục 109
Hình 12: Sequence lọc sản phẩm theo giá 111
Hình 13: Sequence lọc sản phẩm theo đánh giá 112
Hình 14: Sequence thêm bình luận và đánh giá 113
Hình 15: Sequence sửa bình luận và đánh giá 114
Hình 16: Sequence xem sản phẩm trong giỏ hàng 115
Hình 17: Sequence đăng ký tài khoản 116
Hình 18: Sequence đăng nhập tài khoản 116
Hình 19: Sequence xem thông tin tài khoản 117
Hình 20: Sequence sửa thông tin tài khoản 117
Hình 21: Sequence đổi mật khẩu 118
Hình 22: Sequence xem thông tin đơn hàng 118
Hình 23: Sequence xem chi tiết đơn hàng 119
Hình 24: Sequence xóa đơn hàng 120
Hình 25: Sequence thêm danh mục 121
Hình 26: Sequence sửa thông tin danh mục 122
Hình 27: Sequence xóa danh mục 123
Hình 28: Sequence xem danh mục 123
Hình 29: Sơ đồ thêm user 124
Hình 30: Sequence sửa user 124
Hình 31: Sequence xóa user 125
Hình 32: Sequence xem user 126
Hình 33: Sequence xem đơn hàng 126
Hình 34: Sequence sửa đơn hàng 127
Hình 35: Sequence xóa đơn hàng 128
Trang 15Hình 36: Sequence sửa trạng thái đơn hàng 129
Hình 37: Sequence thêm địa chỉ giao hàng 129
Hình 38: Sơ đồ sửa địa chỉ giao hàng 130
Hình 39: Sequence xóa địa chỉ giao hàng 130
Hình 40: Sequence xem địa chỉ giao hàng 131
Hình 41: Sơ đồ đăng xuất 131
Trang 16MỤC LỤC BẢNG
Bảng 1: Bảng Requirement cho user 46
Bảng 2: Use case tìm sản phẩm theo tên 47
Bảng 4: Use case tìm sản phẩm theo danh mục 48
Bảng 5: Use case tìm sản phẩm theo giá 49
Bảng 6: Use case tìm sản phẩm theo hãng 50
Bảng 7: Use case lọc sản phẩm theo danh mục 51
Bảng 8: Use case lọc sản phẩm theo hãng 52
Bảng 9: Use case lọc sản phẩm theo giá tiền 53
Bảng 10: Use case lọc sản phẩm theo số sao đánh giá 54
Bảng 11: Use case lọc sản phẩm đang được giảm giá 55
Bảng 12: Use case xem thông tin chi tiết sản phẩm 56
Bảng 13: Use case xem bình luận và đánh giá 57
Bảng 14: Use case thêm bình l uận và đánh giá 58
Bảng 15: Use case sửa bình luận và đánh giá 59
Bảng 16: Use case xem sản phẩm trong giỏ hàng 60
Bảng 17: Use case Thêm sản phẩm vào giỏ hàng 61
Bảng 18: Use case Cập nhật giỏ hàng 63
Bảng 19: Use case Xóa sản phẩm trong giỏ hàng 65
Bảng 20: Use case Đăng ký 66
Bảng 21: Use case đăng nhập 68
Bảng 22: Use case đăng nhập bằng Facebook 69
Bảng 23: Use case đăng nhập bằng Google 70
Bảng 24: Use case xem thông tin tài khoản 71
Bảng 25: Use case sửa thông tin cá nhân 72
Bảng 26: Use case đổi mật khẩu 73
Trang 17Bảng 27: Use case thanh toán bằng tiền mặt 74
Bảng 28: Use case thanh toán bằng PayPal 75
Bảng 29: Use case xem thông tin đơn hàng 76
Bảng 30: Use case xóa đơn hàng 77
Bảng 31: Use case xem sản phẩm yêu thích 78
Bảng 32: Use case xóa sản phẩm yêu thích 79
Bảng 33: Use case thêm sản phẩm 80
Bảng 34: Use case sửa thông tin sản phẩm 81
Bảng 35: Use case xóa sản phẩm 82
Bảng 36: Use case xem danh sách sản phẩm 83
Bảng 37: Use case thêm danh mục sản phẩm 84
Bảng 38: Use case sửa danh mục 85
Bảng 39: Use case xóa danh mục 86
Bảng 40: Use case xem danh mục 87
Bảng 41: Use case thêm hãng 88
Bảng 42: Use case sửa thông tin hãng 89
Bảng 43: Use case xóa hãng 90
Bảng 44: Use case xem hãng 91
Bảng 45: Use case thêm User 92
Bảng 46: Use case sửa user 93
Bảng 47: Use case xóa user 95
Bảng 48: Use case xem user 95
Bảng 49: Use case xem đơn hàng 96
Bảng 50: Use case xem thông tin chi tiết đơn hàng 97
Bảng 51: Use case sửa trạng thái đơn hàng 98
Bảng 52: Use case xóa đơn hàng 99
Bảng 53: Use case thêm địa chỉ giao hàng 100
Trang 18Bảng 54: Use case sửa địa chỉ giao hàng 101
Bảng 55: Use case xóa địa chỉ giao hàng 102
Bảng 56: Use case xem địa chỉ giao hàng 103
Bảng 57: Use case đăng xuất 105
Bảng 58: Bảng mô tả kiểm thử chức năng đăng ký 147
Bảng 59: Bảng kiểm thử chức năng đăng nhập 148
Bảng 60: Bảng kiểm thử chức năng đổi mật khẩu 149
Bảng 61: Bảng kiểm thử chức năng tìm kiếm sản phẩm 151
Bảng 62: Bảng kiểm thử chức năng thanh toán 151
Trang 19CHƯƠNG 1: TỔNG QUAN
1.1 Tính cấp thiết của đề tài
Việt Nam đang dần bước vào thời đại số hóa Các mạng 4G, 5G đang dần phủ sóng khắp mọi miền đất nước Số lượng người dùng di động ngày càng nhiều Do đó, việc mua sắm qua mạng trở thành nhu cầu và xu hướng trong thời đại mới với nhiều tiện ích: Rẻ, ít tốn thời gian, được giao tận nhà, tiện lợi Vì vậy, với mong muốn có thể theo
đà xu hướng này, chúng em quyết định xây dựng 1 web bán hàng online, mà cụ thể là bán các thiết bị điện tử để vừa thử sức bản thân, vừa rèn luyện kỹ năng code cho sự nghiệp sau này
1.2 Mục đích đề tài
Đề tài “: XÂY DỰNG WEBSITE BÁN SẢN PHẨM ĐIỆN TỬ SỬ DỤNG MÔ HÌNHMICROSERVICE” đặt ra 2 vấn đề trọng tâm về mục tiêu mà sinh viên nghiên cứu cầnthực hiện được bao gồm:
Vấn đề đầu tiên đưa ra về yếu tố lý thuyết, sinh viên thực hiện cần có kết quả nghiêncứu chuyên môn và hiểu được tổng quan và khả năng ứng dụng của từng thành phầntrong mô hình Microservice nói chung Với từng thành phần, hiểu và xác định đượccác đặc trưng về nguyên tắc hoạt động, thành phần hoặc mô hình Thư viện được xâydựng dựa trên ngôn ngữ lập trình Javascript đạt được sự phổ biến đến lập trình viênnhư: NodeJS – xây dựng ứng dụng phía người dùng Song song với việc hiểu về cácthành phần tiêu biểu của Microservice sinh viên cũng cần phải có thêm tìm hiểu về cácthư viện, mã nguồn module giúp ích trong quá trình xây dựng ứng dụng Web thực tế
Trang 20Vấn đề thứ hai của đề tài đặt ra về ứng dụng mô hình Microservice vào xây dựng mộtsản phẩm cụ thể, ở đây là “Website bán sản phẩm điện tử” Sản phẩm hoàn thành phải
là một ứng dụng Web được xây dựng có đầy đủ các thành phần của mô hìnhMicroservice và đáp ứng thêm các yêu cầu về ứng dụng mua, lựa chọn sản phẩm yêuthích, tracking sản phẩm trong quá trình vận chuyển và một số tính năng khác có thể ápdụng trong thực tế cũng như khả năng nâng cấp hoặc tiếp tục phát triển tính năng trongtương lai
Trang 211.3 Đối tượng và phạm vi nghiên cứu
Đề tài được thực hiện nghiên cứu xoay quanh hai nhóm đối tượng trọng tâm bao gồm: nhóm đối tượng về kiến thức công nghệ và nhóm đối tượng có nhu cầu mua, sử dụng các tựa sản phẩm mà họ yêu thích
Trong đó nhóm đối tượng về kiến thức công nghệ bao gồm 2 đối tượng nghiên cứu bắt buộc là: Mã nguồn mở NodeJS, mô hình Microservice, Docker Kết hợp thêm trong nhóm đối tượng nghiên cứu về kiến thức công nghệ là một số thư viện Javascript có giátrị ứng dụng như JWT (Json Web Token), charts cũng cần được nghiên cứu cho các ứng dụng về doanh thu cũng như mức độ ưa thích của sản phẩm
Nhóm đối tượng có nhu cầu mua, nghiên cứu về sản phẩm điện tử và các sản phẩm hỗ trợ đi kèm, tìm hiểu về nghiên cứu hành vi mua hàng của khách để tăng doanh thu bán hàng
Phạm vi nghiên cứu đề ra ở mức độ tổng quát, người thực hiện đề tài hiểu được các kiến thức chung của nội dung nghiên cứu và áp dụng được từng nội dung kiến thức vàosản phẩm thực tế, không đặt nặng các lý thuyết nặng nề không mang tính ứng dụng
1.4 Kết quả dự kiến đạt được
– Hiểu được các kiến thức về Microservice, Restful API
– Xây dựng hoàn thành một website bán sản phẩm điện tử online với những kiến thức đã tìm hiểu
Trang 22CHƯƠNG 2: CƠ SỞ LÝ THUYẾT
2.1 Tổng quan về Microservice
2.1.1 Khái niệm Microservice Structure
Trang 23Nền tảng cả kiến trúc microservices là xây dựng một ứng dụng mà ứng dụng này là tổng hợp của nhiều services nhỏ và độc lập có thể chạy riêng biệt, phát triển và triển khai độc lập.
Kiến trúc Microservice là một tập hợp các service kết nối nhỏ hơn
Hình 1: Mô hình kiến trúc Microservice
Trang 24– Mỗi vùng chức năng giờ được thực thị bởi một dịch vụ nhỏ
– Ứng dụng web cũng có thể chia nhỏ hơn chuyên cho từng đối tượng người dùng(khách hàng/admin)
2.1.3 Ưu nhược điểm của Microservice
+ Cho phép các services được phát triển bởi những team khác nhau Mỗi team
có thể phát triển, thử nghiệm, triển khai và mở rộng quy mô dịch vụ của
mình một cách độc lập với tất cả các team khác
– Giảm thiểu rủi ro: Nếu có lỗi trong một service thì chỉ có service đó bị ảnh
hưởng Các services khác sẽ tiếp tục xử lý các yêu cầu Trong khi đó, một thành
Trang 25phần hoạt động sai của kiến trúc một khối có thể làm ảnh hưởng toàn bộ hệ
+ Cần implement việc communication giữa các inter-services
+ Handle partial failure là rất phức tạp vì một luồng xử lý cần đi qua nhiều
services
+ Việc thực hiện các requests trải rộng trên nhiều services khó khăn hơn, điều này cũng đòi hỏi sự phối hợp cẩn thận giữa các teams
+ Khó khăn trong việc đảm bảo toàn vẹn CSDL nếu triển khai theo kiến trúc
cơ sở dữ liệu phân vùng
+ Triển khai và quản lý microservices nếu làm thủ công theo cách đã làm với ứng dụng một khối phức tạp hơn rất nhiều
+ Phải xử lý sự cố khi kết nối chậm, lỗi khi thông điệp không gửi được hoặc thông điệp gửi đến nhiều đích đến vào các thời điểm khác nhau
Trang 262.1.4 Nguyên tắc xây dựng kiến trúc Microservice
1) Single Responsibility Principle (SRP): một service với phạm vi và chức năng giới hạn, tập trung vào một nhiệm vụ giúp quá trình phát triển và triển khai dịch
vụ trở nên nhanh chóng hơn
2) Trong quá trình thiết kế, ta nên xác định và giới hạn các services theo chức năngnghiệp vụ thực tế
3) Đảm bảo microservices có thể phát triển và triển khai độc lập
4) Mục tiêu của thiết kế là phạm vi của microservices phục vụ một nghiệp vụ chứ không chỉ đơn giản làm các dịch vụ nhỏ hơn Kích thước hợp lý của một service
là kích thước đủ để đáp ứng yêu cầu của một chức năng trong hệ thống
5) Khác với services trong SOA, một microservice không nên có quá nhiều hàm hay chức năng hỗ trợ xung quanh và định dạng thông báo/ gửi tin (messaging) đơn giản
Trang 272.1.5 Duy trì tính nhất quán của dữ liệu khi sử dụng kiến trúc Microservice
Trang 28Để duy trì tính nhất quán của dữ liệu khi xây dựng 1 kiến trúc Microservice, ta nên sử dụng Saga pattern thay vì 2 phase-commit/distributed transactions
Ý tưởng của Saga patteren:
Một service publishes một event khi dữ liệu của nó thay đổi
Các services khác consume event đó và cập nhật dữ liệu của chúng
Nếu một transaction thất bại, thì saga sẽ thực hiện một loạt các transactions để hoàn táccác transactions trước đó bằng việc sử dụng là Event Sourcing và Transaction Log
Tailing
Hình 2: Saga Pattern
Trang 292.2 NodeJS
2.2.1 Tổng quan
NodeJS là một framework môi trường hỗ trợ dịch và thực thi chương trình được viết bằng JavaScript mà không cần dùng tới trình duyệt
NodeJS ra đời nhờ những lập trình viên đầu tiên của JavaScript mở rộng nó từ một
ngôn ngữ chỉ có thể thực thi trên trình duyệt thành ngôn ngữ có thể thực thi độc lập trên máy tính
NodeJS cũng giống với trình duyệt hiện nay, được chạy dựa trên V8 JavaScript engine
- công cụ giúp trình duyệt dịch và thực thi JavaScript Ngoài ra, NodeJS cung cấp một
số thư viện không có sẵn trong V8 engine
• Một số khái niệm tiêu biểu trong NodeJS
- Event: mỗi một thao tác, yêu cầu (request) đến server đều được NodeJS xem là một sự kiện (event)
- Event Queue: hàng đợi sự kiện là nơi tất cả các sự kiện (event) đã đi vào sẽ lần lượt được xử lý theo cơ chế FIFO, tức là các sự kiện đến server trước sẽ được NodeJS
xử lý trước, các sự kiện đến server sau sẽ được xử lý sau
- Callbacks: là các thao tác, các xử lý, các hàm sẽ được thực hiện sau khi đã thực thi hoàn thành một hàm định nghĩa callback Việc sử dụng callback giúp cho lập trình viên quản lý các vấn đề về
- Message: nội dung thông báo tương ứng với từng callback
Trang 30- Blocking I/O: là cơ chế được ứng dụng trong phần lớn các ngôn ngữ server-side,
cơ chế này quản lý các request đến server và lần lượt cho thực hiện yêu cầu của requesttiếp theo khi request đang xử lý đã hoàn thành Từ đây dễ thấy được rằng nếu các yêu cầu xử lý của request đến sớm tiêu tốn nhiều thời gian thì các request đến sau bắt buộc phải đợi toàn bộ thời gian xử lý này Với NodeJS việc quản lý các request yêu cầu
được thay thế bằng cơ chế xử lý Non-Blocking I/O để giải quyết vấn đề thời gian chờ nêu trên
- Thread Pool: là một chương trình viết bằng ngôn ngữ C++ được tích hợp bên trong NodeJS, chương trình này cho phép xử lý đa luồng Đây chính là môi trường xử
lý chính cho tất cả tác vụ được server NodeJS xử lý và các tác vụ này cũng được xử lý trên các luồng khác nhau
- Event Loop: là một vòng lặp vô tận, nó chuyển các yêu cầu đã nhận sang ThreadPool, đồng thời mỗi một yêu cầu cũng được tự động đăng ký một Callback, khi yêu cầuđược xử lý xong hàm Callback tương ứng sẽ được thực thi
2.2.2 Nguyên tắc hoạt động
Nguyên tắc hoạt động quan trọng nhất tạo nên khả năng xử lý với tốc độ cao của
NodeJS đến từ việc xử lý Non-Blocking Quá trình xử lý này cho phép NodeJS nhận và
xử lý đồng thời nhiều tác vụ thông qua duy nhất một luồng xử lý (Single thread) thay
vì tạo nhiều luồng xử lý tương ứng với các request ở các ngôn ngữ Server truyền thống
đã có Các tác vụ được nhận vào luồng xử lý nếu không được quy định tuần tự thực hiện (phải hoàn thành công việc A trước rồi sau đó bắt đầu thực hiện công việc công việc B) sẽ được cho phép truy cập tài nguyên song song lẫn nhau mà không bị khóa lại (Blocking) đợi tác vụ trước đó Từ đó mà những tác vụ diễn ra không liên quan đến nhau có thể xử lý song song độc lập với nhau, rút ngắn lượng lớn thời gian xử lý cho server NodeJS
Trang 31Kết hợp với xử lý quá trình xử lý Non-Blocking là Callbacks và Event Loop giúp cho NodeJS quản lý tất cả các tác vụ được được thực thi Cụ thể khi một tác vụ được xử lý Non-Blocking hoàn thành sẽ gửi về 1 Callback với ý nghĩa thông báo với hệ thống
rằng tác vụ đã thực hiện xong hoàn toàn Trước đó khi các tác vụ này được định nghĩa thì callback của từng tác vụ cũng đã được đưa vào Event Table để chờ các sự kiện
(Event) cho phép thực thi Khi Event mong chờ của tác vụ được diễn ra cũng là lúc các message của tác vụ đang chờ trong Event Table được di chuyển sang Event Queue chờ thực hiện theo nguyên tắc “đến trước thực hiện trước” (First In First Out - FIFO) Songsong với quá trình này là quá trình Event Loop thực hiện một vòng lặp vô tận kiểm tra
có message nào đang đợi trong Event Queue hay không và Thread Pool có đang thực hiện tác vụ nào hay không, nếu đồng thời có message đang chờ và Thread Pool có thể tiếp nhận tác vụ Event Loop sẽ đưa phần tử đầu tiên của Queue vào Thread Pool xử lý
và gửi về callback khi tất cả các message quy định callback tương ứng đã hoàn thành Nếu không còn message nào trong Event Queue vòng lặp Event Loop vẫn luôn luôn được chạy để kiểm tra và xử lý ngay khi có tác vụ chờ
Tổng thể với sự kết hợp giữa các đặc trưng tiêu biểu: Non-Blocking I/O, Callbacks, Event Loop một server NodeJS xử lý bất đồng bộ (asynchronous) các đồng bộ các tác
vụ được yêu cầu và trả về kết quả ngay khi các tác vụ được hoàn thành thông qua
callback Còn quá trình xử lý và phản hồi callback này được xử lý với sự điều phối, quản lý của vòng lặp vô tận xử lý sự kiện Event Loop lấy từng message của quy định callback thực hiện với tài nguyên hệ thống và phản hồi callback khi tất cả message quy định callback tương ứng đã hoàn thành
Trang 32Có được sự hỗ trợ từ các công cụ thông dụng tích hợp sẵn trong NodeJS Lập trình viên
có thể dễ dàng kiểm tra mã nguồn đã chạy đúng hay chưa với Jasmin trong việc tạo cácunit test Tương tự khi cài đặt những thư viện mới phục vụ cho dự án, Node package manage (npm) sẽ là công cụ hỗ trợ đắc lực
Trang 332.3 Cơ sở dữ liệu MySQL
2.3.1 Định nghĩa
MySQL là một hệ thống quản trị cơ sở dữ liệu mã nguồn mở (Relational Database
Management System, viết tắt là RDBMS) hoạt động theo mô hình client-server
RDBMS là một phần mềm hay dịch vụ dùng để tạo và quản lý các cơ sở dữ liệu
(Database) theo hình thức quản lý các mối liên hệ giữa chúng
Công ty Thuy Điển MySQL AB phát triển MySQL vào năm 1994 Công ty công nghệ
Mỹ Sun Microsystem sau đó giữ quyền sở hữu MySQL sau khi mua lại MySQL vào năm 2008 Năm 2010, gã khổng lồ Oracle mua Sun Microsystems và MySQL thuộc quyền sở hữu của Oracle từ đó
2.3.2 MySQL Server
MySQL Server là máy tính hay một hệ các máy tính cài đặt phần mềm MySQL dành cho server để lưu trữ dữ liệu, giúp máy khách có thể truy cập vào quản lý Dữ liệu này được đặt trong các bảng, và các bảng có mối liên hệ với nhau MySQL server nhanh,
an toàn, đáng tin cậy Phần mềm MySQL cũng miễn phí và được phát triển, phân phối
và hỗ trợ bởi Oracle Corporation
2.3.3 MySQL Client
MySQL client không hẵn phải cài phần mềm MySQL của Oracle mà là nói chung của mọi phần mềm có thể thực hiện truy vấn lên một MySQL server và nhận kết quả trả về.MySQL client điển hình là đoạn mã PHP script trên một máy tính hay trên cùng server dùng để kết nối tới cơ sở dữ liệu MySQL database Phpmyadmin cũng là một MySQL client có giao diện người dùng Một số công cụ miễn phí dùng làm MySQL là:
MySQL Workbench (Mac, Windows, Linux), Miễn phí, mã nguồn mở
Sequel Pro (Mac), miễn phí, mã nguồn mở
Trang 342.3.4 Cách thức hoạt động
Một máy client sẽ liên lạc với máy server trong một mạng nhất định Mỗi client có thể gửi một request từ giao diện người dùng (Graphical user interface – GUI) trên màn
hình, và server sẽ trả về kết quả như mong muốn
1) MySQL tạo ra bảng để lưu trữ dữ liệu, định nghĩa sự liên quan giữa các bảng đó
2) Client sẽ gửi yêu cầu SQL bằng một lệnh đặc biệt trên MySQL
3) Ứng dụng trên server sẽ phản hồi thông tin và trả về kết quả trên máy client
2.4 Docker
2.4.1 Khái niệm docker
Docker là một nền tảng để cung cấp cách để building, deploying và running ứng dụng
dễ dàng hơn bằng cách sử dụng các containers (trên nền tảng ảo hóa) Ban đầu viết
bằng Python, hiện tại đã chuyển sang Golang
Hình 3: Kiến trúc MySQL
Trang 352.4.2 Khái niệm container
Khi sử dụng docker, các lập trình viên có thể đóng gói các ứng dụng bao gồm cả nhữngthành phần cần thiết khác như các thư viện hoặc các dependencies thành 1 package Package này được gọi là container
2.4.3 Ưu điểm của Docker
Tính dễ ứng dụng : Docker rất dễ cho mọi người sử dụng từ lập trình viên, sys admin… nó tận dụng lợi thế của container để build, test nhanh chóng Có thể đóng gói ứng dụng trên laptop của họ và chạy trên public cloud, private cloud…
“Build once, run anywhere”
Tốc độ : Docker container rất nhẹ và nhanh, có thể tạo và chạy docker container trong vài giây
Môi trường chạy và khả năng mở rộng : Có thể chia nhỏ những chức năng của ứng dụng thành các container riêng lẻ Ví dụ Database chạy trên một container
và Redis cache có thể chạy trên một container khác trong khi ứng dụng Node.js lại chạy trên một cái khác nữa Với Docker, rất dễ để liên kết các container với nhau để tạo thành một ứng dụng, làm cho nó dễ dàng scale, update các thành phần độc lập với nhau
2.4.4 Các khái niệm liên quan
– Docker Engine: là thành phần chính của Docker, như một công cụ để đóng gói ứng dụng
– Docker Hub: là một “github for docker images” Trên DockerHub có hàng ngàn public images được tạo bởi cộng đồng cho phép bạn dễ dàng tìm thấy những image mà bạn cần Và chỉ cần pull về và sử dụng với một số config mà bạn
mong muốn
– Images: là một khuôn mẫu để tạo một container Thường thì image sẽ dựa trên 1image có sẵn với những tùy chỉnh thêm Ví dụ bạn build 1 image dựa trên image
Trang 36Centos mẫu có sẵn để chạy Nginx và những tùy chỉnh, cấu hình để ứng dụng web của bạn có thể chạy được Bạn có thể tự build một image riêng cho mình hoặc sử dụng những image được chia sẽ từ cộng đồng Docker Hub Một image
sẽ được build dựa trên những chỉ dẫn của Dockerfile
– Container: là một instance của một image Bạn có thể create, start, stop, move ordelete container dựa trên Docker API hoặc Docker CLI
– Docker Client: là một công cụ giúp người dùng giao tiếp với Docker host
– Docker Daemon: lắng nghe các yêu cầu từ Docker Client để quản lý các đối
tượng như Container, Image, Network và Volumes thông qua REST API Các Docker Daemon cũng giao tiếp với nhau để quản lý các Docker Service
– Dockerfile: là một tập tin bao gồm các chỉ dẫn để build một image
– Volumes: là phần dữ liệu được tạo ra khi container được khởi tạo
2.4.5 Quy trình hoạt động
Build
Đầu tiên tạo một dockerfile, trong dockerfile này chính là code của chúng ta
Dockerfile này sẽ được Build tại một máy tính đã cài đặt Docker Engine Sau khi build
ta sẽ có được Container, trong Container này chứa ứng dụng kèm bộ thư viện của
Trang 37Nếu một máy tính khác muốn sử dụng Container chúng ta thì bắt buộc máy phải thực hiện việc Pull container này về máy, tất nhiên máy này cũng phải cài Docker Engine
Sau đó thực hiện Run Container này
Hình 4: Kiến trúc Docker
Trang 38CHƯƠNG 3: KHẢO SÁT HIỆN TRẠNG VÀ XÁC ĐỊNH YÊU CẦU
3.1 Khảo sát hiện trạng
Với sự cạnh tranh của các trang website bán sản phẩm điện tử qua mạng ngày càng lớn,các trang web thay đổi về chức năng và cả giao diện để đáp ứng nhu cầu mua sắm của người dùng Nên các website liên quan đến sản phẩm hiện nay phải đáp ứng được về cảgiao diện đẹp, dễ tìm được sản phẩm mà người dùng cần và chức năng dễ sử dụng, tiệnlợi
Khảo sát hiện trạng của một số trang web tương tự trên thị trường:
Trang 393.1.1 Trang https://www.thegioididong.com/
Ưu điểm :
- Thanh menu đầy đủ yêu cầu, dễ dàng tìm kiếm theo nhiều từ khóa
- Trang giỏ hàng đầy đủ tính năng, cho người dùng có thể biết đầy đủ thông tin sản phẩm
- Cách phối màu hợp lý, đẹp
Hình 5: Giao diện thegioididong.com
Trang 40- Giao diện thân thiện với người dùng