Với ý tưởng này, nhóm tự tin sản phẩm sẽ là bước đi tiên phong, đột phá trong lĩnh vực thương mại điện tử vốn là sân chơi năng động nhiều cơ hội nhưng đầy tính cạnh trạnh khốc liệt; phục
Trang 1ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
TĂNG HOÀNG ÂN ĐẬU ĐỨC VIỆT ANH
KHÓA LUẬN TỐT NGHIỆP
MÔ HÌNH PICK UP LATER CHO TÒA NHÀ VĂN PHÒNG VÀ TRƯỜNG HỌC
Pickup Later Model for Office Buildings and Schools
KỸ SƯ/ CỬ NHÂN NGÀNH KỸ THUẬT PHẦN MỀM
TP HỒ CHÍ MINH, 2021
Trang 2ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
TĂNG HOÀNG ÂN – 16520020 ĐẬU ĐỨC VIỆT ANH – 16520029
KHÓA LUẬN TỐT NGHIỆP
MÔ HÌNH PICK UP LATER CHO TÒA NHÀ VĂN PHÒNG VÀ TRƯỜNG HỌC
Pickup Later Model for Office Buildings and Schools
KỸ SƯ/ CỬ NHÂN NGÀNH KỸ THUẬT PHẦN MỀM
GIẢNG VIÊN HƯỚNG DẪN ThS HOÀNG VĂN HÀ ThS NGUYỄN CÔNG HOAN
TP HỒ CHÍ MINH, 2021
Trang 3THÔNG TIN HỘI ĐỒNG CHẤM KHÓA LUẬN TỐT NGHIỆP
Hội đồng chấm khóa luận tốt nghiệp, thành lập theo Quyết định số ………
ngày ……… của Hiệu trưởng Trường Đại học Công nghệ Thông tin
Trang 4LỜI CẢM ƠN
Lời đầu tiên, chúng em xin gửi lời cảm ơn đến ban giám hiệu, quý thầy cô của Trường Đại
Học Công Nghệ Thông Tin, đặc biệt là các thầy cô trong Khoa Công nghệ Phần mềm đã
tận tình giảng dạy, trang bị cho chúng em những kiến thức cần thiết trong những năm tháng
học tập tại trường
Chúng em xin gửi lời cảm ơn đến thầy Hoàng Văn Hà, thầy Nguyễn Công Hoan đã tận
tình hướng dẫn và giúp đỡ trong suốt quá trình thực hiện luận văn để chúng em có thể hoàn
thành luận văn này
Cuối cùng, chúng em xin gửi lòng biết ơn sâu sắc đến cha mẹ, gia đình, các anh chị trong
Khoa Công nghệ Phần mềm đã tạo mọi điều kiện về vật chất, tinh thần, động viên, khích
lệ và hỗ trợ chúng em trong suốt thời gian qua Mặc dù đã cố gắng hoàn thành luận văn
với tất cả sự nổ lực, nhưng luận văn chắc chắn không tránh khỏi những thiếu sót, chúng
em kính mong nhận được những ý kiến đóng góp từ phía Hội đồng bảo vệ khóa luận nhằm
hoàn thiện những thiếu sót để hoàn thiện đề tài Chúng em xin chân thành cảm ơn!
TP Hồ Chí Minh, tháng 1 năm 2021
Sinh viên 1 (Ký tên và ghi rõ họ tên)
Tăng Hoàng Ân Sinh viên 2 (Ký tên và ghi rõ họ tên)
Đậu Đức Việt Anh
Trang 5MỤC LỤC
LỜI CẢM ƠN 4
DANH MỤC HÌNH 9
DANH MỤC BẢNG 10
Chương 1: TỔNG QUAN 1
1.1 Đặt vấn đề 1
1.2 Mục tiêu và phạm vi đề tài 1
1.2.1 Mục tiêu 1
1.2.2 Phạm vi đề tài 2
1.3 Đối tượng sử dụng 2
1.4 Phương thức thực hiện 2
1.5 Kết quả dự kiến 2
Chương 2 TÌM HIỂU VỀ MÔ HÌNH PICK UP LATER 4
2.1 - Giới thiệu về mô hình Pickup Later 4
2.2 - Sơ đồ mô hình Pickup Later 4
2.3 - Diễn giải sơ đồ 5
2.4 - Ưu điểm của mô hình 5
Chương 3 TÌM HIỂU VỀ VÍ ĐIỆN TỬ 6
3.1 Khái niệm 6
3.2 Lợi ích của ví điện tử 7
3.3 Chức năng của ví điện tử 7
3.4 Ưu điểm, nhược điểm của ví điện tử 8
3.4.1 Ưu điểm 8
3.4.2 Nhược điểm 9
3.5 Vai trò của ví điện tử 9
3.6 Áp dụng vào đề tài 10
Chương 4 CÁC CÔNG NGHỆ ÁP DỤNG 11
4.1 Go và Gin Framework 11
4.1.1 Go 11
4.1.2 Gin-gonic 13
4.1.3 Lý do sử dụng 13
4.1.4 Áp dụng vào đề tài 14
4.2 gRPC 14
Trang 64.2.1 RPC là gì? 14
4.2.2 Protobuf là gì? 16
4.2.3 gRPC là gì? 17
4.2.4 Áp dụng vào đề tài 18
4.3 PostgreSQL 18
4.3.1 PostgreSQL là gì? 18
4.3.2 Lý do sử dụng 19
4.3.3 Áp dụng vào đề tài 20
4.4 React 20
4.4.1 Giới thiệu 20
4.4.2 Khái niệm 20
4.4.3 Virtual DOM (DOM ảo) 20
4.4.4 JSX 21
4.4.5 One-way data binding 21
4.4.6 Component 22
4.4.7 Props và State 22
4.4.8 Áp dụng vào đề tài 23
4.5 React Native 23
4.5.1 Khái niệm 23
4.5.2 Các khái niệm liên quan cần biết 23
4.5.3 Ưu và nhược điểm của React Native 23
4.5.4 Áp dụng vào đề tài 24
4.6 MQTT 24
4.6.1 Giới thiệu về Message Queue 24
4.6.2 Giới thiệu về MQTT - Message Queuing Telemetry Transport 25
4.6.3 Vị trí của MQTT trong mô hình IoT 26
4.6.4 Tính năng và đặc điểm nổi bật 26
4.6.5 Ưu điểm của MQTT 26
4.6.6 - Cơ chế hoạt động 27
4.6.7 - Áp dụng vào đề tài 28
4.7 JWT 28
4.7.1 JWT là gì? 28
4.7.2 Khi nào nên dùng JSON Web Token? 29
Trang 74.7.2 Áp dụng vào đề tài 29
Chương 5 PHÁT BIỂU BÀI TOÁN 30
5.1 Giới thiệu về ứng dụng 30
5.2 Khảo sát các ứng dụng tương tự trên thị trường 30
5.2.1 Ứng dụng Utop 30
5.2.2 Ứng dụng The Coffee House 31
5.3.1 Yêu cầu chức năng 32
5.3.2 Yêu cầu phi chức năng 33
Chương 6 PHÂN TÍCH THIẾT KẾ HỆ THỐNG 34
6.1 Sơ đồ phân rã chức năng 34
6.2 Mô hình Use-case 35
6.2.1 Sơ đồ usecase 35
6.2.2 Danh sách người dùng 36
6.2.3 Danh sách các use-case 36
6.3 Các sơ đồ và luồng xử lý 37
6.3.1 Đăng nhập 37
6.3.2 Tìm kiếm sản phẩm 38
6.3.3 Quản lý giỏ hàng 38
6.3.4 Theo dõi đơn hàng 39
6.3.5 Quản lý sản phẩm 40
6.3.6 Quản lý danh mục 41
6.3.7 Thanh toán 43
6.3.8 Quản lý thực đơn 44
6.3.9 Quản lý khách hàng 45
6.3.10 Quản lý cửa hàng 46
6.3.11 Tìm kiếm cửa hàng mới 47
6.3.12 Đăng xuất 48
6.4 Thiết kế kiến trúc 49
6.4.1 Mô hình kiến trúc 49
6.4.2 Mô tả 49
6.5 Thiết kế cơ sở dữ liệu 50
6.5.1 Sơ đồ lớp 50
6.5.2 Tổng quan cơ sở dữ liệu 51
Trang 86.5.3 Mô tả chi tiết các class 51
6.6 Thiết kế giao diện 56
6.6.1 Trang chủ 56
6.6.2 Tìm kiếm 57
6.6.3 Danh sách sản phẩm 58
6.6.4 Chi tiết sản phẩm 59
6.6.5 Giỏ hàng 60
6.6.6 Thanh toán 61
6.6.7 Đăng nhập & tài khoản 62
6.6.8 Lịch sử mua hàng 63
6.6.9 Chi tiết đơn hàng 64
6.6.10 Danh sách đơn hàng (cửa hàng) 65
6.6.11 Chi tiết đơn hàng (cửa hàng) 66
Chương 7: KIỂM THỬ ỨNG DỤNG 67
7.1 Môi trường kiểm thử 67
7.1.1 Thiết bị iOS 67
7.1.2 Thiết bị Android 67
7.2 Thực thi kiểm thử 67
7.2.1 Kiểm thử giao diện 67
7.2.2 Kiểm thử chức năng 68
Chương 8: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 70
8.1 Kết luận 70
8.2 Hướng phát triển 70
TÀI LIỆU THAM KHẢO 71
Trang 9DANH MỤC HÌNH
Hình 2.1: Sơ đồ mô hình Pickup later
Hình 3.1: Mô hình ví điện tử
Hình 3.2: Một số chức năng chính của ví điện tử
Hình 3.3: Một số ví điện tử phổ biến hiện nay
Hình 4.1: Giới thiệu về Go
Hình 4.2: Biên dịch và thông dịch
Hình 4.3: Mô hình giao tiếp client -server trong RPC
Hình 4.4: So sánh kích thước và tốc độ của các kiểu dữ liệu
Hình 4.5: Sơ đồ gRPC
Hình 4.6: Các hệ quản trị cơ sở dữ liệu phổ biến hiện nay
Hình 4.7: Cơ chế cập nhật DOM của React
Hình 4.8: Data binding trong React
Hình 4.9: Một số điểm nổi bật của React Native
Hình 4.10: Các thành phần trong MQTT
Hình 4.11: Vị trí của MQTT trong hệ thống IoT
Hình 4.12: Mô hình publish và subcribe qua broker trong MQTT
Hình 6.24: Màn hình chi tiết đơn hàng
Hình 6.25: Màn hình danh sách đơn hàng (trên ứng dụng mobile)
Trang 10Bảng 6.6: Class order details
Bảng 6.7: Class order audits
Trang 11ăn thức uống
Mặt khác, mô hình cho thuê văn phòng theo dạng cao ốc, tập trung nhiều văn phòng công
ty trong một toà nhà cao tầng đã trở nên rất phổ biến, đặc biệt là ở các thành phố lớn Các toà nhà này có đặc thù là nhu cầu “ăn tiệm uống tiệm” của nhân viên làm việc bên trong rất cao, có một hoặc một vài quán ăn bên trong hoặc ngay dưới toà nhà để phục vụ nhu cầu trên Thông thường thì họ sẽ xuống những tiệm ăn này để xếp hàng đặt đồ ăn thức uống và
ăn tại chỗ hoặc đem đi Tuy nhiên, nếu mua đồ ăn thức uống theo hình thức truyền thống này sẽ có những điểm bất cập như tốn thời gian xếp hàng, không thể biết được tình trạng còn hàng/hết hàng của món ăn
Nhận thấy những tiền đề thực tiễn trên, nhóm đã có ý tưởng và quyết định hiện thực một
hệ thống cho phép người dùng lựa chọn và đặt món yêu thích, theo dõi đơn hàng thời gian thực; cho phép chủ cửa hàng xử lý đơn hàng nhanh chóng, thuận tiện, tạo và cài đặt thực đơn món ăn dễ dàng cùng với tính năng độc đáo chia sẻ giỏ hàng giữa nhiều thiết bị mà chưa hệ thống nào khác làm được tới thời điểm hiện tại
Với việc sử dụng những công nghệ mới và “thời thượng” như Golang, React, React Native, dịch vụ này sẽ đem lại những trải nghiệm tối ưu và tuyệt vời cho người dùng Với ý tưởng này, nhóm tự tin sản phẩm sẽ là bước đi tiên phong, đột phá trong lĩnh vực thương mại điện tử vốn là sân chơi năng động nhiều cơ hội nhưng đầy tính cạnh trạnh khốc liệt; phục
vụ cho một nhu cầu thực tiễn của xã hội với nhóm khách hàng cụ thể và đầy tiềm năng này
1.2 Mục tiêu và phạm vi đề tài
1.2.1 Mục tiêu
- Tìm hiểu mô hình pick up later
- Tìm hiểu về ví điện tử (e-wallet)
- Tìm hiểu về Golang và framework Gin-gonic
- Tìm hiểu về ReactJS
- Tìm hiểu về React Native
Trang 122
- Tìm hiểu về PostgreSQL
- Xây dựng ứng dụng tìm kiếm và đặt các món ăn trên nền tảng web
- Xây dựng hệ thống quản lý các món ăn, đơn hàng theo thời gian thực
- Có khả năng thực hiện các chương trình khuyến mãi, giảm giá trên các món ăn
- Khắc phục các hạn chế như: chờ đợi đơn hàng xử lý quá lâu, bom hàng, chủ động thời gian để nhận đơn hàng
- Công cụ để tìm kiếm những quán ăn mới trong khu vực lân cận theo một số tiêu chí
+ Tìm kiếm các món ăn và đặt hàng (cá nhân hoặc theo nhóm)
+ Theo dõi tình trạng đơn hàng theo thời gian thực
- Xây dựng web server bằng Golang với framework Gin-gonic
- Xây dựng web client bằng ReactJS
- Xây dựng app mobile bằng React Native
- Database xây dựng bằng PostgreSQL
- Tích hợp thanh toán bằng ví điện tử
1.5 Kết quả dự kiến
- Hoàn thành ứng dụng trên nền tảng web, cung cấp các chức năng cho phép khách hàng có thể lựa chọn những món ăn yêu thích, và theo dõi trạng thái của các đơn hàng đã đặt
Trang 133
- Thanh toán qua ví điện tử một cách nhanh chóng, tiện lợi
- Xây dựng trang quản lý trên nền tảng web, cung cấp các chức năng cho phép chủ cửa hàng thiết lập thực đơn, quản lý các sản phẩm, đơn hàng
- Xây dựng ứng dụng mobile giúp chủ cửa hàng quản lý các đơn hàng theo thời gian thực
- Công cụ tìm kiếm các quán ăn mới trong khu vực lân cận
Trang 144
Chương 2 TÌM HIỂU VỀ MÔ HÌNH PICK UP LATER
2.1 - Giới thiệu về mô hình Pickup Later
• Như đã đề cập ở chương “Tổng quan”, hiện nay các cao ốc toà nhà văn phòng rất phổ biến với đặc thù là nhu cầu ăn uống tiệm của nhân viên làm việc bên trong rất cao Những toà nhà này thường có một vài quán ăn để phục vụ nhu cầu ăn uống của nhân viên văn phòng Thông thường, họ sẽ xuống những tiệm ăn này để xếp hàng mua đồ ăn thức uống Tuy nhiên, hình thức truyền thống này có những điểm bất cập như tốn thời gian xếp hàng để order, không thể biết được tình trạng còn hàng/hết hàng của món ăn và xảy ra tình trạng thời gian chết trong lúc đợi cửa hàng chuẩn bị món
• Từ những lý do trên, mô hình Pickup Later ra đời với việc cho phép khách hàng đặt hàng từ xa trên web / mobile app và tới quầy nhận món sau khi món đã được cửa tiệm chuẩn bị
2.2 - Sơ đồ mô hình Pickup Later
Hình 2.1: Sơ đồ mô hình Pickup later 1
1 Sơ đồ mô hình Pickup later nhóm triển khai
Trang 155
2.3 - Diễn giải sơ đồ
Bước 1, 2 và 3: Người dùng phát sinh nhu cầu ăn uống Lúc này thay vì đi xuống cửa tiệm
để chọn món và xếp hàng thanh toán, họ có thể truy cập web app Pickup Later và chọn
món ngay trên điện thoại của mình, đồng thời biết được tình trạng còn hàng/hết hàng của
món
Bước 4: Người dùng chốt món (giỏ hàng) bằng cách đặt đơn trên web app Có thể lựa chọn
hình thức thanh toán khi nhận hàng COD hoặc thanh toán trực tuyến bằng ví điện tử MoMo
Bước 5: Chủ cửa hàng sẽ nhận được đơn hàng ngay sau khi khách hàng đặt đơn (cập nhật
danh sách đơn hàng thời gian thực)
Bước 6: Cửa hàng sẽ phản hồi đơn hàng này theo 1 trong 2 cách:
- Xác nhận đơn: tiếp tục thực hiện và hoàn thành đơn Sau bước này, đơn hàng sẽ
không thể huỷ nữa
- Huỷ đơn: Không thực hiện đơn nữa và báo cho khách hàng biết Cửa hàng phải nêu
rõ lý do huỷ đơn
Bước 7: Sau khi đã xác nhận đơn hàng, cửa hàng sẽ tiến hành chuẩn bị món cho đơn
Bước 8: Sau đơn hàng đã được chuẩn bị, cửa hàng sẽ đánh dấu đơn hàng là sẵn sàng giao
và thông báo cho khách xuống lấy bằng tin nhắn SMS gửi đến số điện thoại đã đăng nhập
của khách
Bước 9: Khách hàng tới quầy thanh toán (nếu chọn hình thức thanh toán là COD) và nhận
món Đơn hàng hoàn tất
2.4 - Ưu điểm của mô hình
• Tiết kiệm thời gian ở công đoạn chờ chuẩn bị món Khách hàng có thể tiếp tục
công việc của mình trong lúc chờ cửa hàng chuẩn bị đơn hàng
• Loại bỏ được công đoạn xếp hàng để được order ở cửa tiệm Khách hàng khi
xuống cửa tiệm sẽ nhận được món ngay lập tức vì món đã được chuẩn bị trước đó
• Loại bỏ được tình trạng xuống tận nơi mới biết là món đã hết (out of stock)
• Nhiều sự lựa chọn và thuận tiện hơn cho khách hàng: Khách hàng có thể dễ dàng
lướt thực đơn online và lựa chọn món yêu thích hơn là ở cửa tiệm
Trang 166
Chương 3 TÌM HIỂU VỀ VÍ ĐIỆN TỬ
3.1 Khái niệm
- Ví điện tử trong tiếng Anh là Digital wallet hoặc e-Wallet
- Ví điện tử ban đầu được hình thành từ ý tưởng giống như một chiếc ví vật lý bình thường, nhưng chứa đựng bên trong không phải là tiền mặt hay tiền gửi ngân hàng,
mà là tiền điện tử
- Về sau, ví điện tử phát triển theo hướng là một dạng dịch vụ bảo mật lưu trữ và sử dụng thông tin thanh toán cho một cá nhân dùng với nhiều cổng thanh toán, nhiều phương thức thanh toán khác nhau Cụ thể hơn, ví điện tử là nơi khách hàng lưu lại cách thanh toán để sử dụng lại, như là lưu lại tài khoản ngân hàng, mã thẻ ngân hàng, mật khẩu tài khoản, hay có thể trữ một lượng tiền nhất định, từ đó thanh toán
dễ dàng mà không cần phải nhập theo từng bước như thanh toán ngân hàng
- Thông qua ví điện tử, người dùng hoàn tất thanh toán bằng cách giao dịch trực tuyến thông qua internet, hoặc giao dịch ngoại tuyến thông qua công nghệ NFC (near-field communications - kết nối tầm ngắn)
Hình 3.1: Mô hình ví điện tử 2
2
https://www.researchgate.net/figure/Architecture-of-e-wallet-1-User-login-their-account-using-their-ID-and-PIN-2-Choose_fig3_290462723
Trang 177
3.2 Lợi ích của ví điện tử
- Ví điện tử giúp cho vấn đề thanh toán đơn giản hơn, mất ít thời gian hơn
+ Việc giao dịch trong đời sống hàng ngày đang khuyến khích việc thanh toán không dùng tiền mặt, từ các cá nhân, cửa hàng, hay ngay cả các chính phủ Ví điện tử vì thế ngày càng phổ biến
+ Bên cạnh đó, ví điện tử giúp bạn khi đến các cửa hàng, quán ăn mà không cần
lo về việc mang thiếu tiền, để tiền rơi, bị mất cắp
- Ví điện tử tương đối dễ sử dụng:
+ Việc mở tài khoản ví điện tử và liên kết là tương đối dễ dàng
+ Thanh toán thông qua ví điện tử cũng rất đơn giản, bớt phức tạp hơn và nhanh chóng hơn so với việc sử dụng tài khoản ngân hàng hay thẻ ngân hàng
- Ví điện tử tích hợp được nhiều dịch vụ
+ Là một sản phẩm phần mềm, ví điện tử dễ dàng triển khai được các dịch vụ khác của bên thứ ba như đặt vé xe, vé xem phim, nạp tiền điện thoại, Các ví điện tử hiện nay đều hướng tới việc phát triển thành một "siêu ứng dụng" gồm một hệ sinh thái đầy đủ chức năng
+ Ngoài ra, việc dùng ví điện tử để thanh toán và sử dụng dịch vụ sẽ được các nhà cung cấp tặng thêm nhiều ưu đãi, khuyến mại nhằm tri ân, thu hút và mở rộng mạng lưới khách hàng sử dụng
3.3 Chức năng của ví điện tử
- Nhận tiền, chuyển tiền, nạp tiền:
+ Người dùng có thể nhận hoặc chuyển tiền trực tiếp trên ứng dụng ví mà không phải tới ngân hàng để thực hiện nhiều thủ tục phức tạp
+ Dễ dàng nạp tiền từ tài khoản ngân hàng liên kết mà không chịu phí phát sinh
- Thanh toán hóa đơn trực tuyến:
Trang 188
+ Với việc sử dụng ví điện tử, mỗi khi đi ăn uống, shopping hoặc thực hiện bất cứ giao dịch nào Bạn cũng có thể thanh toán ngay qua ứng dụng ví đã cài đặt trong điện thoại của mình
+ Thanh toán các hóa đơn, các dạng hợp đồng vay tín dụng ngay khi sử dụng ví điện tử
- Quản lý tài chính cá nhân online:
+ Khi sử dụng các ứng dụng ví online, bạn sẽ hạn chế được việc phải dùng tiền mặt để lưu thông
+ Kiểm tra số tiền trong ví mọi lúc mọi nơi khi có kết nối internet
Hình 3.2: Một số chức năng chính của ví điện tử 3
3.4 Ưu điểm, nhược điểm của ví điện tử
3.4.1 Ưu điểm
- Thao tác thực hiện dễ dàng, nhanh chóng
- Tiết kiệm thời gian
- Dễ dàng nhận và chuyển tiền
- Ứng dụng mang lại sự tiện lợi, nhanh gọn lẹ
- Giao dịch an toàn
- Khách hàng chủ động nắm được thông tin tài khoản của mình
- Hạn chế sự phụ thuộc vào tiền mặt và thẻ
- Có nhiều ưu đãi, khuyến mãi cho khách hàng
3 https://www.trainghiemhay.com/2019/06/vi-ien-tu-la-gi-cac-loai-vi-ien-tu-tot.html
Trang 199
3.4.2 Nhược điểm
Nhiều ưu điểm là thế tuy nhiên ví điện tử vẫn còn tồn tại những nhược điểm mà bạn nên biết trước khi sử dụng:
- Hệ thống bảo mật thông tin của người dùng còn hạn chế
- Nếu thông tin bị lộ rất có thể sẽ bị mất tài khoản
- Nhiều nơi vẫn chưa nhận áp dụng thanh toán bằng ví điện tử
3.5 Vai trò của ví điện tử
- Ví điện tử thực hiện thanh toán qua internet một cách nhanh chóng nên tiết kiệm được chi phí thời gian đi lại rất nhiều
- Nhờ việc giao dịch thanh toán dễ dàng nên ví điện tử kích cầu các hoạt động mua bán trực tuyến mạnh hơn rất nhiều
- Giảm được rủi ro lạm phát hơn khi dùng tiền mặt
- Giảm bớt các giao dịch thông qua thẻ ngân hàng
- Mang đến cho những khách hàng cá nhân sự tiện lợi và an toàn
- Khách hàng có thể truy vấn thông tin về tài khoản của mình mọi lúc mọi nơi thông qua internet nên dễ dàng theo dõi và kiểm soát chi tiêu, biến động số
dư tài khoản nhanh chóng
Hình 3.3: Một số ví điện tử phổ biến hiện nay 4
4 https://meta.vn/hotro/vi-dien-tu-la-gi-cac-vi-dien-tu-pho-bien-o-viet-nam-7294
Trang 2010
3.6 Áp dụng vào đề tài
Với những ưu điểm và sự phát triển của ví điện tử ngày này, đặc biệt trong thời gian
dịch bệnh Covid, nhóm quyết định tích hợp ví điện tử Momo để thanh toán các đơn
hàng nhằm nâng cao trải nghiệm của người dùng, giúp người dùng có nhiều lựa chọn
để thanh toán và một phần nào đó hạn chế tình trạng bom hàng
Trang 21dễ dàng xây dựng phần mềm đơn giản, đáng tin cậy và hiệu quả
- Go có cú pháp giống với C và là ngôn ngữ lập trình biên dịch (compiled programming language)
Hình 4.1: Giới thiệu về Go 5
- Go ra mắt phiên bản đầu tiên vào ngày 10 tháng 11 năm 2009 Go được thiết kế, phát triển với khả năng xử lý đa luồng được chú trọng hàng đầu Go đưa ra 2 tính năng hỗ trợ concurrency rất mạnh đó là goroutine và channel:
+ Goroutine có ngăn xếp phân khúc có thể mở rộng (growable segmented stacks) Điều này có nghĩa là nó sẽ sử dụng nhiều bộ nhớ RAM hơn nếu điều đó là cần thiết
5 https://blog.golang.org/
Trang 2212
+ Goroutines có thời gian khởi động nhanh hơn là threads
+ Goroutines có các channel và giữa các channel này có thể giao tiếp với nhau + Goroutines có khóa mutex (mutex locking) để đảm bảo việc đọc và ghi vào một cấu trúc dữ liệu hay một biến chung không xảy ra xung đột
- Go giao tiếp trực tiếp với vi xử lý bằng mã nhị phân (binaries)
Hình 4.2: Biên dịch và thông dịch 6
Một số đặc điểm nổi bật của Golang:
● Go là ngôn ngữ lập trình biên soạn (compiled language) Phần mềm viết bởi Go cần được biên soạn sử dụng Go compile trước khi có thể chạy được
● Go có cú pháp tương tự như C
● Go là một ngôn ngữ lập trình kiểu tĩnh (hay static type), các biến hoặc dữ liệu trong
Golang sẽ không thay đổi trong suốt chương trình
● Golang hỗ trợ xử lý đa luồng multi-threading
● Golang hỗ trợ tính năng quản lý bộ nhớ mạnh mẽ
● Golang sở hữu một bộ thư viện phong phú mà lập trình viên có thể tận dụng
● Golang nhỏ gọn và đơn giản
6 https://topdev.vn/blog/golang-la-gi-va-tai-sao-ban-nen-hoc-go
Trang 23+ + Gin gonic có thể thêm middlewares, xác thực JSON, … nhưng nó vẫn duy trì hiệu suất tối ưu của nó Gin Gonic sử dụng httprouter, bộ định tuyến HTTP nhanh nhất cho Go
4.1.3 Lý do sử dụng
Một số đặc điểm quan trọng mà Go rất đáng để nghiên cứu và sử dụng đó là:
- Tiện lợi: Go được so sánh với các scripting language (ngôn ngữ kịch bản) với khả năng đáp ứng nhiều nhu cầu lập trình phổ biến Một số tính năng này được tích hợp vào trong chính ngôn ngữ Go cung cấp khả năng quản lý bộ nhớ tự động bao gồm việc garbage collection (dọn file rác)
- Khả năng tương thích: Go là ngôn ngữ biên lập trình biên dịch, nhưng thay vì biên dịch ra bytecode như Java thì Go biên dịch ra mã máy (machine code) nên có thể chạy ngay với hệ điều hành biên dịch ra mà không cần cài đặt gì thêm Đối với các
hệ điều hành khác nhau như Window, Mac OS hay Linux, sau khi biên dịch chỉ cần
1 file duy nhất, copy đến hệ điều hành đích là chạy, rất đơn giản
- Tốc độ xử lý nhanh: Như đã đề cập ở trên, Go là ngôn ngữ lập trình biên dịch ra mã máy (dưới dạng các bit nhị phân), do đó Go có hiệu suất tốt
- Concurrency và goroutine: Concurrency là tính năng chủ lực của ngôn ngữ lập trình
Go để tận dụng năng lực xử lý của CPU Thông thường các ngôn ngữ lâp trình khác phải phụ thuộc sự cấp phát tài nguyên của hệ điều hành để có thể chạy concurrency, trong khi đó Go có thể chạy concurrency mà không phụ thuộc hệ điều hành Với
Go, khi việc sử dụng bộ vi xử lý multi-core khả thi, goroutines hoàn toàn có thể thay thế được thread Mỗi goroutines chỉ sử dụng 2KB bộ nhớ từ heap (thay vì xấp
xỉ 1MB như Java), như vậy bạn có thể tạo ra hàng triệu goroutines bất kỳ lúc nào
Trang 244.2 gRPC
4.2.1 RPC là gì?
- RPC - Remote Procedure Call là kỹ thuật cho phép chúng ta gọi hàm từ một process khác nằm cùng một máy hoặc ở hai máy tính khác nhau Mục tiêu chính của phương pháp này là giúp lời gọi RPC tương tự như lời gọi thủ tục thông thường và ẩn đi phần xử lý kết nối mạng phức tạp
- RPC có thể được xem là một giao thức request-response thông thường tuy nhiên nó được dùng cho việc giao tiếp giữa các server với nhau (server-server) nhiều hơn là client-server
Hình 4.3: Mô hình giao tiếp client -server trong RPC 7
7 https://zalopay-oss.github.io/go-advanced/ch3-rpc/ch3-01-rpc-go.html
Trang 2515
Mô tả sơ đồ:
- Phần Client là một quá trình người dùng, nơi khởi tạo một lời gọi thủ tục từ xa Mỗi lời gọi thủ tục ở xa trên phần Client sẽ kích hoạt một thủ tục cục bộ tương ứng nằm trong phần Stub của Client
- Phần Client Stub cung cấp các hàm cục bộ mà phần Client có thể gọi Mỗi một hàm của Client Stub đại diện cho một hàm ở xa được cài đặt và thực thi trên Server
- Mỗi khi một hàm nào đó của Client Stub được gọi bởi Client, Client Stub sẽ đóng gói một thông điệp để mô tả về thủ tục ở xa tương ứng mà Client muốn thực thi cùng với các tham số nếu có Sau đó nó sẽ nhờ hệ thống RPC Runtime cục bộ gửi thông điệp này đến phần Server Stub của Server
- Phần RPC Runtime quản lý việc truyền thông điệp thông qua mạng giữa máy Client
và máy Server Nó đảm nhận việc truyền lại, báo nhận, chọn đường gói tin và mã hóa thông tin
- RPC Runtime trên máy Client nhận thông điệp yêu cầu từ Client Stub, gửi nó cho RPC Runtime trên máy Server bằng lệnh send() Sau đó gọi lệnh wait() để chờ kết quả trả về từ Server
- Khi nhận được thông điệp từ RPC Runtime của Client gửi sang, RPC Runtime bên phía server chuyển thông điệp lên phần Server Stub
- Server Stub mở thông điệp ra xem, xác định hàm ở xa mà Client muốn thực hiện cùng với các tham số của nó Server Stub gọi một thủ tục tương ứng nằm trên phần Server
- Khi nhận được yêu cầu của Server Sub, Server cho thực thi thủ tục được yêu cầu và gửi kết quả thực thi được cho Server Stub
- Server Stub đóng gói kết quả thực trong một gói tin trả lời, chuyển cho phần RPC Runtime cục bộ để nó gửi sang RPC Runtime của Client
- RPC Runtime bên phía Client chuyển gói tin trả lời nhận được cho phần Client Stub Client Stub mở thông điệp chứa kết quả thực thi về cho Client tại vị trí phát ra lời gọi thủ tục xa
- Trong các thành phần trên, RPC Runtime được cung cấp bởi hệ thống Client Stub
và Server Stub có thể tạo ra thủ công (phải lập trình) hay có thể tạo ra bằng các công
cụ cung cấp bởi hệ thống
Trang 2616
4.2.2 Protobuf là gì?
- Protobuf hay Protocols Buffer là một ngôn ngữ dùng để mô tả các cấu trúc dữ liệu,
chúng ta dùng protoc để biên dịch chúng thành mã nguồn của các ngôn ngữ lập trình
khác nhau có chức năng serialize và deserialize các cấu trúc dữ liệu này thành dạng
binary stream So với dạng XML hoặc JSON thì dữ liệu đó nhỏ gọn gấp 3-10 lần
và được xử lý rất nhanh
- Protobuf rất hữu ích trong việc phát triển các chương trình để giao tiếp với nhau
qua một wire hoặc để lưu trữ dữ liệu Tất cả những gì cần làm là chỉ định một thông
báo cho từng cấu trúc dữ liệu cần Serialize bằng cách sử dụng file đặc tả proto.Khi
làm việc với Protobuf, bạn định nghĩa các data được cấu trúc như thế nào, sau đó
thì Proto Compiler sẽ biên dịch ra mã nguồn tùy theo ngôn ngữ mà các bạn sử dụng,
không như JSON được sử dụng rộng rãi mà mọi ngôn ngữ đều có thể áp dụng một
tiêu chuẩn chung còn Protobuf là hàng nội bộ của Google nên chỉ Google mới có
thể tạo ra những driver cho từng ngôn ngữ
- Protobuf rất phù hợp để làm ngôn ngữ giao tiếp giữa các server
Hình 4.4: So sánh kích thước và tốc độ của các kiểu dữ liệu 8
8 https://zalopay-oss.github.io/go-advanced/ch3-rpc/ch3-02-pb-intro.html
Trang 27- Ưu điểm chính của gRPC là nó có thể được hiểu bởi nhiều ngôn ngữ lập trình và Protocol Buffers cung cấp một cấu trúc dữ liệu chung Vì vậy, sự kết hợp này cho phép truyền thông liền mạch giữa các stack công nghệ và hệ thống khác nhau
- GRPC có các lợi ích sau so với kiến trúc HTTP/REST/JSON truyền thống:
+ GRPC sử dụng HTTP/2 là giao thức nhị phân
+ Nén header trong HTTP/2, có nghĩa là ít chi phí hơn
+ Ghép nhiều yêu cầu trên một kết nối
+ Sử dụng sự nghiêm ngặt của protobufs cho dữ liệu
+ Streaming các request hoặc response thay vì giao dịch (transactions) request/response
Hình 4.5: Sơ đồ gRPC 9
9 https://thongthele.blogspot.com/2019/01/lam-viec-voi-protocol-buffers-va-grpc.html
Trang 2818
4.2.4 Áp dụng vào đề tài
Với những ưu điểm của gRPC, nhóm quyết định xây dựng một service Payment Gateway dùng để thanh toán các đơn hàng qua ví điện tử Web server sẽ giao tiếp với Payment Gateway bằng gRPC, qua đó giúp chuyên biệt từng service với mỗi chức năng khác nhau
mà vẫn đảm bảo tốc độ xử lý, bên cạnh đó còn giúp dễ dàng phát triển từng service riêng biệt
4.3 PostgreSQL
4.3.1 PostgreSQL là gì?
PostgreSQL là hệ thống quản trị cơ sở dữ liệu quan hệ-đối tượng (object-relational database management system), là hệ thống cơ sở dữ liệu mã nguồn mở tiên tiến nhất hiện nay PostgreSQL Phát triển bởi: PostgreSQL Global Development Group, phát hành lần đầu vào ngày 08/07/1996:
● PostgreSQL được thiết kế để chạy trên các nền tảng tương tự UNIX Tuy nhiên, PostgreSQL sau đó cũng được điều chỉnh linh động để có thể chạy được trên nhiều nền tảng khác nhau như Mac OS X, Solaris và Windows
● PostgreSQL là một phần mềm mã nguồn mở miễn phí Mã nguồn của phần mềm khả dụng theo license của PostgreSQL, một license nguồn mở tự do Theo đó, bạn
sẽ được tự do sử dụng, sửa đổi và phân phối PostgreSQL dưới mọi hình thức
● PostgreSQL không yêu cầu quá nhiều công tác bảo trì bởi có tính ổn định cao Do
đó, nếu bạn phát triển các ứng dụng dựa trên PostgreSQL, chi phí sở hữu sẽ thấp hơn so với các hệ thống quản trị dữ liệu khác
PostgreSQL được xây dựng theo chuẩn SQL99 và có nhiều đặc điểm hiện đại:
● Câu truy vấn phức hợp (complex query)
● Khóa ngoại (foreign key)
● Thủ tục sự kiện (trigger)
● Các khung nhìn (view)
● Tính toàn vẹn của các giao dịch (integrity transactions)
● Việc kiểm tra truy cập đồng thời đa phiên bản (multiversion concurrency control)
Trang 29- Bảo mật dữ liệu, an toàn
- Toàn vẹn dữ liệu: Ràng buộc loại từ, Primary Keys, Foreign Keys, UNIQUE, NOT NULL, Khóa khuyến nghị/ Advisory Locks, Khóa hàm số/ Explicit Locks,…
- Kiểu dữ liệu đa dạng: nguyên hàm (các nguyên số, boolean, số, chuỗi), cấu trúc (UUID, Phạm vi, Array, Datetime, JSON)
- Mã nguồn mở và miễn phí
- Phù hợp với Golang để xử lý dữ liệu thông qua thư viện GORM
*Giới thiệu về GORM:
GORM là thư viện ORM tuyệt vời cho Golang Nó là một thư viện ORM để xử lý với quan
hệ cơ sở dữ liệu Thư viện Gorm này được phát triển trên các package cơ sở dữ liệu/SQL, với một số tính năng chính như là:
10 https://www.enterprisedb.com/blog/get-your-postgresql-12-now
Trang 3020
- Full-Featured ORM (almost)
- Associations (has one, has many, belongs to, many too many, polymorphism)
- Callbacks (Before/After Create/Save/Update/Delete/Find)
- Preloading (eager loading)
Ứng dụng có server sử dụng Postgres để lưu trữ dữ liệu, dữ liệu được hệ quản trị cơ sở dữ liệu PostgreSQL trả về cho người dùng dưới dạng JSON
4.4 React
4.4.1 Giới thiệu
React (hay ReactJS) là một thư viện JavaScript đang nổi lên trong những năm gần đây với
xu hướng Single Page Application (SPA) Trong khi những framework khác cố gắng hướng đến một mô hình MVC hoàn thiện thì React nổi bật với sự đơn giản và dễ dàng phối hợp với những thư viện JavaScript khác
4.4.2 Khái niệm
- React là một thư viện UI được phát triển tại Facebook để hỗ trợ việc xây dựng những thành phần (components) UI có tính tương tác cao, có trạng thái và có thể sử dụng lại được React được sử dụng tại Facebook trong production, và www.instagram.com được viết hoàn toàn trên React
- React so sánh sự thay đổi giữa các giá trị của lần render này với lần render trước và cập nhật ít thay đổi nhất trên DOM Trước khi đến cài đặt và cấu hình, chúng ta sẽ
đi đến một số khái niệm cơ bản sau đây
4.4.3 Virtual DOM (DOM ảo)
Công nghệ DOM ảo giúp tăng hiệu năng cho ứng dụng Việc chỉ node gốc mới có trạng thái và khi nó thay đổi sẽ tái cấu trúc lại toàn bộ, đồng nghĩa với việc DOM tree cũng sẽ phải thay đổi một phần, điều này sẽ ảnh hưởng đến tốc độ xử lý React sử dụng DOM ảo
để cải thiện vấn đề này DOM ảo là một JavaScript object, mỗi object chứa đầy đủ thông
Trang 3121
tin cần thiết để tạo ra một DOM, khi dữ liệu thay đổi nó sẽ tính toán sự thay đổi giữa object
và DOM thật Điều này giúp trang web sẽ không load lại từ đầu mà chỉ thay đổi ở thành
phần cần được thay đổi, dẫn đến trang web sẽ hoạt động nhanh hơn và phía server cũng đỡ mất công phải query lại các dữ liệu của những thành phần khác
Hình 4.7: Cơ chế cập nhật DOM của React 11
4.4.4 JSX
JSX là viết tắt của JavaScript XML, là một dạng ngôn ngữ cho phép viết các mã HTML trong JavaScript Nó giúp người lập trình có thể code React bằng cú pháp của XML thay
vì sử dụng JavaScript
4.4.5 One-way data binding
Dữ liệu trong React hoàn toàn đi theo 1 chiều và được truyền từ components cha xuống components con thông qua props (về khái niệm props sẽ được giải thích sau)
11 https://techmaster.vn/posts/34344/react-dom-ao
Trang 3222
Hình 4.8: Data binding trong React 12
Điều này dẫn tới việc sau này trang web sẽ hoạt động 1 cách khoa học và dễ dàng bảo trì hay nâng cấp tính năng Với đặc điểm này thì React dễ dàng cho việc xây dựng các trang web với lượng người dùng cũng như dữ liệu lớn
4.4.6 Component
React được xây dựng xung quanh các component, chứ không dùng rendering template như các framework khác Trong React, chúng ta xây dựng trang web sử dụng những thành phần (component) nhỏ Chúng ta có thể tái sử dụng một component ở nhiều nơi, với các trạng thái hoặc các thuộc tính khác nhau, trong một component lại có thể chứa các component khác Mỗi component trong React có một trạng thái riêng, có thể thay đổi, và React sẽ thực hiện cập nhật component dựa trên những thay đổi của trạng thái Mọi thứ React đều là component Chúng giúp bảo trì mã code khi làm việc với các dự án lớn Một react component đơn giản chỉ cần một method render Có rất nhiều method khả dụng khác, nhưng render là method chủ đạo
4.4.7 Props và State
- Props: giúp các component tương tác với nhau, component nhận input gọi là props,
và trả thuộc tính mô tả những gì component con sẽ render Props là bất biến
- State: thể hiện trạng thái của ứng dụng, khi state thay đổi thì component đồng thời render lại để cập nhật UI
12 https://viblo.asia/p/gioi-thieu-ve-reactjs-phan-i-cac-khai-niem-co-ban-V3m5WzjblO7
Trang 3323
4.4.8 Áp dụng vào đề tài
Yêu cầu của nhóm đối với web app đặt hàng phải là một SPA (Single Page Application)
có tốc độ nhanh, phản hồi tốt, được chia nhỏ thành nhiều thành phần (component) con có khả năng tái sử dụng và tuỳ biến cao
Với những ưu điểm của React, nhóm quyết định sử dụng thư viện này để xây dựng UI cho web app đặt món vì nó rất phù hợp với những yêu cầu phía trên của nhóm
- Facebook, Instagram, Skype, là các ứng dụng di động nổi bật sử dụng React Native
- Sự ra đời của React Native là lời giải cho bài toán liên quan đến hiệu năng Hybrid
và sự phức tạp khi phải viết nhiều loại ngôn ngữ native cho từng nền tảng di động trước đó
4.5.2 Các khái niệm liên quan cần biết
- Native App: Là tên gọi dành cho những ứng dụng được phát triển bằng ngôn ngữ lập trình và công cụ do chính nhà phát hành hệ điều hành/nền tảng đó cung cấp cho developer Cụ thể ở đây là Apple (iOS) và Google (Android)
- Hybrid App: Ứng dụng hybrid thực tế là ứng dụng native và ứng dụng web được kết hợp với nhau, có thể hoạt động trên nhiều hệ điều hành như iOS, Android, Windows,… Chúng trông giống như một ứng dụng native nhưng thực sự được chạy trên website của công ty Chúng được tạo ra bằng HTML5, CSS và JavaScript, về
cơ bản là một chương trình dựa trên web đặt trong một vỏ ứng dụng native
4.5.3 Ưu và nhược điểm của React Native
Ưu điểm:
- Sử dụng ít native code hơn
- Thời gian phát triển ứng dụng được rút ngắn
- Tiết kiệm chi phí nhân lực cho doanh nghiệp
- Khả năng tái sử dụng code cao (75% – 80%)
Trang 3424
- Trải nghiệm người dùng rất tốt
- Không cần nhiều kiến thức nền
Nhược điểm:
- Chỉ hỗ trợ 2 nền tảng Android và iOS
- Hiệu năng sẽ thấp hơn với ứng dụng thuần native code
- Bảo mật không cao
- Có một số thư viện cần trả phí
- Khả năng tùy biến không thực sự tốt với một vài module
Hình 4.9: Một số điểm nổi bật của React Native 13
4.5.4 Áp dụng vào đề tài
Với ưu điểm có thể xây dựng ứng dụng di động native đa nền tảng nhanh, tiện lợi, thân thiện với lập trình viên JavaScript, nhóm quyết định áp dụng công nghệ này để xây dựng ứng dụng xử lý đơn hàng trên điện thoại dành cho merchant
4.6 MQTT
4.6.1 Giới thiệu về Message Queue
Message queue là một hộp thư, cho phép các thành phần/service trong một hệ thống (hoặc nhiều hệ thống) gửi thông tin cho nhau Sở dĩ gọi nó là queue (hàng đợi) vì nó thực hiện việc lấy message theo cơ chế FIFO – First In First Out, tức là vào trước thì ra trước
13 https://www.angularminds.com/blog/article/react-native-features.html
Trang 3525
Một hệ thống sử dụng Message Queue thường có những thành phần sau đây:
- Message: Thông tin được gửi đi (có thể là text, binary hoặc JSON)
- Message Queue: Nơi chứa những message này, cho phép producer và consumer có
thể trao đổi với nhau
- Producer (hay Publisher): Chương trình/service tạo ra thông tin, đưa thông tin vào
message queue
- Consumer: Chương trình/service nhận message từ message queue và xử lý
Một chương trình/service có thể vừa là producer, vừa là consumer
Hình 4.10: Các thành phần trong MQTT 14
4.6.2 Giới thiệu về MQTT - Message Queuing Telemetry Transport
MQTT (Message Queuing Telemetry Transport) là giao thức truyền thông điệp (message) theo mô hình publish/subscribe (cung cấp/thuê bao), được sử dụng cho các thiết bị IoT với băng thông thấp, độ tin cậy cao và khả năng sử dụng trong mạng lưới không ổn định Nó dựa trên một Broker (tạm dịch là “Máy chủ môi giới”) “nhẹ” (khá ít xử lý) và được thiết
kế có tính mở (tức là không đặc trưng cho ứng dụng cụ thể nào), đơn giản và dễ cài đặt MQTT là lựa chọn lý tưởng trong các môi trường như:
- Những nơi mà giá mạng viễn thông đắt đỏ hoặc băng thông thấp hay thiếu tin cậy
- Khi chạy trên thiết bị nhúng bị giới hạn về tài nguyên tốc độ và bộ nhớ
- Bởi vì giao thức này sử dụng băng thông thấp trong môi trường có độ trễ cao nên
nó là một giao thức lý tưởng cho các ứng dụng M2M (Machine to Machine) MQTT là giao thức được sử dụng trong ứng dụng nhắn tin Facebook Messenger
14 https://toidicodedao.com/2019/10/08/message-queue-la-gi-ung-dung-microservice/
Trang 3626
4.6.3 Vị trí của MQTT trong mô hình IoT
Một số ưu điểm nổi bật của MQTT như: băng thông thấp, độ tin cậy cao và có thể sử dụng ngay cả khi hệ thống mạng không ổn định, tốn rất ít byte cho việc kết nối với server và connection có thể giữ trạng thái open xuyên suốt, có thể kết nối nhiều thiết bị (MQTT client) thông qua một MQTT server (broker) Bởi vì giao thức này sử dụng băng thông thấp trong môi trường có độ trễ cao nên nó là một giao thức lý tưởng cho ứng dụng IoT
Hình 4.11: Vị trí của MQTT trong hệ thống IoT 15
4.6.4 Tính năng và đặc điểm nổi bật
- Dạng truyền thông điệp theo mô hình Pub/Sub cung cấp việc truyền tin phân tán một chiều, tách biệt với phần ứng dụng
- Việc truyền thông điệp là ngay lập tức, không quan tâm đến nội dung được truyền
- Sử dụng TCP/IP là giao thức nền
- Tồn tại ba mức độ tin cậy cho việc truyền dữ liệu (QoS: Quality of service)
+ QoS 0: Broker/Client sẽ gửi dữ liệu đúng một lần, quá trình gửi được xác
nhận bởi chỉ giao thức TCP/IP
+ QoS 1: Broker/Client sẽ gửi dữ liệu với ít nhất một lần xác nhận từ đầu kia,
nghĩa là có thể có nhiều hơn 1 lần xác nhận đã nhận được dữ liệu
+ QoS 2: Broker/Client đảm bảo khi gửi dữ liệu thì phía nhận chỉ nhận được
đúng một lần, quá trình này phải trải qua 4 bước bắt tay
- Phần bao bọc dữ liệu truyền nhỏ và được giảm đến mức tối thiểu để giảm tải cho đường truyền
4.6.5 Ưu điểm của MQTT
Với những tính năng, đặc điểm nổi bật trên, MQTT mang lại nhiều lợi ích nhất là trong hệ thống SCADA (Supervisory Control And Data Acquisition) khi truy cập dữ liệu IoT
- Truyền thông tin hiệu quả hơn
- Tăng khả năng mở rộng
15 https://viblo.asia/p/mqtt-la-gi-vai-tro-cua-mqtt-trong-iot-V3m5WL3bKO7
Trang 3727
- Giảm đáng kể tiêu thụ băng thông mạng
- Rất phù hợp cho điều khiển và do thám
- Tối đa hóa băng thông có sẵn
- Chi phí thấp
- Rất an toàn, bảo mật
- Được sử dụng trong các công ty lớn như Amazon, Facebook,
- Tiết kiệm thời gian phát triển
- Giao thức publish/subscribe thu thập nhiều dữ liệu hơn và tốn ít băng thông hơn so với giao thức cũ
4.6.6 - Cơ chế hoạt động
4.6.6.1 - Mô hình Pub/Sub
- Client
+ Publisher - Nơi gửi thông điệp
+ Subscriber - Nơi nhận thông điệp
- Broker - Máy chủ môi giới
+ Trong đó Broker được coi như trung tâm, nó là điểm giao của tất cả các kết nối đến từ Client (Publisher/Subscriber) Nhiệm vụ chính của Broker là nhận thông điệp (message) từ Publisher, xếp vào hàng đợi rồi chuyển đến một địa điểm cụ thể Nhiệm vụ phụ của Broker là nó có thể đảm nhận thêm một vài tính năng liên quan tới quá trình truyền thông như: bảo mật, lưu trữ message, logs, + Client thì được chia thành hai nhóm là Publisher và Subscriber Client làm ít nhất một trong 2 việc là publish các thông điệp (message) lên một/nhiều topic
cụ thể hoặc subscribe một/nhiều topic nào đó để nhận message từ topic này
• MQTT Clients tương thích với hầu hết các nền tảng hệ điều hành hiện có: MAC
OS, Windows, Linux, Android, iOS,
Hình 4.12: Mô hình publish và subcribe qua broker trong MQTT 16
16 https://viblo.asia/p/mqtt-la-gi-vai-tro-cua-mqtt-trong-iot-V3m5WL3bKO7
Trang 3828
4.6.6.2 - Cơ chế hoạt động của MQTT theo mô hình Pub/Sub
MQTT hoạt động theo cơ chế client/server, nơi mà mỗi cảm biến là một khách hàng (client)
và kết nối đến một máy chủ, có thể hiểu như một Máy chủ môi giới (broker), thông qua giao thức TCP (Transmission Control Protocol) Broker chịu trách nhiệm điều phối tất cả các thông điệp giữa phía gửi đến đúng phía nhận
MQTT là giao thức định hướng bản tin Mỗi bản tin là một đoạn rời rạc của tín hiệu và broker không thể nhìn thấy Mỗi bản tin được publish một địa chỉ, có thể hiểu như một kênh (Topic) Client đăng kí vào một vài kênh để nhận/gửi dữ liệu, gọi là subscribe Client
có thể subscribe vào nhiều kênh Mỗi client sẽ nhận được dữ liệu khi bất kỳ trạm nào khác gửi dữ liệu vào kênh đã đăng ký Khi một client gửi một bản tin đến một kênh nào đó gọi
là publish
4.6.7 - Áp dụng vào đề tài
Với ưu điểm gọn nhẹ, tốn ít băng thông, chi phí thấp và tốn ít thời gian phát triển, nhóm quyết định sử dụng công nghệ MQTT để truyền tải thông giữa 3 thành phần trong
hệ thống: web app đặt món dành cho khách hàng (subscriber), server (publisher/subscriber)
và mobile app xử lý đơn hàng (subscriber)
4.7 JWT
4.7.1 JWT là gì?
- JSON Web Token (JWT) là 1 tiêu chuẩn mở (RFC 7519) định nghĩa cách thức truyền tin an toàn giữa các thành viên bằng 1 đối tượng JSON Thông tin này có thể được xác thực và đánh dấu tin cậy nhờ vào "chữ ký" của nó Phần chữ ký của JWT
sẽ được mã hóa lại bằng HMAC hoặc RSA Trong đó chuỗi Token phải có 3 phần
là header , phần payload và phần signature được ngăn bằng dấu “.”
Hình 4.13: Cấu trúc JWT 17
17 https://topdev.vn/blog/jwt-la-gi/
Trang 39data = base64urlEncode( header ) + "." + base64urlEncode( payload )
signature = Hash( data, secret );
- Kết hợp 3 chuỗi trên lại ta sẽ có được một chuỗi JWT hoàn chỉnh
4.7.2 Khi nào nên dùng JSON Web Token?
- Authentication: Đây là trường hợp phổ biến nhất thường sử dụng JWT Khi người dùng đã đăng nhập vào hệ thống thì những request tiếp theo từ phía người dùng sẽ chứa thêm mã JWT Điều này cho phép người dùng được cấp quyền truy cập vào các url, service, và resource mà mã Token đó cho phép Phương pháp này không bị ảnh hưởng bởi Cross-Origin Resource Sharing (CORS) do nó không sử dụng cookie
- Trao đổi thông tin: JSON Web Token là 1 cách thức khá hay để truyền thông tin an toàn giữa các thành viên với nhau, nhờ vào phần signature của nó Phía người nhận
có thể biết được người gửi là ai thông qua phần signature Và chữ ký được tạo ra bằng việc kết hợp cả phần header, payload lại nên thông qua đó ta có thể xác nhận được chữ ký có bị giả mạo hay không
4.7.2 Áp dụng vào đề tài
Với những đặc điểm của JWT, nhóm quyết định sử dụng vào đề tài nhằm mục đích Authentication:
- Xác thực các request từ client (ứng dụng mobile, web client) đến server
- Định danh đối tượng gửi request để trả về dữ liệu phù hợp
- Bảo mật thông tin, tránh việc giả mạo dữ liệu
- Server không cần lưu trữ data session để xác thực client
Trang 40• Là một web app SPA (Single Page Application) xây dựng bằng React có hiệu năng cao Ưu điểm của web app so với mobile app là không đòi hỏi phải cài đặt trên thiết bị, chỉ cần có trình duyệt web, hoạt động tốt trên các trình duyệt hiện đại Mặt khác, hiệu năng và trải nghiệm người dùng trên web app hiện nay (viết bằng React, Vue.js, ) đã rất tốt, hầu như không thua gì native mobile app
• Cung cấp thực đơn món ăn trực quan, dễ duyệt và chọn món
• Giỏ hàng có thể được chia sẻ giữa nhiều thiết bị khác nhau (tính năng giỏ hàng và đặt hàng theo nhóm)
• Đăng nhập bằng số điện thoại (xác thực bằng mã OTP qua SMS), ghi nhớ đăng nhập để những lần truy cập sau vào không phải đăng nhập nữa
• Đặt (order) món và giao tại quầy, thanh toán khi nhận hàng tại quầy hoặc thanh toán bằng ví điện tử
• Theo dõi đơn hàng thời gian thực, khi đơn hàng được cập nhật thay đổi trạng thái
từ phía cửa hàng thì khách hàng sẽ nhìn thấy những cập nhật đó ngay lập tức (ví dụ: huỷ đơn hàng, xác nhận đơn hàng)
• Khi cửa hàng đã chuẩn bị món xong và sẵn sàng giao cho khách, sẽ có tin nhắn SMS gửi tới khách hàng để báo tới quầy lấy hàng,
• Khách hàng có thể hủy đơn hàng khi cửa tiệm chưa xác nhận đơn
• Khách hàng có thể dễ dàng xem lịch sử mua hàng và mọi chi tiết về đơn hàng của mình
5.2 Khảo sát các ứng dụng tương tự trên thị trường
5.2.1 Ứng dụng Utop
Mô tả chung: Utop là ứng dụng công nghệ trực thuộc tập đoàn FPT Software Ứng dụng
mang đến những trải nghiệm mua sắm và sử dụng dịch vụ trực tiếp tại cửa hàng một cách mới mẻ, nhanh chóng thông qua các tính năng như: Smart Menu, E-Voucher, UtopBACK, Video khám phá…