1. Trang chủ
  2. » Cao đẳng - Đại học

Khóa luận tốt nghiệp phát triển ứng dụng hỗ trợ tư vấn chia sẻ thông tin du lịch cùng nhau

110 5 0

Đ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

Định dạng
Số trang 110
Dung lượng 13,95 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

o Tạo ra các tính năng cần thiết phục vụ cho nhu cầu tạo, quản lý và chia sẻ thông tin cho nhóm cùng du lịch, theo dõi realtime vị trí của các thành viên trong đoàn khi di chuyển để liên

Trang 1

ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN

NGÔ ĐỨC HÒA

KHÓA LUẬN TỐT NGHIỆP PHÁT TRIỂN ỨNG DỤNG HỖ TRỢ TƯ VẤN

& CHIA SẺ THÔNG TIN DU LỊCH CÙNG NHAU

Build advisory and sharing tourist destinations application

KỸ SƯ 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

NGÔ ĐỨC HÒA – 16520423

KHÓA LUẬN TỐT NGHIỆP PHÁT TRIỂN ỨNG DỤNG HỖ TRỢ TƯ VẤN

& CHIA SẺ THÔNG TIN DU LỊCH CÙNG NHAU

Build advisory and sharing tourist destinations application

KỸ SƯ NGÀNH KỸ THUẬT PHẦN MỀM

GIẢNG VIÊN HƯỚNG DẪN ThS NGUYỄN THỊ THANH TRÚC

Trang 3

DANH SÁCH HỘI ĐỒNG BẢO VỆ KHÓA LUẬN

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

1 ……… – Chủ tịch

2 ……… – Thư ký

3 ……… – Ủy viên

4 ……… – Ủy viên

Trang 4

ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH

TRƯỜNG ĐẠI HỌC

CÔNG NGHỆ THÔNG TIN

CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM

Độc Lập - Tự Do - Hạnh Phúc

TP HCM, ngày …… tháng …… năm ……

NHẬN XÉT KHÓA LUẬN TỐT NGHIỆP

(CỦA CÁN BỘ HƯỚNG DẪN)

Tên khóa luận:

PHÁT TRIỂN ỨNG DỤNG HỖ TRỢ TƯ VẤN & CHIA SẺ THÔNG TIN

DU LỊCH CÙNG NHAU

Ngô Đức Hòa 16520423 ThS Nguyễn Thị Thanh Trúc

Đánh giá Khóa luận

1 Về cuốn báo cáo:

Số trang _ Số chương _

Số bảng số liệu _ Số hình vẽ _

Số tài liệu tham khảo _ Sản phẩm _

Một số nhận xét về hình thức cuốn báo cáo:

Trang 5

3 Về chương trình ứng dụng:

4 Về thái độ làm việc của sinh viên:

Đánh giá chung:

Điểm từng sinh viên:

Trang 6

Ngô Đức Hòa: ………/10

Người nhận xét

(Ký và ghi rõ họ tên)

ThS NGUYỄN THỊ THANH TRÚC

Trang 7

ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH

TRƯỜNG ĐẠI HỌC

CÔNG NGHỆ THÔNG TIN

CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM

Độc Lập - Tự Do - Hạnh Phúc

TP HCM, ngày …… tháng …… năm ……

NHẬN XÉT KHÓA LUẬN TỐT NGHIỆP (CỦA CÁN BỘ PHẢN BIỆN) Tên khóa luận: XÂY DỰNG ỨNG DỤNG THEO DÕI BỆNH NHÂN TIỂU ĐƯỜNG Nhóm SV thực hiện: Cán bộ phản biện: Ngô Đức Hòa 16520423 ThS Phan Nguyệt Minh Đánh giá Khóa luận 1 Về cuốn báo cáo: Số trang _ Số chương _ Số bảng số liệu _ Số hình vẽ _ Số tài liệu tham khảo _ Sản phẩm _ Một số nhận xét về hình thức cuốn báo cáo:

2 Về nội dung nghiên cứu:

Trang 8

3 Về chương trình ứng dụng:

4 Về thái độ làm việc của sinh viên:

Đánh giá chung:

Điểm từng sinh viên: Ngô Đức Hòa: ………/10

Trang 9

Người nhận xét

(Ký và ghi rõ họ tên)

ThS PHAN NGUYỆT MINH

Trang 10

LỜI CẢM ƠN

Thực tế luôn cho thấy, sự thành công nào cũng đều gắn liền với những sự hỗ trợ, giúp đỡ của những người xung quanh dù cho sự giúp đỡ đó là ít hay nhiều, trực tiếp hay gián tiếp Trong suốt thời gian từ khi bắt đầu làm luận văn đến nay, chúng

em đã nhận được sự quan tâm, chỉ bảo, giúp đỡ của thầy cô, gia đình và bạn bè xung quanh

Với tấm lòng biết ơn vô cùng sâu sắc, chúng em xin gửi lời cảm ơn chân thành nhất từ đáy lòng đến quý Thầy Cô của Trường Đại học Công Nghệ Thông Tin đã cùng dùng những tri thức và tâm huyết của mình để có thể truyền đạt cho chúng em trong vốn kiến thức quý báu suốt thời gian học tập tại trường

Đặc biệt, chúng em xin chân thành cảm ơn ThS Nguyễn Thị Thanh Trúc đã tận tâm chỉ bảo hướng dẫn chúng em qua từng buổi học, từng buổi nói chuyện, thảo luận

về đề tài nghiên cứu Nhờ có những lời hướng dẫn, dạy bảo đó, bài luận văn này của chúng em đã hoàn thành một cách xuất sắc nhất Một lần nữa, em xin gửi lời cảm ơn chân thành đến cô

Khi thực hiện luận văn chúng em còn bỡ ngỡ vì vốn kiến thức của chúng em có hạn Do vậy, không tránh khỏi những thiếu sót, chúng em rất mong nhận được ý kiến đóng góp của quý Thầy Cô để bài luận được hoàn thiện hơn

Thành phố Hồ Chí Minh, tháng năm 2021

Ngô Đức Hòa

Trang 11

ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH

TRƯỜNG ĐẠI HỌC

CÔNG NGHỆ THÔNG TIN

CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM

Độc Lập - Tự Do - Hạnh Phúc

TP HCM, ngày… tháng … năm ………

ĐỀ CƯƠNG CHI TIẾT

Tên đề tài: Phát triển ứng dụng hỗ trợ tư vấn & chia sẻ thông tin du lịch cùng

nhau

Cán bộ hướng dẫn: ThS NGUYỄN THỊ THANH TRÚC

Thời gian thực hiện: Từ ngày 01/09/2020 đến ngày 28/12/2020

Sinh viên thực hiện:

1 NGÔ ĐỨC HÒA – 16520423

Nội dung đề tài: (Mô tả chi tiết mục tiêu, phạm vi, đối tượng, phương pháp

thực hiện, kết quả mong đợi của đề tài)

Tổng quan đề tài:

• Việt Nam đang là một trong những nước có ngành dịch vụ đang trên

đà phát triển mạnh, đặc biệt ngành dịch vụ đang đóng góp ngày càng cao trong tỉ trọng GPD của cả nước và được kỳ vọng là sẽ chiếm đến 43% GPD vào năm 2025 Lượng khách du lịch nội địa và quốc tế đổ

về Việt Nam là cực kì cao với con số thống kê cho năm 2018 là 15,5 triệu lượt người đối với du khách quốc tế Song song với đó, xu hướng

du lịch ngẫu hứng, du lịch phượt đang được các bạn trẻ cực kì ưa chuộng vì tính tự do về thời gian và địa điểm du lịch cũng như tính linh hoạt khi có thể tự do lựa chọn phương tiện như xe máy, xe đạp hay xe hơi, cũng như có thể tổ chức đi cá nhân hoặc đi thành các nhóm nhỏ và lớn khác nhau Chính vì thế mà du lịch đang là một thị trường

vô cùng tiềm năng để khai thác

Trang 12

• Với nhiều loại hình du lịch khác nhau mà nhu cầu của khách du lịch cũng càng ngày càng trở nên đa dạng hơn trước rất nhiều, đi kèm theo

đó là sự yêu cầu ngày càng cao về tính tiện dụng và sự ứng dụng của công nghệ vào trong các sản phẩm dịch vụ cho du lịch Minh chứng cho điều này là ngày càng có nhiều các sản phẩm công nghệ đáp ứng cho các nhu cầu khác nhau của du lịch như đặt vé xe, lên lịch trình cho chuyến du lịch, đặt phòng, thuê hướng dẫn viên, review đặc sản,…

Có thể kể tên một số các ứng dụng du lịch đang rất thịnh hành trên thị trường ngày nay như VeXeRe, Booking, Agoda, Trivago, TripAdvisor, diadiemdulich

• Đa số các sản phẩm kể trên đều đánh vào các nhu cầu về đặt phòng, giới thiệu địa điểm du lịch hay đặt vé xe khách, khá ít sản phẩm phục

vụ cho vấn đề chia sẻ lịch trình và hẹn nhóm đi du lịch cùng nhau

• Ứng dụng thực tế (ứng dụng chia sẻ thông tin du lịch cùng nhau)

o Tạo ra ứng dụng với giao diện thân thiện và dễ sử dụng

o Tạo ra các tính năng cần thiết phục vụ cho nhu cầu tạo, quản lý

và chia sẻ thông tin cho nhóm cùng du lịch, theo dõi realtime vị trí của các thành viên trong đoàn khi di chuyển để liên lạc và khắc phục nhanh sự cố nếu có, tìm kiếm địa điểm cung cấp các tiện ích trong quá trình du lịch: quán ăn, tiệm sửa xe, nhà trọ,

• Tích hợp với các ứng dụng mạng xã hội tiện cho việc chia sẻ và mời

gọi bạn bè cùng tham gia du lịch

Phương pháp thực hiện:

• Nghiên cứu công nghệ

o Môi trường triển khai: Docker, Kubernetes, Google Cloud Platform

o Back-end:

Trang 13

§ NodeJS: sử dụng express framework để tổ chức dạng RESTful API

§ PostgreSQL

§ ORM: ObjectionJS

§ PassportJS và chuẩn OAuth 2 cho việc xác thực và cấp quyền cho người dùng

§ Facebook SDK, Google Map SDK

§ Redis để cache thông tin

§ RabbitMQ (hoặc Kafka) làm message queue cho các service liên lạc với nhau

§ Google Storage cho việc lưu trữ các file media: hình ảnh, video, …

o App:

§ React Native

§ Redux, redux saga cho việc lưu trữ state cho toàn ứng dụng

§ Facebook SDK, Google Map SDK

• Nghiên cứu nghiệp vụ:

o Tìm hiểu nhu cầu của người tham gia du lịch phượt

o Tìm hiểu quá trình lên kế hoạch cho chuyến đi

o Tìm hiểu quá trình mời gọi bạn bè cùng tham gia chuyến đi

o Tìm hiểu quá trình di chuyển theo nhóm khi du lịch phượt

o Tìm hiểu quy trình chia sẻ thông tin sau chuyến đi cho mọi người

Kế hoạch thực hiện:

Làm việc cá nhân, chủ yếu ứng dụng được thực hiện tại nhà và trình bày với giảng viên hàng tuần để giảng viên theo dõi tiến độ, đánh giá, nhận xét

và lên kế hoạch cho những tuần tiếp theo

Kết quả mong đợi:

Hoàn thiện ứng dụng di động với giao diện thân thiện và dễ sử dụng với đầy đủ các chức năng cho việc lập kế hoạch và quản lý chuyến đi du lịch

Trang 14

phượt của cá nhân hoặc cả nhóm Hệ thống xử lý phía server chạy ổn định và

dễ dàng quản lý cũng như nâng cấp khi cần thiết

Kế hoạch thực hiện: (Mô tả kế hoạch làm việc và phân chia công việc các

thành viên tham gia)

Với thời gian thực hiện từ 01/09/2020 tới 28/12/2020, nhóm chia thành 5 giai đoạn làm việc, cụ thể:

- Giai đoạn 1: Nghiên cứu, tìm hiểu công nghệ cho việc phát triển

đề tài khóa luận

- Giai đoạn 2: Phân tích nghiệp vụ, xây dựng mô hình UML mô tả nghiệp vụ của đề tài khóa luận

- Giai đoạn 3: Phát triển hệ thống và ứng dụng trên thiết bị di động

- Giai đoạn 4: Triển khai hệ thống lên dịch vụ Google Cloud và quản lý bằng Kubernetes

- Giai đoạn 5: Viết báo cáo cho đề tài khóa luận

• Tìm hiểu React Native

• Tìm hiểu api facebook, api google map, api google storage

• Tìm hiểu Redis, RabbitMQ

4 tuần (01/09/2020 – 01/10/2020)

Giai đoạn 2 -

Business

Analysis

• Tìm hiểu nghiệp vụ du lịch phượt

• Tìm hiểu tính năng ứng dụng tương tự

• Chốt tính năng

• Xây dựng use case

• Xây dựng diagram

2 tuần (01/10/2020 – 08/10/2020)

Trang 15

• Viết báo cáo

• Review lại code

2 tuần (15/12/2020 – 28/12/2020)

Trang 16

MỤC LỤC

Chương 1 TỔNG QUAN ĐỀ TÀI 1

1.1 Phát biểu đề tài nghiên cứu 1

1.2 Mục tiêu và phạm vi của đề tài 2

1.2.1 Mục tiêu 2

1.2.2 Phạm vi 3

1.3 Đối tượng sử dụng 3

1.4 Kết quả dự kiến 3

1.5 Phương pháp nghiên cứu và nguồn số liệu 3

1.5.1 Phương pháp nghiên cứu 3

1.5.2 Nguồn dữ liệu 4

1.6 Điểm mới của luận văn 4

1.7 Kết cấu luận văn 4

Chương 2 KIẾN THỨC NỀN TẢNG 5

2.1 Công nghệ ảo hóa Containerlization và Docker: 5

2.1.1 Định nghĩa 5

2.1.2 Các thành phần chính 6

2.1.3 Một số khái niệm 6

2.1.4 So sánh Docker với Virtual Machine 7

2.2 Công nghệ điều phối container và Kubernetes 9

2.2.1 Định nghĩa 9

2.2.2 Các thành phần chính: 10

2.2.3 Một số khái niệm 12

Trang 17

2.3.1 Định nghĩa 13

2.3.2 Ưu điểm của việc thực hiện CI/CD trong dự án 14

2.3.3 Quy trình CI/CD 14

2.3.4 Gitlab CI/CD 15

2.3.5 Gitlab Runner 16

2.4 NodeJS/Express 17

2.4.1 Công nghệ NodeJS 17

2.4.2 Framework Express 18

2.5 React Native 19

2.5.1 Native App và Hybrid App 19

2.5.2 React Native 20

2.6 PostgreSQL 21

Chương 3 PHÂN TÍCH, THIẾT KẾ 22

3.1 Phân tích, thiết kế hệ thống 22

3.2 Sơ đồ kiến trúc hệ thống – Architecture diagram: 24

3.3 Sơ đồ triển khai – Deployment diagram 25

3.4 Sơ đồ Use case: 26

3.5 Sơ đồ lớp – Class diagram 27

3.6 Sơ đồ tuần tự - Sequence diagrams 28

3.6.1 Sơ đồ tuần tự chức năng Đăng nhập 28

3.6.2 Sơ đồ tuần tự chức năng Đăng ký 29

3.6.3 Sơ đồ tuần tự chức năng Upload hình ảnh 30

3.6.4 Sơ đồ tuần tự chức năng Chỉnh sửa thông tin cá nhân 31

3.6.5 Sơ đồ tuần tự chức năng Đổi mật khẩu 32

Trang 18

3.6.6 Sơ đồ hoạt động chức năng Tạo chuyến đi mới 33

3.6.7 Sơ đồ tuần tự chức năng Đánh dấu địa điểm 34

3.6.8 Sơ đồ tuần tự chức năng Cập nhật thông tin chuyến đi 35

3.6.9 Sơ đồ hoạt động chức năng Mời bạn bè tham gia chuyến đi 36

3.6.10 Sơ đồ tuần tự chức năng Theo dõi vị trí thành viên trong đoàn 37

3.6.11 Sơ đồ tuần tự chức năng Cập nhật vị trí hiện tại 38

3.6.12 Sơ đồ tuần tự chức năng Viết review sau chuyến đi 39

3.7 Thiết kế giao diện người dùng của ứng dụng 40

3.7.1 Giao diện màn hình Đăng nhập 40

3.7.2 Giao diện màn hình Đăng ký 42

3.7.3 Giao diện màn hình Quản lý thông tin cá nhân 44

3.7.4 Giao diện màn hình Danh sách bài viết 48

3.7.5 Giao diện màn hình Tạo mới chuyến đi 51

3.7.6 Giao diện màn hình Danh sách chuyến đi 57

3.7.7 Giao diện màn hình Chỉnh sửa thông tin chuyến đi 59

3.7.8 Giao diện màn hình Xem vị trí thành viên trong chuyến đi 62

3.7.9 Giao diện màn hình Viết review sau chuyến đi 64

Chương 4 TRIỂN KHAI VÀ PHÁT TRIỂN SẢN PHẨM 66

4.1 Đăng ký tài khoản Google và khởi tạo Project cùng với Cluster 66

4.2 Cài đặt docker, gcloud sdk và kubectl 71

4.3 Dựng project PackNGo Core API và triển khai lên cluster đã tạo 72

4.4 Tích hợp Gitlab CI/CD 77

4.5 Thực hiện việc trigger CI/CD khi push code 82

Chương 5 TỔNG KẾT 85

Trang 19

5.1 Đánh giá 85

5.1.1 Thuận lợi: 85

5.1.2 Khó khăn: 85

5.2 Thành quả đạt được 85

5.3 Những điều còn tồn tại 85

5.4 Hướng phát triển 86

TÀI LIỆU THAM KHẢO 87

Trang 20

DANH MỤC HÌNH VẼ

Hình 1.1: Hình thức du lịch phượt đang trở nên ngày càng phổ biến trong giới trẻ 2

Hình 2.1: So sánh giữa kiến trúc Virtual Machine và Containerlization/Docker 5

Hình 2.2: Mô hình máy chủ ảo Virtual Machines 7

Hình 2.3: Mô hình máy ảo Container 8

Hình 2.4: Hệ thống file cắt lớp Container 9

Hình 2.5: Các thành phần chính của Kubernetes 10

Hình 2.6: Các khái niệm trong Kubernetes 12

Hình 2.7: Quy trình CI/CD trong phát triển sản phẩm CNTT 13

Hình 2.8: Gitlab CI/CD 15

Hình 2.9: Quy trình thực hiện CI/CD trên Gitlab CI/CD 16

Hình 2.10: Công nghệ NodeJS 17

Hình 2.11: Framework Express 18

Hình 2.12: Native App và Hybrid App 19

Hình 2.13: Công nghệ React Native 20

Hình 2.14: Hệ quản trị cơ sở dữ liệu PostgreSQL 21

Hình 3.1: Sơ đồ kiến trúc hệ thống 24

Hình 3.2: Sơ đồ triển khai của hệ thống 25

Hình 3.3: Sơ đồ Use-case của hệ thống 26

Hình 3.4: Sơ đồ lớp của hệ thống 27

Hình 3.5: Sơ đồ tuần tự chức năng Đăng nhập 28

Hình 3.6: Sơ đồ tuần tự chức năng Đăng ký 29

Hình 3.7: Sơ đồ tuần tự chức năng Upload hình ảnh 30

Hình 3.8: Sơ đồ tuần tự chức năng Chỉnh sửa thông tin cá nhân 31

Hình 3.9: Sơ đồ tuần tự chức năng Đổi mật khẩu 32

Hình 3.10: Sơ đồ tuần tự chức năng Tạo chuyến đi mới 33

Hình 3.11: Sơ đồ tuần tự chức năng Đánh dấu địa điểm 34

Hình 3.12: Sơ đồ tuần tự chức năng Cập nhật thông tin chuyến đi 35

Trang 21

Hình 3.14: Sơ đồ tuần tự chức năng Theo dõi vị trí thành viên trong đoàn 37

Hình 3.15: Sơ đồ tuần tự chức năng Cập nhật vị trí hiện tại 38

Hình 3.16: Sơ đồ tuần tự chức năng Viết review sau chuyến đi 39

Hình 3.17: Màn hình Đăng nhập 40

Hình 3.18: Màn hình Đăng ký 42

Hình 3.19: Màn hình Quản lý thông tin cá nhân 44

Hình 3.20: Màn hình Điều chỉnh thông tin cá nhân 45

Hình 3.21: Màn hình Thay đổi mật khẩu 46

Hình 3.22: Màn hình Danh sách bài viết 48

Hình 3.23: Màn hình Danh sách bài viết với action button 49

Hình 3.24: Màn hình Tạo mới chuyến đi 51

Hình 3.25: Màn hình Tìm địa điểm 52

Hình 3.26: Màn hình Gắn tọa độ điểm di chuyển 53

Hình 3.27: Màn hình Chọn ngày cho chuyến đi 54

Hình 3.28: Màn hình Chọn giờ cho chuyến đi 55

Hình 3.29: Màn hình Danh sách chuyến đi 57

Hình 3.30: Màn hình Chỉnh sửa thông tin chuyến đi 59

Hình 3.31: Màn hình Chỉnh sửa chuyến đi với popup xác nhận xóa chuyến đi 60

Hình 3.32: Màn hình Xem vị trí thành viên trong chuyến đi 62

Hình 3.33: Màn hình Xem vị trí thành viên trong chuyến đi 64

Hình 4.1: Form tạo tài khoản Google 66

Hình 4.2: Tạo Project mới 67

Hình 4.3: Điền thông tin Project mới 68

Hình 4.4: Tìm kiếm product Kubernetes Engine 68

Hình 4.5: Enable Kubernetes Engine API 69

Hình 4.6: Tạo cluster mới 69

Hình 4.7: Form tạo cluster mới 70

Hình 4.8: Danh sách các cluster đã tạo 70

Hình 4.9: Cài đặt gcloud sdk 71

Trang 22

Hình 4.10: Cài đặt docker 71Hình 4.11: Google Cloud Project ID 72Hình 4.12: Dockerfile để build image 73Hình 4.13: Quá trình build docker image 74Hình 4.14: Dựng container lên và kiểm tra tình trạng của container đã dựng 75Hình 4.15: Push image lên Google Cloud Registry 75Hình 4.16: Google Cloud Registry 75Hình 4.17: File deployment.yaml 76Hình 4.18: Kiểm tra tình trạng của cluster bằng k9s 77Hình 4.19: Thêm Kubernetes cluster vào project gitlab 77Hình 4.20: Chọn Thêm cluster 77Hình 4.21: Form tích hợp project với Kubernetes cluster đã có sẵn 78Hình 4.22: Cấu hình gitlab CI/CD 79Hình 4.23: Bật tính năng Auto DevOps để thực hiện CI/CD 79Hình 4.24: Cấu hình cho Gitlab Runner 80Hình 4.25: Cài đặt Gitlab Runner 81Hình 4.26: Kiểm tra tình trạng Gitlab Runner trên cluster 81Hình 4.27: File gitlab-ci.yml 82Hình 4.28: File gitlab-ci.yml 83Hình 4.29: Gitlab pipeline 83

Trang 23

DANH MỤC TỪ VIẾT TẮT

CSDL Cơ sở dữ liệu Cơ sở dữ liệu cho ứng dụng HTTP HyperText Transfer Protocol Giao thức truyền siêu văn bản JSON JavaScript Object Notation Định dạng trao đổi dữ liệu

UI User Interface Giao diện người dùng SDK Software Development Kit Bộ sưu tập các công cụ phát

triển phần mềm API Application Programming

OS Operating System Hệ điều hành

Trang 24

Chương 1 TỔNG QUAN ĐỀ TÀI 1.1 Phát biểu đề tài nghiên cứu

Việt Nam đang là một trong những nước có ngành dịch vụ đang trên đà phát triển mạnh, đặc biệt ngành dịch vụ đang đóng góp ngày càng cao trong tỉ trọng GPD của cả nước và được kỳ vọng là sẽ chiếm đến 43% GPD vào năm 2025 Lượng khách du lịch nội địa và quốc tế đổ về Việt Nam là cực kì cao với con số thống kê cho năm 2018 là 15,5 triệu lượt người đối với du khách quốc tế Song song với đó, xu hướng du lịch ngẫu hứng, du lịch phượt đang được các bạn trẻ cực

kì ưa chuộng vì tính tự do về thời gian và địa điểm du lịch cũng như tính linh hoạt khi có thể tự do lựa chọn phương tiện như xe máy, xe đạp hay xe hơi, cũng như có thể tổ chức đi cá nhân hoặc đi thành các nhóm nhỏ và lớn khác nhau Chính vì thế

mà du lịch đang là một thị trường vô cùng tiềm năng để khai thác

Với nhiều loại hình du lịch khác nhau mà nhu cầu của khách du lịch cũng càng ngày càng trở nên đa dạng hơn trước rất nhiều, đi kèm theo đó là sự yêu cầu ngày càng cao về tính tiện dụng và sự ứng dụng của công nghệ vào trong các sản phẩm dịch vụ cho du lịch Minh chứng cho điều này là ngày càng có nhiều các sản phẩm công nghệ đáp ứng cho các nhu cầu khác nhau của du lịch như đặt vé xe, lên lịch trình cho chuyến du lịch, đặt phòng, thuê hướng dẫn viên, review đặc sản,… Có thể kể tên một số các ứng dụng du lịch đang rất thịnh hành trên thị trường ngày nay như VeXeRe, Booking, Agoda, Trivago, TripAdvisor, diadiemdulich

Đa số các sản phẩm kể trên đều đánh vào các nhu cầu về đặt phòng, giới thiệu địa điểm du lịch hay đặt vé xe khách, khá ít sản phẩm phục vụ cho vấn đề chia sẻ lịch trình và hẹn nhóm đi du lịch cùng nhau

Trang 25

2

Hình 1.1: Hình thức du lịch phượt đang trở nên ngày càng phổ biến trong giới trẻ

1.2 Mục tiêu và phạm vi của đề tài

1.2.1 Mục tiêu

- Mục tiêu cuối cùng của đề tài: phát triển được một hệ thống hỗ trợ tư vấn

và chia sẻ thông tin du lịch cùng nhau bằng kiến trúc microservices

- Tạo ra ứng dụng với giao diện thân thiện và dễ sử dụng, bao gồm các tính năng cần thiết phục vụ cho nhu cầu tạo, quản lý và chia sẻ thông tin cho nhóm cùng du lịch, theo dõi realtime vị trí của các thành viên trong đoàn khi di chuyển để liên lạc và khắc phục nhanh sự cố nếu có, tìm kiếm địa điểm cung cấp các tiện ích trong quá trình du lịch: quán ăn, tiệm sửa xe, nhà trọ, …

- Tích hợp với các ứng dụng mạng xã hội tiện cho việc chia sẻ và mời gọi bạn bè cùng tham gia du lịch

Trang 26

1.2.2 Phạm vi

- Đối tượng nghiên cứu: Công nghệ phát triển và triển khai hệ thống microservices, đồng thời nghiên cứu và phát triển công nghệ hybrid mobile application bằng React Native

- Thời gian nghiên cứu: Dữ liệu thu thập và các định hướng, giải pháp được

đề xuất từ thời gian nhận đề tài tới lúc hoàn thành ứng dụng

- Giới hạn nghiên cứu: Phạm vi nghiên cứu ở mức tìm hiểu và phát triển hệ thống microservices và ứng dụng trên di động

1.5 Phương pháp nghiên cứu và nguồn số liệu

1.5.1 Phương pháp nghiên cứu

Tập trung tìm hiểu lý thuyết về các công nghệ để xây dựng hệ thống microservices và ứng dụng di động bằng công nghệ React Native, các kỹ thuật liên quan đến việc triển khai và quản lý hệ thống lên Google Cloud Kubernetes, đồng thời áp dụng quy trình tự động triển khai (Auto DevOps) của Gitlab CI/CD Nghiên cứu, so sánh các phương pháp thực hiện và chọn ra phương pháp phù hợp Tham khảo các ứng dụng tương tự đã có mặt trên thị trường để chọn ra cấu trúc xây dựng ứng dụng phù hợp

Trang 27

4

1.5.2 Nguồn dữ liệu

Nguồn dữ liệu từ của luận văn được thu thập từ các nguồn đáng tin cậy (các trang web chính thức về du lịch của chính phủ: https://vietnamtourism.gov.vn/)

1.6 Điểm mới của luận văn

Kết hợp giữa công nghệ quản lý mã nguồn (Git/Gitlab), công nghệ tự động triển khai dự án (Gitlab CI/CD) và công nghệ quản lý các service theo hướng microservices (Google Cloud Kubernetes) để tạo ra một hệ thống hoàn chỉnh, có khả năng tự phục hồi khi gặp sự cố, giúp tiết kiệm thời gian trong quá trình phát triển hệ thống

1.7 Kết cấu luận văn

Ngoài phần kết luận, mục lục, danh mục các chữ viết tắt, danh mục các bảng, phụ lục và tài liệu tham khảo; luận văn được bố cục theo 5 chương: Chương 1: Tổng quan đề tài

Chương 2: Kiến thức nền tảng

Chương 3: Phân tích, Thiết kế

Chương 4: Triển khai và phát triển sản phẩm

Chương 5: Tổng kết

Trang 28

Chương 2 KIẾN THỨC NỀN TẢNG 2.1 Công nghệ ảo hóa Containerlization và Docker:

2.1.1 Định nghĩa

Containerlization là một công nghệ cho phép các lập trình viên phát triển, vận chuyển và triển khai các ứng dụng phân tán mà không bị ảnh hưởng bởi sự khác nhau về kiến trúc hạ tầng giữa các môi trường triển khai khác nhau[1] Nhờ vậy, lập trình viên giảm thiểu được đáng kể thời gian và công sức cho việc chỉnh sửa cấu hình hay tránh gặp các lỗi liên quan đến việc triển khai ứng dụng tại các môi trường khác nhau

Containerlization đưa ra một giải pháp mới cho vấn đề ảo hóa, thay vì tạo ra các máy ảo con chạy độc lập (Virtual Machine), các ứng dụng sẽ được đóng gói lại thành các Container riêng lẻ Các Container này chạy chung trên nhân hệ điều hành, chia sẻ chung tài nguyên của máy mẹ, do đó hoạt động nhẹ và nhanh hơn các máy ảo dạng Virtual Machine

Docker là một trong những giải pháp cho công nghệ containerlization, được viết bằng Go-lang, một ngôn ngữ lập trình hệ thống do Google phát triển và phát hành

Hình 2.1: So sánh giữa kiến trúc Virtual Machine và Containerlization/Docker

Trang 29

6

2.1.2 Các thành phần chính

Các thành phần chính của Docker bao gồm:

- 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à dịch vụ cloud để chia sẻ ứng dụng, có thể thao tác pull/push với các docker image

2.1.3 Một số khái niệm

Một số khái niệm phổ biến về Docker:

- Docker image: là một “read-only template” Chẳng hạn, một image chứa

hệ điều hành Ubuntu đã cài đặt sẵn Apache và ứng dụng web

- Docker registry: là kho chứa image Người dùng có thể tạo ra các image của mình và tải lên đây hoặc tải về các image được chia sẻ

- Docker container: hoạt động giống như một thư mục (directory), chứa tất

cả những thứ cần thiết để một ứng dụng có thể chạy được Mỗi một docker container được tạo ra từ một docker image Các thao tác với một container: chạy, bật, dừng, di chuyển, và xóa

- Dockerfile: là một file chứa tập hợp các lệnh để Docker có thể đọc và thực hiện để đóng gói một image theo yêu cầu người dùng

- Orchestration: là các công cụ, dịch vụ dùng để điều phối và quản lý nhiều containers sao cho chúng làm việc hiệu quả nhất[2]

Trang 30

2.1.4 So sánh Docker với Virtual Machine

Hình 2.2: Mô hình máy chủ ảo Virtual Machines

Khi mô hình triển khai bằng các máy ảo (Virtual Machine) ra đời, tài nguyên của máy tính được tận dụng một cách tốt hơn so với công nghệ triển khai theo phương pháp truyền thống (1 máy chủ vật lý + 1 hệ điều hành + 1 application) Tuy nhiên, việc ảo hóa này lại nảy sinh vấn đề mới:

- Ngốn tài nguyên: khi chạy 1 máy ảo, nó sẽ luôn chiếm 1 phần tài nguyên

cố định Vd: máy chủ có 512GB SSD, 16GB RAM Tạo ra 4 máy ảo Linux, mỗi máy cấp 64GB SSD và 2GB RAM Như vậy, sẽ mất 256 GB SSD để chứa 4 máy ảo, và khi chạy cùng 4 máy ảo lên cùng lúc, chúng sẽ chiếm 8GB RAM Mặc dù chỉ chạy lên để không đó thôi, chưa dùng gì cả nhưng

nó vẫn chiếm từng đó

- Tốn thời gian thực thi: thời gian khởi động, shutdown của các máy ảo sẽ lâu, thường là hàng phút

Trang 31

Hình 2.3: Mô hình máy ảo Container

Với công nghệ này, trên một máy chủ, ta sẽ sinh ra được nhiều máy con (giống với ảo hóa), nhưng điều đặc biệt là các máy con (Guess OS) này đều dùng chung phần nhân của máy mẹ (host OS) và chia sẻ với nhau tài nguyên của máy mẹ (RAM chẳng ghạn) Như vậy việc tận dụng tài nguyên sẽ được tối ưu hơn

Ngoài ra, việc sử dụng hệ thống file cắt lớp (layer file system) sẽ khiến việc tối ưu tài nguyên hiệu quả hơn

Trang 32

Hình 2.4: Hệ thống file cắt lớp Container

Cụ thể, mỗi máy con (container) mới, nó sẽ được xây dựng dựa trên 1 file ảnh (image) dạng chỉ đọc (read-only) Trong mỗi máy con sẽ có thêm 1 lớp bọc có-thể-ghi-được (writabe-layer), các thay đổi trong máy con sẽ được ghi lên đây Như vậy, từ 1 image ban đầu, ta có thể tạo nhiều máy con mà chỉ tốn rất ít dung lượng

ổ đĩa

- Ưu điểm: nhanh, nhẹ, có thể chia sẻ dễ dàng qua DockerHub

- Nhược điểm : mới, cập nhật thay đổi thường xuyên

2.2 Công nghệ điều phối container và Kubernetes

2.2.1 Định nghĩa

Các container là một cách tốt để đóng gói và triển khai các ứng dụng Trong môi trường production, chúng ta cần quản lý các container chạy các ứng dụng và

Trang 33

10

tắt đi, một container khác cần phải khởi động lên Điều này sẽ dễ dàng hơn nếu được xử lý bởi một hệ thống Và giải pháp cho vấn đề này chính là công nghệ điều phối container (Container Orchestration) mà trong đó, Kubernetes là một công cụ thông dụng nhất và đã được sử dụng cho nhiều hệ thống ở các công ty lớn: Google, Slack, Shopify, Booking.com

Kubernetes cung cấp một framework để chạy các hệ thống microservices một cách mạnh mẽ[3] Nó đảm nhiệm việc nhân rộng và chuyển đổi dự phòng cho ứng dụng hệ thống, cung cấp các mẫu cho việc triển khai (Deployment), dịch vụ (Service),… Khi người dùng định nghĩa những yêu cầu mong muốn đối với hệ thống của mình, Kubernetes sẽ tự động thực hiện triển khai theo những yêu cầu đó

và cung cấp cho người dùng các công cụ cho việc theo dõi trạng thái của hệ thống, cũng như sẽ tự khởi động lại các container bị lỗi, thay thế, xóa các container không phản hồi lại cấu hình health check đã được định nghĩa

2.2.2 Các thành phần chính:

Hình 2.5: Các thành phần chính của Kubernetes

Kubernetes chia hệ thống ra làm 3 thành phần chính là Master, Node và các Addons, đảm nhiệm vai trò riêng biệt:

Trang 34

Kubernetes Master được xem như là trái tim của Kubernetes, được xây dựng

để quản lý tất cả các hoạt động, thao tác với các container trong cluster Nó bao gồm API Server (kube-apiserver), etcd, Scheduler (kube-scheduler), Controller Manager (kube-controller-manager) và Cloud Controller Manager (cloud-

controller-manager):

- API Server: cung cấp các RESTful APIs cho các thành phần khác trong Kubernetes Master API Server lưu thông tin của các đối tượng trong Kubenetes vào etcd

- etcd: là một hệ thống phân tán, mã nguồn mở, dùng để lưu trữ các giá trị key-value Kubernetes dùng etcd để lưu, cập nhập và nhân bản các data của nó

- Scheduler: có nhiệm vụ là xác định node nào trong cluster có thể sử dụng

để chạy các pods

- Controller Manager: là tập hợp các vòng điều khiển quan sát các sự thay đổi từ API Server để đảm bảo rằng cluster luôn ở trạng thái mà nó mong muốn

- Cloud Controller Manager: được sử dụng để tương tác với các Cloud Provider (Google Cloud Kubernetes, AWS, …)

Worker Node được xây dựng để chạy trên tất cả các node của Kubenetes cluster, chịu trách nhiệm quản lý và báo cáo tình trạng của các Pods cho

Kubernetes Master, bao gồm các thành phần:

- kubelet: chịu trách nhiệm quản lý và báo cáo các hoạt động của node về API Server của Kubernetes Master kubelet sẽ chạy các container sử dụng container runtime như Docker Nó sẽ không quản lý các container không được tạo bởi Kubernetes

- kube-proxy: đảm nhiệm vai trò routing giữa service và các pods

Thành phần cuối cùng của Kubernetes là các Addons, gồm các công cụ hỗ trợ cho việc quản lý Kubernetes dễ dàng và tiện lợi hơn: DNS Server, Web UI

Trang 35

12

(Dashboard) hỗ trợ quản lý Kubernetes cluster bằng giao diện, Container

Resource Monitoring (record các thông tin về hệ thống vào database và cho phép chúng ta phân tích các thông tin đó sử dụng UI),

2.2.3 Một số khái niệm

Hình 2.6: Các khái niệm trong Kubernetes

- Cluster: một cụm các máy chủ đảm nhiệm vai trò là một Worker Node và được quản lý bởi Master Node

- Cluster Node: là máy chủ (vật lý hoặc máy ảo) dùng làm Worker Node

Trang 36

- Pods: là đơn vị quản lý nhỏ nhất trong cluster, đại diện cho 1 process đang hoạt động trong 1 cluster, có chức năng quản lý hoạt động của container 1 Pod có thể quản lý 1 hoặc nhiều container bên trong nó

- Deployment: là một “kịch bản” thể hiện rõ các yêu cầu cho việc triển khai ứng dụng trên cluster

- Service: trỏ tới 1 tập hợp các pod thông qua các label để tạo thành 1 nhóm service để cho môi trường bên ngoài cluster có thể truy cập tới

2.3 Gitlab CI/CD

2.3.1 Định nghĩa

Hình 2.7: Quy trình CI/CD trong phát triển sản phẩm CNTT

Continuous Integration (Tích hợp liên tục - CI) là quá trình cho phép lập trình viên tích hợp công việc vào một branch được chia sẻ thường xuyên, tăng cường sự hợp tác khi phát triển Tích hợp thường xuyên giúp kiểm định commit, giúp lập trình viên sớm phát hiện các lỗi chức năng có thể xảy ra trong quá trình làm việc thông qua việc chạy các test suite khi phát hiện có những thay đổi mới, tăng tính

an toàn và tính lưu động cho việc phát triển sản phẩm

Continuous Delivery (Phân phối liên tục – CD) là quá trình diễn ra khi có sự

Trang 37

14

trường phát triển, thực hiện việc chuẩn bị release môi trường production Thông thường thì trước giai đoạn này sẽ có quy trình Continuous Integration (CI)

2.3.2 Ưu điểm của việc thực hiện CI/CD trong dự án

- Tiết kiệm chi phí: công việc test sẽ được thực thi bởi CI, và khi code đã pass qua lần test đó sẽ được triển khai lên môi trường production một cách

tự động, có nghĩa là đã loại bỏ được việc tốn chi phí nhân công và chi phí thời gian để xử lý công việc đó

- Nâng cao tốc độ triển khai: chi phí rút giảm được qua việc làm đó sẽ được đầu tư vào việc phát triển Vì vậy, giúp cho việc nâng cao tốc độ triển khai,

và cũng sẽ liên tục triển khai thêm các việc update mới nữa

- Thay đổi mã nguồn nhỏ hơn: do những thay đổi về code liên tục được phát hiện, kiểm tra và phân phối ra môi trường kiểm thử nên số lượng mã nguồn thay đổi sẽ được chia nhỏ ra

- Cách ly lỗi tốt hơn và nhanh hơn: mã nguồn thay đổi được chia nhỏ ra dẫn đến việc phát hiện được sớm các sai sót trong quá trình làm việc và nhanh chóng sửa chữa

- Không bao giờ gửi mã nguồn bị hỏng: quá trình phân phối được diễn ra sau khi đã hoàn tất quá trình kiểm thử và được làm hoàn toàn bằng máy, cho nên mọi sai sót xảy ra đều sẽ không được thông qua, ngăn chặn việc phân phối mã nguồn chứa lỗi

- Bước 2: Trừ owner và maintainer ra, các lập trình viên khác phải push code tính năng lên branch của mình được checkout từ develop và sau khi hoàn tất

Trang 38

thì tự merge tính năng cần test vào branch uat và tạo merge request vào branch develop

- Bước 3: Hệ thống tự động thực hiện test mã nguồn trên branch uat, nếu thành công thì sẽ triển khai tự động mã nguồn lên server uat Nếu thất bại thì sẽ thông báo lỗi và ngừng quá trình triển khai tại đó

- Bước 4: Tester vào hệ thống uat để kiểm thử và xác nhận thỏa điều kiện để triển khai lên môi trường production

- Bước 5: Owner hoặc Maintainer sẽ xem qua merge request Nếu không gặp vấn đề thì sẽ chấp nhận cho merge vào branch develop

- Bước 6: Khi tới thời gian phát hành tính năng mới, Owner merge từ develop vào master

- Bước 7: Hệ thống tự động thực hiện test mã nguồn trên branch master, nếu thành công thì sẽ triển khai tự động lên môi trường production

- Bước 8: Tester vào hệ thống production để kiểm thử và xác nhận mọi thứ thỏa điều kiện Nếu không, Owner có thể nhấn nút deploy phiên bản trước đó để rollback hệ thống về trạng thái stable trước đó

- Bước 9: Quay lại bước 2 với việc phát triển tính năng mới, đồng thời lắng nghe phản hồi từ phía khách hàng về tính năng hiện tại

2.3.4 Gitlab CI/CD

Hình 2.8: Gitlab CI/CD

Hiện nay, có rất nhiều công cụ CI/CD có mặt trên thị trường Thông thường, các hệ thống quản lý mã nguồn không kèm theo cơ chế CI/CD Nếu lập trình viên muốn triển khai thì buộc phải liên kết đến repository, phân quyền cho hệ thống đó

Trang 39

16

Từ khi Gitlab ra mắt tính năng Gitlab CI/CD, việc áp dụng CI/CD vào quy

trình phát triển sản phẩm càng dễ dàng hơn bao giờ hết Mã nguồn để ở Gitlab, rồi

cài đặt CI/CD để test và deploy mã nguồn tự động Tất cả những công đoạn CI/CD

trên đều sẽ được thực hiện bởi Gitlab Runner

2.3.5 Gitlab Runner

Hình 2.9: Quy trình thực hiện CI/CD trên Gitlab CI/CD

Gitlab Runner là thành phần cực kỳ quan trọng trong workflow Gitlab CI Nếu

không có Runner thì sẽ không có lệnh test, deploy nào được thực thi Runner có

nhiều loại, phân biệt dựa vào cái gọi là executor Khi khởi tạo runner, người dùng

sẽ phải chọn nó là loại executor nào, và nó sẽ quyết định môi trường thực thi các

câu lệnh trong file config trong project (.gitlab-ci.yml)

Trong phạm vi khóa luận này, nhóm sử dụng Gitlab Runner với executor là

Kubernetes để chạy quy trình CI/CD lên trên cluster trên Kubernetes Kubernetes

executor khi dùng với Gitlab CI/CD sẽ kết nối tới Kubernetes API trong cluster để

khởi tạo pod cho mỗi Gitlab CI/CD job[4]

Trang 40

Trước đây, khi có một yêu cầu tới phía máy chủ sẽ sinh ra một thread dẫn tới khi có quá nhiều yêu cầu thì máy chủ sẽ bị chậm chạp và việc xử lý thread cũng gây khó khăn cho lập trình viên cũng như khó tiếp cận từ lúc đầu

Vì thế, NodeJS dựa trên sự kiện và xử lý theo mô hình non-blocking I/O để tạo ra các ứng dụng nhẹ và hiệu quả cho các ứng dụng về dữ liệu thời gian thực chạy trên các thiết bị phân tán Có thể hiểu rằng, với mỗi yêu cầu tới phía NodeJS thì sẽ chẳng bao giờ gặp trường hợp bị khóa tài nguyên (lock up) như việc xử lý thread truyền thống Ngoài ra, xử lý sự kiện cũng rất dễ tiếp cận cho lập trình viên mới học, đây cũng là lý do chính mà NodeJS được phát triển mạnh mẽ trong những năm gần đây NodeJS cung cấp cho chúng ta các module JavaScript đa dạng, có thể đơn giản hóa sự phát triển của các ứng dụng web sử dụng NodeJS với các phần

Ngày đăng: 05/09/2021, 20:50

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] Docker docs, “Docker overview” [Online]. Available: https://docs.docker.com/get-started/overview/ Sách, tạp chí
Tiêu đề: Docker overview
[2] Kubernetes docs, “What is Kubernetes” [Online]. Available: https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/ Sách, tạp chí
Tiêu đề: What is Kubernetes
[3] Gitlab docs, “The Kubernetes executor” [Online]. Available: https://docs.gitlab.com/runner/executors/kubernetes.html [4] NodeJS, “About Node.js” [Online]. Available:https://nodejs.org/en/about/ Sách, tạp chí
Tiêu đề: The Kubernetes executor” [Online]. Available: https://docs.gitlab.com/runner/executors/kubernetes.html [4] NodeJS, “About Node.js
[5] Express, “About Express” [Online]. Available: https://expressjs.com/ Sách, tạp chí
Tiêu đề: About Express
[6] React Native, “Native Development For Everyone” [Online]. Available: https://reactnative.dev/ Sách, tạp chí
Tiêu đề: Native Development For Everyone
[7] Micheal Herman, “Deploying a Node App to Google Cloud with Kubernetes” [Online]. Available: https://testdriven.io/blog/deploying-a-node-app-to-google-cloud-with-kubernetes/ Sách, tạp chí
Tiêu đề: Deploying a Node App to Google Cloud with Kubernetes

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w