Về nội dung 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ốngmicroservices và ứng dụng di động bằng công nghệ React Native, các kỹ thuậtliên quan đến việc tr
Trang 1ĐẠI HỌC QUOC GIA TP HO CHÍ MINH
TRUONG DAI HOC CONG NGHE THONG TIN
KHOA CONG NGHE PHAN MEM
NGO DUC HOA
KHOA LUAN TOT NGHIEP PHAT TRIEN UNG DUNG HO TRO TU VAN
Build advisory and sharing tourist destinations application
KY SU NGANH KY THUAT PHAN MEM
TP HO 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Ệ PHAN MEM
NGO ĐỨC HÒA - 16520423
KHOA LUAN TOT NGHIEP
PHAT TRIEN UNG DUNG HO TRO TU VAN
& CHIA SE THONG TIN DU LICH CUNG NHAU
Build advisory and sharing tourist destinations application
KY SU NGANH KY THUAT PHAN MEM
GIANG VIEN HUONG DAN ThS NGUYEN THI THANH TRUC
TP HO CHi MINH, 2021
Trang 3DANH SÁCH HOI DONG 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 TS Huỳnh Ngọc Tin — Chủ tịch.
2 ThS Thái Thụy Hàn Uyên - Thư ký
3 ThS Nguyên Công Hoan — Uy viên.
Trang 4ĐẠI HỌC QUOC GIA TP HO CHÍ MINH CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
TRƯỜNG ĐẠI HỌC Độc Lập - Tự Do - Hạnh Phúc
CÔNG NGHỆ THÔNG TIN
TP HCM, ngày 22 thang 02 năm 2021
NHAN XÉT KHÓA LUẬN TOT NGHIỆP
(CUA CAN BỘ HƯỚNG DAN)
Tên khóa luân:
PHÁT TRIEN UNG DUNG HỖ TRỢ TƯ VAN & CHIA SE THONG TIN
DU LICH CUNG NHAU
Nhóm SV thực hiện: Cán bộ hướng dẫn:
Ngô ĐứcHò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/¬ Sôchương 5
Số tài liệu thamkhảo 7 Sanpham 1
Một số nhận xét về hình thức cuốn báo cáo:
Cuốn báo cáo đầy đủ các phần tóm tắt đề tài, tổng quan, phân tích thiết kế hệthống, đặc tả use case, thiết kế giao diện và tài liệu tham khảo
2 Về nội dung 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ốngmicroservices và ứng dụng di động bằng công nghệ React Native, các kỹ thuậtliên quan đến việc triển khai và quản lý hệ thống lên Google Cloud
Trang 5Kubernetes, đồng thời áp dụng quy trình tự động triển khai (Auto DevOps)
của Gitlab CI/CD.
3 Về chương trình ứng dụng:
Ứng dụng di động PackNGo, Phat trién duoc 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 va 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 lich, theo dõi realtime vi 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.
4 Về thái độ làm việc của sinh viên:
Sinh viên làm việc tích cực thực hiện đề tài, có tính thần học hỏi tiếp thu ýkiến đóng góp
Đánh gia chung:
Khoa luận đạt yêu câu của một khóa luận tot nghiệp kỹ su/ cử nhân, xêp loại Gioi
Diém từng sinh viên:
Ngô Đức Hòa: 9/10
Người nhận xét
Nguyễn Thị Thanh Trúc
Trang 6ĐẠI HỌC QUOC GIA TP HO CHÍ MINH CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
TRƯỜNG ĐẠI HỌC Độc Lập - Tự Do - Hạnh Phúc
CÔNG NGHỆ THÔNG TIN
TP HCM, ngày 19 tháng 02 năm 2021
NHAN XÉT KHÓA LUẬN TOT NGHIỆP
(CUA CAN BỘ PHAN BIEN)
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 gia Khóa luận
1 Vê cuôn bao cáo:
Số trang 87 Sốchương 5
Số bang số liệu 0 Sốhìnhvẽ 77
Số tài liệu tham khảo 7 San phẩm I
Một số nhận xét về hình thức cuốn báo cáo:
- _ Về hình thức, cuốn báo cáo tương đối trình bày đầy đủ các nội dung, đúng
định dạng Về bố cục cũng đã đạt được các yêu cầu cơ bản theo quy định
về hình thức trình bày Các hình ảnh có đánh số và ghi chú
- _ Bồ cục báo cáo bao gồm các chương:
Chương 1: Tổng quan đề tài
Chương 2: Kiến thức nền tảngChương 3: Phân tích thiết kế
Trang 7Chương 4: Triển khai và phát triển sản phẩm
Chương 5: Tổng kết
2 Về nội dung nghiên cứu:
Sinh viên đã nghiên cứu và ứng dụng những công nghệ như Kiến trúcmicroservices theo hướng một hệ thống Event Driven Architecture, tìm hiểu
các stack công nghệ tương ứng cho việc xây dựng hệ thống microservices:
NodeJS, PostgreSQL, React Native, Redis, RabbitMQ hoặc Kafka, Docker
va Kubernetes.
Sinh viên đã triển khai được thành công một hệ thống microservices tương đối
hoàn chỉnh lên Kubernetes cluster, có khả năng theo dõi tinh trạng chung của
hệ
thống và xử lý sự cố mỗi khi phát sinh van đề Đồng thời, sinh viên còn tích
hợp được Gitlab CI/CD vào project dé tự động hóa việc kiểm thử và phân phối
mã nguôn mới nhât cho hệ thông.
3 Về chương trình ứng dụng:
Ứng dụng di động đa nên tảng cho việc chia sẻ thông tin du lịch cùng nhauvới tương đối đầy đủ các chức năng như đã thiết kế ban đầu Giao diện thuận
tiện, tương thích nhiều kích cỡ màn hình hiển thị Các chức năng của ứng dụng
hoạt động tốt Việc gợi ý sản phâm hoạt động tốt, tuy nhiên cần thêm dữ liệu
dé tăng tính chính xác của việc gợi ý đồng thời cần hoàn thiện thêm dé có thé
sử dụng trong thực tế
4 Về thái độ làm việc của sinh viên:
Sinh viên thé hiện thái độ nghiêm túc khi hẹn và làm việc với giáo viên phản
biện.
Đánh giá chung:
Khóa luận đạt yêu cầu của một khóa luận tốt nghiệp kỹ sư ngành Kỹ thuật Phần
mêm, xêp loại Gidi
Trang 8Điểm từng sinh viên:
Ngô Đức Hòa: 9/10
Người nhận xét
Phan Nguyệt Minh
Trang 9LỜ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ànhnhấ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 dé có thé truyền đạt cho chúng emtrong 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ề dé tài nghiên cứu Nhờ có những lời hướng dẫn, day bảo đó, bài luận văn này củachú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 ơnchâ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ý Thay Cô dé bài luận được hoàn thiện hơn
TP HCM, ngày 28 tháng 12 năm 2020
Ngô Đức Hòa
Trang 10ĐẠI HỌC QUOC GIA TP HO CHÍMINH CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
TRƯỜNG ĐẠI HỌC Độc Lập - Tự Do - Hạnh Phúc
CÔNG NGHỆ THÔNG TIN
TP HCM, ngày 01 tháng 09 năm 2020
DE 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Ô DUC HÒA ~ 16520423Nội dung đề tài: (M6 ta 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 đề tai)
Tổng quan đề tài:
e _ 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 ky vọng là sẽ chiếm đến43% 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ố thong 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 ngau hứng, du lịch phượt đang được các bạn trẻ cực ki ư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ómnhỏ 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 11e 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 cau ngày càng cao về tính tiện dụng va sự ứng dụng cua
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 san,
Có thé ké tên một số các ứng dung 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.
e Đa số các san 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.
Mục tiêu đề tài:
e Kiên trúc microservices:
o Tìm hiêu được khái niệm về kiên trúc microservices theo hướng
một hệ thông Event Driven Architecture.
o Tim hiểu các stack công nghệ tương ứng cho việc xây dung hệ
thông microservices: NodeJS, PostgreSQL, React Native, Redis, RabbitMQ hoặc Kafka, Docker va Kubernetes.
e Ứng dung thực tế (ứng dụng chia sẻ thông tin du lich 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ý
va chia sẻ thông tin cho nhóm cùng du lịch, theo dõi realtime vi
trí của các thành viên trong đoàn khi di chuyên dé 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ọ,
e Tích hợp với các ứng dụng mang xã hội tiện cho việc chia sẻ va mời
gọi bạn bẻ cùng tham gia du lịch.
Phương pháp thực hiện:
e Nghiên cứu công nghệ
o_ Môi trường triển khai: Docker, Kubernetes, Google Cloud
Platform
o Back-end:
Trang 12= NodeJS: sử dung express framework dé tô chức dang
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 dé cache thông tin
= RabbitMQ (hoặc Kafka) lam 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,
= React Native.
= Redux, redux saga cho việc lưu trữ state cho toàn ứng
dung.
= Facebook SDK, Google Map SDK.
e Nghién cứu nghiệp vu:
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 dé 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 13phượ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: (M6 ta 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
dé 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 doan A: Trién khai hé thong 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
Giai đoạn 1
-Research
Tim hiéu dockerTim hiéu docker composeTim hiéu kubernetes
Tim hiéu NodeJS va express
framework
Tim hiéu React NativeTim hiéu api facebook, api
google map, api google storage
Tim hiéu Redis, RabbitMQ
Xây dựng use case Xây dung diagram
2 tuần (01/10/2020 —
08/10/2020)
Trang 14Giai đoạn 3 - Xây dựng database 8 tuần (08/10/2020 —
Build Xây dựng back-end 08/12/2020)
Xây dựng app
Giai đoạn 4 - Deploy ứng dụng lên server 1 tuần (08/12/2020 —
Deloy 15/12/2020)
Giai đoạn 5 - Viết báo cáo 2 tuần (15/12/2020 —
Report Review lại code 28/12/2020)
Xác nhận của CBHD TP HCM, ngày 1 thang 9 năm 2020 (Ky tên và ghi rõ họ tên) Sinh viên
(Ký tên và ghi rõ họ tên)
ThS NGUYEN THỊ THANH TRÚC NGÔ ĐỨC HÒA
Trang 15MỤC LỤC
1.1 _ Phát biểu đề tài nghiên COU oo ceccessessessessesssessessessesstesesseeseeseens |1.2 Mục tiêu và phạm vi của CC cuc net 2
1.2.1 Mục tiÊU HS HH TT xen xg 2
1.2.2 PRAM VI - 1111111293111 vn ng khen xa 3
1.3 Đối tượng sử MUN eeeecccssecsssesssssesssesssessesssessecssecsssssecssessesssecsusesecsses 31.4 — KẾt quả dự kiến -2- 2k 2k2 2112212112122 cre 31.5 _ Phương pháp nghiên cứu và nguồn số liệu -5¿55+¿ 3
1.5.2 Nguồn dữ liệu - 2-5 SE E2 2122122111121121 211111 cty 41.6 Điểm mới của luận văn : cccc2cvxtctEktrrrrkrrrrrkrrrrrrkrrrrk 41.7 Kết cấu luận văn - ¿tt 2 S121 5EEE111511E111111111115112 111111 xee 4Chương 2 KIÊN THUC NÊN TẢNG -2- 2 <+E2+E+Ee£EeEeEerxrreei 5
2.1 Công nghệ ao hóa Containerlization va Docker: - «+ 5
2.1.1 Dinh nghia — 5
2.1.2 Các thành phan chink w c ceccccccsscsscesessessessessestessessessessesssesessesses 6
2.1.3 Một số khái iG oa eeccseeeeecssssescessseeseessneseessneeeesneseessneeesseneeeen 6
2.1.4 So sánh Docker với Virtual Machine - 5 555555 S+s+ccss+ 7
2.2 Công nghệ điều phối container và Kubernetes - - 9
2.2.2 Các thành phần chính: + 2 2 +E££E£EE£EE2EEzEerEerkerxereee 102.2.3 Một số khái niệm - -c5ctccvttttttttrttrrrrttrrrrrrrrrrrrrrriio 12
2.3 €0 ]80//0900B.1 Ả.¬ 13
Trang 162.3.1 Dinh 2 nh an 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/CTD - + + kSk SH HT TT HH Hệ, 14 2.3.4 Gitlab CYU/CD nẴ 15 2.3.5 Gitlab Ñunn€T - ác ST ng ngàng nến 16
3.4 SO d6 Use Case? An 263.5 Sơ d6 lớp — Class điagram ¿- ¿5+ ++EEEeEEEE2EE2E2EeEEerkerkrex 27
3.6.1 Sơ đồ tuần tự chức năng Đăng nhập - 2-52 2 ecxerxzxxez 283.6.2 Sơ đồ tuần tự chức năng Đăng ky 2 c5z+ccxerererxee 29
3.6.3 Sơ đồ tuần tự chức năng Upload hình anh -5:-5¿ 303.6.4 Sơ đồ tuần tự chức năng Chỉnh sửa thông tin cá nhân 313.6.5 Sơ đồ tuần tự chức năng Đôi mật khẩu - zss+xczczxsxz 32
Trang 173.6.7.
3.6.8.
3.6.9.
Sơ đồ hoạt động chức năng Tạo chuyến đi mới - 33
Sơ đồ tuần tự chức năng Đánh dau địa điểm -¿-c+ccssx¿ 34 Sơ đồ tuần tự chức năng Cập nhật thông tin chuyến đi 35
Sơ đồ hoạt động chức năng Mời bạn bè tham gia chuyến di 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 vi 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 -c:- + 40 3.7.1 Giao diện màn hình Đăng nhập -¿- c5 S5 ‡ 2< ++csssssxss 40 3.7.2 Giao diện màn hình Đăng ký ¿5c St ‡+‡sxsesserrsrres 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 2s+s+=szs+szs+z 48 3.7.5 Giao diện màn hình Tao mới chuyến đi 2 2s s2 s+¿ 51 3.7.6 Giao diện màn hình Danh sách chuyến đi -ss+- 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 điện màn hình Xem vi trí thành viên trong chuyến đi 62
3.7.9 Giao điện màn hình Viết review sau chuyến đi - 64
Chương 4 TRIÊN KHAI VÀ PHÁT TRIEN SAN PHẨM 66
4.1 Đăng ký tai khoản Google và khởi tao Project cùng với Cluster 66
4.2 Cài đặt docker, gcloud sdk và kubectÏ 5 55 <+++s<++<s+ 71 4.3 Dung project PackNGo Core API và triển khai lên cluster đã tạo 72
4.4 Tích hợp Gitlab CI/CTD - -.- - k*nnvvnnnHnHngg nnưy 77 4.5 Thực hiện việc trigger CI/CD khi push code s55 +s++ 82
Chương 5 TONG KẾT 2-2 S2E2E2E12E1EE1E7171121121111E21rxeE 85
Trang 19DANH MỤC HÌNH VE
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ẻ 2Hì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ủ ao Virtual Machines - 5-5 S2 *++scxsseeresse 7
Hình 2.4: Hệ thống file cắt lớp Container 2-2 + s2E++E+2EE+EEeEEerErEezrxrrxerxee 9Hình 2.5: Các thành phần chính của Kubernetes :- 2: 22 s¿22s+2sz2zx2zxzex 10
Hình 2.6: Các khái niệm trong Kubernef€s - - 5 2c 33+ * + Essvkrseersseerss 12
I0 1:8230600:.1589)//090 1n 15
Hình 2.9: Quy trình thực hiện CI/CD trên Gitlab CL/CD - 5-55 5<<++s53 16 Hình 2.10: Công nghệ NodeJS - 2 12112212 112 1n HH HH Hiệp 17
Hình 2.11: Framework EXT€SS c0 0221121125111 1 11118111115 1118118111111 xeE 18
Hình 2.12: Native App va Hybrid ADpp -. 5c 32c 32112 EEsEErrrksrrerirsrrsrrree 19 Hình 2.13: Công nghệ React ÌNatfIVe Q00 HS S1 HH HH 1H 11 1g ray 20
Hình 2.14: Hệ quan tri cơ sở dữ liệu PostgreSQL, - 55 S5 + + x+sssxssexss 21
Hình 3.1: Sơ đồ kiến trúc hệ thống - 2 ¿+ 1+SE+EE2EE2EE£E£EEEEESEE2EEEEErEerkrrkrree 24Hình 3.2: Sơ đồ triển khai của hệ thống -2- 2 2+SE+EE+EE£EE+2E2EEzEEerxerrrrer 25
Hình 3.3: Sơ đồ Use-case của hệ thống ¿- ¿©2222 22Et2E22EE2EEeEEsrkrrrrres 26
Hình 3.4: Sơ đồ lớp của hệ thống -. - 2 ¿SE EEEE2E2E21EE1E2121121121 11111 xe 27Hình 3.5: Sơ đồ tuần tự chức năng Đăng nhập 2-5 s+cx+E+2EzEerxerxerszxee 28
Hình 3.6: Sơ đồ tuần tự chức năng Đăng ký - 2-52 Ss cteEEeEErEEEerkerkerrrrex 29
Hình 3.7: Sơ đồ tuần tự chức năng Upload hình ảnh 2:2 ©5222xz+sz+>+2 30Hình 3.8: Sơ đồ tuần tự chức năng Chỉnh sửa thông tin cá nhân 31Hình 3.9: Sơ đồ tuần tự chức năng Đổi mật khâu 2- 2 2 2+Eczxezezsse2 32
Hình 3.11: Sơ đồ tuần tự chức năng Đánh dấu địa điểm -¿-c-cccccccxersxerez 34Hình 3.12: Sơ đồ tuần tự chức năng Cập nhật thông tin chuyến đi - 35
Hình 3.13: Sơ đồ tuần tự chức năng Mời bạn bè tham gia chuyến đi 36
Trang 20Hình 3.14: Sơ đồ tuần tự chức năng Theo dõi vi trí thành viên trong đoàn 37Hình 3.15: Sơ đồ tuần tự chức năng Cập nhật vi trí hiện tại - 38Hình 3.16: Sơ đồ tuần tự chức năng Viết review sau chuyên đi - 39
Hình 3.18: Màn hình Dang ky - c2 2 1311221121111 11 1181111111111 15 ke 42
Hình 3.19: Màn hình Quản lý thông tin cá nhân 5 25 S+s*S+>+skx+eexses2 44
Hình 3.21: Màn hình Thay đổi mật khâu 2- 2 2 2+E£EE£EE2EE2EE2EeEEerxerxrxee 46
Hình 3.22: Màn hình Danh sách bài viẾt - -555c25ccccccxrerxrrrrrrrrrrrrrrree 48
Hình 3.23: Màn hình Danh sách bài viết với action bufton - 2-2-5 5z>s2 49Hình 3.24: Màn hình Tao mới chuyến đi 2-2-5 £+S+2EE+EE+£E+zEzE+zExzrxerxrrez 51Hình 3.25: Man hình Tìm địa Gi@m c.cccccccccecccceececcececescsesesescecsesusecsesvensececsveeeeeees 52
Hình 3.26: Màn hình Gắn tọa độ điềm di chuyền Am " 53 Hình 3.27: Màn hình Chon ngày cho chuyến di c cececccccscessessesessessessssssessessessesseaee 54
Hình 3.28: Màn hình Chon giờ cho chuyến đi 2 2 2 E+2E+£E2E++£++£xerxrzez 55Hình 3.29: Màn hình Danh sách chuyến đi 2-2 2s E+E++EE+E£+Ee£Eerxerszxez 57
Hình 3.31: Màn hình Chinh sửa chuyến đi với popup xác nhận xóa chuyến đi 60Hình 3.32: Màn hình Xem vị trí thành viên trong chuyến đi - 5 s2 s2 62Hình 3.33: Màn hình Xem vị trí thành viên trong chuyến đi - 5 52 52 64
Hình 4.1: Form tạo tài khoản Google - 5c 2c 3221121115115 ExeE 66
Hình 4.2: Tao Project TỚI SG 2c 221112111511 351 1511511111111 11 E11 E11 1111k tkr 67
Hình 4.3: Điền thông tin Project mới -¿- 2 + seEx‡EE2EE2EE2EEEEEEEEEEEEEEEEEEErkerkrree 68Hình 4.4: Tìm kiếm product Kubernetes Engine 2 + 2 + s2 2+Ee£xe£zz+zx+2 68
Hình 4.5: Enable Kubernetes Engine APÏ - - + Sc s32 vn triệt 69
Hình 4.6: Tao cluster mmỚI - - 2111111112253 11 111111530111 11kg 11 ky 69
Hình 4.7: Form tao cluster mỚII - + < +22 2113223111115 1 1135111115511 11 xee 70
Hình 4.8: Danh sách các cluster đã fạO - - - c2 1112231111253 1 111531111151 EEcezzxe 70
Trang 21Dockerfile dé build image -2- 2: ©222S222Et2E2EE2EEtzxrerxrzrxres 73
Dựng container lên và kiểm tra tình trạng của container đã dựng 75
Push image lên Google Cloud R€g1SfFV - - 555 +5 ++ss+scxseeseres 75 Google Cloud Registry ST ng HH Hư 75
File deployment yall - + 2 331113211 129111 51111511111 xrE 76
Kiểm tra tình trạng của cluster bằng k9s ¿- 2 c+ccccccerssreee 77
Thêm Kubernetes cluster vào project ø1tlab - csscsc+sssxssersss 77
Chọn Thêm cÏusfer - - - + 2133322211332 13312331111 5311112811 18x re 77
Form tích hợp project với Kubernetes cluster đã có sẵn 78
Cấu hình gitlab CI/CTD -¿- 2-2 s+SE+EEE2EE+EE£EEEEEEEEEEEEEEEEEEEkerkerrrrex 79
Bật tính năng Auto DevOps dé thực hiện CI/CD 5- 55+: 79
Cấu hình cho Gitlab Runner :22++22+v2£xvvsrxvrsrrrrrsrrreg 80
Kiểm tra tình trang Gitlab Runner trên clusfer - 2-22 5+: 81
I0 In 10011177 83
Trang 22DANH MỤC TU VIET TAT
CSDL Cơ sở dit liệu Cơ sở đữ liệu cho ứng dụng
HTTP HyperText Transfer Protocol Giao thức truyền siêu văn banJSON JavaScript Object Notation Dinh dang trao đổi dit 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ụ phat
triển phần mềm
API Application Programming Giao diện lập trình ứng dụng
Interface
CUCD Continuous Integration and Quy trinh tich hop va trién khai
Continuous Delivery liên tục
VM Virtual Machine Máy ảo
OS Operating System Hệ điều hành
Trang 23Chương 1 TONG QUAN DE TÀI
1.1 Phát biểu dé tai nghiên cứu
Việt Nam đang là một trong những nước có nganh 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ọngGPD 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ạtkhi 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 vi 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àngngà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àycà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ẩmcô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 lich đang rất thịnh hành trên thị trường ngày
nay như VeXeRe, Booking, Agoda, Trivago, TripAdvisor, diadiemdulich.
Da số các san 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 van dé chia sẻ
lịch trình và hẹn nhóm di du lịch cùng nhau.
Trang 24Hình 1.1: Hình thức du lịch phượt dang 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
- Muc 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
- Tao ra ứng dụng với giao diện thân thiện va dé sử dung, 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 vi trí của các thành viên trong đoàn
khi di chuyên dé 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,
nha tro,
- Tich hợp với các ứng dụng mang 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 251.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 mobileapplication bang React Native
- Thoi 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: Pham vi nghiên cứu ở mức tìm hiéu và phát triển hệ
thông microservices va ứng dụng trên di động.
1.3 Đối tượng sử dụng
Những người sử dụng điện thoại thông minh có sở thích đi du lịch phượt cá
nhân hoặc theo nhóm.
1.4 Kết quả dự kiến
Hoàn thành ứng dụng di động PackNGo 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à quan lý chuyến đi du lịch phượtcủa cá nhân hoặc cả nhóm Hệ thống xử lý phía server chạy 6n định va dé dangquản lý cũng như nâng cấp khi cần thiết
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ênquan đế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 dé chọn ra cấu trúc xây dung
ứng dụng phù hợp.
Trang 261.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ự độngtriể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áttriể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ácbả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 va phát triển sản phẩm
Chương 5: Tổng kết
Trang 27Chương2 KIÊN THỨC NEN TANG
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ậnchuyê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ácnhau về kiến trúc ha tầng giữa các môi trường triển khai khác nhaull 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ửacau 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
Trang 282.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 cu dé đóng
gói ứng dụng.
- Docker Hub: là dich vu cloud dé chia sé ứng dụng, có thé thao tác pull/push
voi cac 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” Chang 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 dé một ứng dụng có thể chạy được Mỗi một docker
container được tao 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 dé Docker có thé đọc và thực
hiện dé đóng gói một image theo yêu cầu người dùng
- Orchestration: là các công cụ, dich vụ dùng dé điều phối và quản lý nhiều
containers sao cho chúng làm việc hiệu quả nhat!”!.
Trang 29VIRTUAL MACHINE VIRTUAL MACHINE VIRTUAL MACHINE
HYPERVISOR
HOST OPERATING SYSTEM
PHYSICAL SERVER
Hình 2.2: Mô hình máy chủ ao Virtual Machines
Khi mô hình triển khai bằng các máy ảo (Virtual Machine) ra đời, tài nguyêncủ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:
- Ng6n tài nguyên: khi chạy 1 máy ảo, nó sẽ luôn chiếm | phan tài nguyên
cố định Vd: máy chủ có 512GB SSD, 16GB RAM Tao 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 dé 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 30- Công kênh: việc phải chịu tải cho cả 1 nhóm máy ảo như vậy thì server
không thé chay hét hiéu suat duoc
Khi đó, công nghệ ảo hóa containerlization ra đời nham khac phục những
khuyết điểm trên
APPLICATION APPLICATION APPLICATION
CONTAINER CONTAINER CONTAINER
PHYSICAL SERVER OR VIRTUAL MACHINE
Hình 2.3: Mô hình máy ao 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ốngvới ảo hóa), nhưng điều đặc biệt là các máy con (Guess OS) này đều dùng chungphầ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ẹ (RAMchăng ghan) 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 31Cu thé, mỗi máy con (container) mới, nó sẽ được xây dựng dựa trên 1 file anh
(image) dạng chi đọ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 Nhu
vậy, từ 1 image ban dau, ta có thé tạo nhiều máy con mà chỉ tốn rất ít dung lượng
6 đĩ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
Trang 32tắt đi, một container khác cần phải khởi động lên Điều này sẽ dé dang 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ềuphố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 dé chạy các hệ thống microservices một
cách mạnh mẽ! Nó đảm nhiệm việc nhân rộng và chuyên đôi dự phòng cho ứngdụ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 cau hình health check đã được định nghĩa
Hình 2.5: Các thành phan chính của Kubernetes
Kubernetes chia hệ thong ra làm 3 thành phan chính là Master, Node và các
Addons, đảm nhiệm vai trò riêng biệt:
10
Trang 33Kubernetes Master được xem như là trai tim của Kubernetes, được xây dựng
dé 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) va 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 dé lưu trữ các giá trị
key-value Kubernetes dùng etcd dé lưu, cập nhập và nhân bản các data
của nó.
Scheduler: có nhiệm vu là xác định node nao trong cluster có thể sử dụng
dé 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 dé đảm bảo rằng cluster luôn ở trang 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 dé chạy trên tat cả các node của Kubenetes
cluster, chịu trách nhiệm quản ly va báo cáo tình trạng của các Pods cho
Kubernetes Master, bao gồm các thành phan:
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 ly các container không
được tạo bởi Kubernetes.
kube-proxy: đảm nhiệm vai trò routing ø1ữ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
11
Trang 34(Dashboard) hỗ trợ quản lý Kubernetes cluster bang giao điệ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ử dung UJ),
2.2.3 Một số khái niệm
Service
Deployment
- 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 ly hoặc máy ảo) dùng lam Worker Node.
12
Trang 35- Pods: là đơn vị quản lý nhỏ nhất trong cluster, đại điện cho 1 process đang
hoạt động trong | 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 dé tạo thành 1 nhóm
service dé 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
CI/CD
~~ £TM
Plan Code Build Test Release Deploy Operate
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, tang 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ậptrì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ệcthông qua việc chạy các test suite khi phát hiện có những thay đổi mới, tăng tinh
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ựthay đổi code và sẽ tiến hành tự động merge code và tạo ban build dành cho môi
13
Trang 36trườ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 (C]).
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 va 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ỏ hon: do những thay đổi về code liên tục được pháthiện, kiểm tra và phân phối ra môi trường kiểm thử nên số lượng mã nguồnthay đô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 danđế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 rasau 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.
2.3.3 Quy trình CI/CD
Có rất nhiều quy trình, công cụ khác nhau dé ứng dụng CI/CD vào dự án
Dưới đây là quy trình được áp dụng trong đề tài khóa luận này:
Bước 1: Khởi tao repository va có branch default là master dùng cho môi trường production, branch develop dùng cho môi trường staging va branch uat
dùng cho môi trường user acceptance testing (môi trường test dành cho tester)
Bước 2: Trừ owner va 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
14
Trang 37thì 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 that bai thì sẽ thôngbá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 dé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
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 nghephản hồi từ phía khách hàng về tinh năng hiện tại
2.3.4 Gitlab CI/CD
Pipeline Jobs 9 Tests
Preparation
O coroos
Building syntax Testing Deploy
© ouild-oroductio G @ estint @ ohpstan
dé có thé lay mã nguồn từ respository
15
Trang 38Từ khi Gitlab ra mắt tính năng Gitlab CI/CD, việc áp dụng CI/CD vào quytrình phát triển sản phẩm càng dé dang hơn bao giờ hết Mã nguồn dé ở Gitlab, rồi
cài đặt CI/CD dé test va deploy mã nguồn tự động Tat cả những công đoạn CI/CDtrên đều sẽ được thực hiện bởi Gitlab Runner
2.3.5 Gitlab Runner
> >
code GitLab install pushed trigger dependencies,
to GitLab GitLab Runner run tests job
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 nao, 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ử dung Gitlab Runner với executor là
Kubernetes dé chạy quy trình CI/CD lên trên cluster trên Kubernetes Kubernetesexecutor 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 jobf.
16
Trang 392.4 NodeJS/Express
2.4.1 Công nghệ NodeJS
NodeJS là một JavaScript runtime được xây dựng trên JavaScript Engine V8
của Chrome và là một mã nguồn mở đa nền tảng dùng đề phát triển các ứng dụng
phía server và các ứng dụng liên quan đến web”.
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ử ly theo mô hình non-blocking I/O dé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 NodeJSthì 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 rat dé tiếp cận cho lập trình viênmớ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 gan đâ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 dung web sử dụng NodeJS với các phần
mở rộng này.
17
Trang 402.4.2 Framework Express
nedes
—XOFQSS
Hình 2.11; Framework Express
Express là một Framework nhỏ nhưng linh hoạt được xây dựng trên nền tang
của Nodejs, cung cấp đầy đủ các tính năng mạnh mẽ để phát triển web hoặcmobilel9l,
Express cung cấp thêm các tính năng dé lập trình viên lập trình tốt hon ma
không làm giảm tốc độ của Node1S
18