TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN ĐHQG TP.HCM
KHOA : CÔNG NGHỆ PHẦN MỀM
BÁO CÁO ĐỒ ÁN 2
DỊCH VỤ ĐÁM MÂY HỖ TRỢ DEVELOPER XÂY DỰNG ỨNG DỤNG DI ĐỘNG
Cloud service for Mobile developer – Continuous Integration
Giảng viên hướng dẫn
NGUYỄN THỊ THANH TRÚC
Sinh viên thực hiện :
1. Phan Lê Quang
-
17520950
NHẬN XÉT CỦA GIẢNG VIÊN
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
…………………………………………………………………………………………………
2
LỜI CẢM ƠN
Đầu tiên, chúng em xin gởi lời cảm ơn chân thành đến tập thể quý thầy cô
Trường Đại học Công nghệ thông tin – Đại học Quốc gia TP.HCM và đặc biệt là cô
Nguyễn Thị Thanh Trúc giảng viên Khoa Công Nghệ Phần Mềm. Thầy đã trực tiếp
hướng dẫn tận tình, sửa chữa và đóng góp nhiều ý kiến q báu giúp nhóm tác giả
hồn thành tốt báo cáo đồ án mơn học. Bên cạnh đó, một lần nữa xin cảm ơn nhóm
các bạn cùng lớp làm khóa luận đã động viên, thảo luận và góp ý cho nhóm đồng thời
đã khơi thêm nguồn động lực cho nhóm để tiếp thêm động lực cho nhóm trong giai
đoạn đầy khó khăn.
Trong q trình làm đồ án mơn học, mặc dù đã cố gắng hồn thành đồ án với
sự góp sức của các thành viên, tuy nhiên không tránh khỏi được những sai sót, hạn
chế. Nhóm chúng em mong nhận được sự góp ý của q cơ và các bạn để được hồn
thiện hơn.
Sinh viên thực hiện
Phan Lê Quang
TP.Hồ Chí Minh, ngày 24 tháng 12 năm 2020
3
MỤC LỤC
Table of Contents
CHƯƠNG 01.
GIỚI THIỆU ĐỀ TÀI ..................................... 11
01.01 Đề tài ......................................................................................................................................... 11
01.02 Lý do chọn đề tài ...................................................................................................................... 11
CHƯƠNG 02.
TỔNG QUAN ĐỀ TÀI .................................. 12
02.01 Mục tiêu và phạm vi ................................................................................................................. 12
02.01.01 Mục tiêu ........................................................................................................................... 12
02.01.02 Phạm vi đề tài................................................................................................................... 12
02.01.03 Đối tượng người dùng chính ............................................................................................ 13
CHƯƠNG 03.
CƠ SỞ LÝ THUYẾT .................................... 13
03.01 React JS .................................................................................................................................... 13
03.01.01 Khái niệm ......................................................................................................................... 13
03.01.02 Ưu điểm ........................................................................................................................... 14
03.01.03 Khuyết điểm ..................................................................................................................... 14
03.02 Node JS ..................................................................................................................................... 15
03.02.01 Khái niệm ......................................................................................................................... 15
03.02.02................................................................................................................................................ 16
03.02.03 Ưu điểm ........................................................................................................................... 16
03.02.04 Khuyết điểm ..................................................................................................................... 17
03.03 MongoDB ................................................................................................................................. 17
03.03.01 Khái niệm ......................................................................................................................... 17
03.03.02 Đặc điểm .......................................................................................................................... 18
03.03.03 Ưu điểm ........................................................................................................................... 18
03.03.04 Khuyết điểm ..................................................................................................................... 19
03.04 Docker....................................................................................................................................... 19
03.04.01 Khái niệm ......................................................................................................................... 19
03.04.02 Đặc điểm .......................................................................................................................... 19
03.04.03 Ưu điểm ........................................................................................................................... 20
03.04.04 Khuyết điểm ..................................................................................................................... 20
03.04.05 Khái niệm liên quan ......................................................................................................... 20
03.05 CI (Continuous Integration) ...................................................................................................... 21
03.05.01 Khái niệm ......................................................................................................................... 21
03.06 CD (Continuous Deployment) .................................................................................................. 22
03.06.01 Khái niệm ......................................................................................................................... 22
03.07 Agile ......................................................................................................................................... 23
03.07.01 Khái niệm ......................................................................................................................... 23
03.07.02 Giá trị ............................................................................................................................... 23
4
03.07.03 Nguyên tắc ....................................................................................................................... 26
03.08 Docker....................................................................................................................................... 28
03.08.01 Khái niệm ......................................................................................................................... 28
03.08.02 Đặc điểm .......................................................................................................................... 28
03.08.03 Ưu điểm ........................................................................................................................... 29
03.08.04 Khuyết điểm ..................................................................................................................... 29
CHƯƠNG 04.
khảo sát đề tài ............................................. 30
04.01 Khảo sát thực trạng ................................................................................................................... 30
04.02 Các sản phẩm tương tự trên thị trường ..................................................................................... 31
04.02.01 GitlabCI............................................................................................................................ 31
04.02.02 Github action .................................................................................................................... 32
CHƯƠNG 05.
PHÂN TÍCH BÀI TỐN ............................... 33
05.01 Objective ................................................................................................................................... 33
05.02 Release ...................................................................................................................................... 33
05.03 Phân tích thiết kế yêu cầu ......................................................................................................... 35
05.03.01 Sơ đồ Use-Case ................................................................................................................ 35
05.03.02 Sequence diagram ............................................................................................................ 39
05.03.03 User flow .......................................................................................................................... 42
05.03.04 Class diagram ................................................................................................................... 47
05.03.05 System architecture .......................................................................................................... 48
CHƯƠNG 06.
CÀI ĐẶT VÀ KIỂM THỬ ............................. 49
06.01 Cài đặt ....................................................................................................................................... 49
06.01.01 Cài đặt .............................................................................................................................. 49
06.01.02 Môi trường phát triển và triển khai phần mềm ................................................................ 49
CHƯƠNG 07.
KẾT LUẬN ..................................................... 50
07.01 Kết quả phần mềm .................................................................................................................... 50
07.01.01 Các chức năng đã làm ...................................................................................................... 50
07.01.02 Các chức năng chưa cài đặt.............................................................................................. 50
07.01.03 Điểm nổi bật ..................................................................................................................... 50
07.01.04 Hướng phát triển .............................................................................................................. 51
5
ĐẠI HỌC QUỐC GIA TP. HỒ 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
ĐỀ CƯƠNG CHI TIẾT
TÊN ĐỀ TÀI TIẾNG VIỆT: Dịch vụ đám mây hỗ trợ developer xây dựng ứng
dụng di động
TÊN ĐỀ TÀI TIẾNG ANH: Cloud service for Mobile developer – Continuous
Integration
Giảng viên hướng dẫn: Nguyễn Thị Thanh Trúc
Thời gian thực hiện: Từ ngày 07/09/2020 đến ngày 24/12/2020
Sinh viên thực hiện:
1. Phan Lê Quang
– 17520950
Nội dung đề tài
● Tổng quan:
o Hiện nay với tốc độ phát triển vượt bậc của lĩnh vực công nghiệp
phần mềm, song song đó là nhu cầu làm sản phẩm phần mềm ngày
càng cao. Các developer sẽ rất tốn thời gian trong việc : triển khai,
kiểm thử,... vì vậy việc ra đời một công cụ CI(Continuous
Integration) CD(Continuous Delivery) là hết sức cần thiết để tự động
hóa các q trình nói trên. Bên cạnh đó hầu hết các cơng ty phần
mềm hiện nay đều áp dụng mơ hình Agile, với tư tưởng của Agile
ln đón nhận sự thay đổi liên tục, bàn giao liên tục với tốc độ cao
và tần suất lớn , chính vì lẻ đó hệ thống CI,CD lại càng đóng vai trò
quan trọng trong việc đẩy nhanh tốc độ bàn giao và phát triển sản
phẩm, tiết kiệm tối đa nhân lực. Trong phạm vi đồ án này, nhóm em
sẽ xây dựng một hệ thống phục vụ cho mobile developer để tự động
hóa một trong những bước cuối trong quá trình phát triển phần mềm
6
một cách nhanh chóng và liên tục - hay cịn gọi là Contiuous
Integration (CI)
o Dịch vụ đám mây hỗ trợ developer xây dựng ứng dụng di động: Là
hệ thống hỗ trợ developer trong giai đoạn build ứng dụng. Thay vì
sau khi phát triển xong developer phải sử dụng máy của chính họ
để build ứng dụng thì có thể sẽ rất tốn thời gian trong việc cấu
hình cũng như tốn nhiều thời gian chờ đợi. Nhờ có CI mà việc
build ứng dụng sẽ được tự động hóa tiết tiệm tối đa thời gian và
công sức của developer.
o Mục tiêu: Xây dựng một hệ thống CI hỗ trợ mobile developer build
ứng dụng nhanh nhất có thể. Build app đơn giản chỉ bằng những
cấu hình đơn giản và build hồn tồn bằng dịch vụ đám mây,
không tốn tài khuyên máy local và tốc độ build nhanh. Đáp ứng
nhu cầu tốc độ build nhanh và build liên tục trong các mơ hình
phát triển phần mềm hiện đại. Bên cạnh đó hệ thống cũng hỗ trợ
các developer cá nhân chưa có kinh phí thuê các hệ thống CI
chuyên nghiệp.
● Đối tượng:
o Các đội phát triển sản phẩm (phần mềm) vừa và nhỏ (Chưa có
kinh nghiệm trong việc xây dựng CI)
o Những developer cá nhân chưa có kinh phí th dịch vụ CI
chun nghiệp.
● Phương pháp thực hiện: nhóm 01 thành viên, tự lên hoạch, tự tổ chức,
tự thiết kế hệ thống và tìm hiểu các kiến thức liên quan. Sử dụng công
7
cụ quản lý task như To Do của Microsoft. Liên hệ giảng viên khi gặp
những khó khăn về đề tài cả về mặt nghiệp vụ lẫn công nghệ.
● Công nghệ phát triển: Công nghệ sử dụng gồm
o Front-end: Sử dụng thư viện UI ReactJS và ngôn ngữ thiết kế
Material
o Back-end: Sử dụng NodeJS và framework ExpressJS. Sử dụng
kiến trúc MVC để xây dựng phần mềm.
o Database: Sử dụng cơ sở dữ liệu MongoDB
o Deployment: Deploy bằng Docker
● Kết quả mong đợi: Kết quả cuối cùng sẽ có được một hệ thống CI và
developer có thể build app bằng những cấu hình đơn giản nhất. Bên
cạnh đó hệ thống cịn hỗ trợ trigger build bằng các cài đặt của người
dùng.
Kế hoạch thực hiện:
STT
Cơng việc
Thời gian thực
Phân
hiện
cơng
Module 1: Phân tích và thiết kế
1
1.1
1.2
8
Sprint 1: Thiết kế dự án và viết
tài liệu đặc tả - giai đoạn 1
Tìm hiểu về quy trình nghiệp vụ
của CI
Phân tích, xác định yêu cầu viết
tài liệu đặc tả.
4 tuần
(từ 07/09/2020
đến 30/09/2020)
Lê Quang
Tìm hiểu, lựa chọn các cơng
1.3
nghệ và kỹ thuật, cơng cụ áp
dụng trong đồ án.
2
2.1
2.2
2.3
2.4
Sprint 2: Thiết kế dự án và viết
tài liệu đặc tả P2 - giai đoạn 2
Thiết kế cơ sở dữ liệu từ tài liệu
đặc tả
Thiết kế sơ đồ kiến trúc hệ thống
(Vẽ sơ đồ)
Thiết kế giao diện với các thành
phần cơ bản (Hình vẽ)
Viết document thiết kế và phân
tích nghiệp vụ và hệ thống.
Module 2: Cài đặt và hiện thực hệ thống
3
3.1
3.2
3.3
4
4.1
4.2
4.3
9
Sprint 4: Xây dựng trang chủ
Cài đặt các components
Xây dựng giao diện trang chủ và
các build gần nhất
Viết các service ở client để giao
tiếp với server & tìm hiểu Docker
Sprint 4: Xây dựng trang setup
một CI
Cài đặt các components
Xây dựng trang loading và các
menu cần thiết
Viết các service ở client để giao
tiếp với server
8 tuần
(từ 30/09/2020
đến 30/11/2020)
5
5.1
5.2
6
6.1
6.2
Sprint 5: Xây dựng Dockerfile để
cài đặt các components cần thiết
Cài đặt các components UI cịn
thiếu
Tích hợp Docker vào server
Sprint 6: Triển khai hệ thống
bằng Docker
Test những test case của luồng
positive
Hoàn thiện đồ án
Module 3: Kiểm thử, sửa lỗi và đóng gói.
7
7.1
Tuần 14&15
Sprint 7: Kiểm thử và sửa lỗi
Kiểm thử đơn vị (UnitTest) cho
các chức năng quan trọng
2 tuần
(Từ 30/11/2020
đến 24/12/2020)
Xác nhận của CBHD
Tp. HCM, ngày 24 tháng 12 năm 2020
(Ký tên và ghi rõ họ tên)
Sinh viên
(Ký tên và ghi rõ họ tên)
Nguyễn Thị Thanh Trúc
10
CHƯƠNG 01.
GIỚI THIỆU ĐỀ TÀI
01.01 Đề tài
Đề tài: “DỊCH VỤ ĐÁM MÂY HỖ TRỢ DEVELOPER XÂY DỰNG ỨNG DỤNG DI
ĐỘNG ”
01.02 Lý do chọn đề tài
Hiện nay ở các công ty phần mềm ở mọi kích cỡ ngày càng phát triển linh động về
mặt cơng nghệ. Bên cạnh đó việc ứng dụng DevOps ngày càng phổ biến và không
thể thiếu trong các team. Song, ở thời điểm hiện tại việc build ứng dụng khá mất thời
gian, ví dụ : để build một ứng dụng Android viết bằng Java thì developer cần cấu hình
rất nhiều thứ để bắt đầu build ứng dụng, không những thế việc build ứng dụng đòi hỏi
cấu hình tương đối, nếu máy cấu hình khơng cao thì trong lúc build ứng dụng
developer khơng thể làm gì khác ngồi việc ngồi chờ . Thật vậy, nhờ có CI mà
developer chỉ cần lên hệ thống và vài thao tác cơ bản thì ứng dụng đã được build.
Khơng những thế, hàng loạt thao tác sau khi build còn được diễn ra tự động như: Gửi
mail thông báo, dọn dẹp thư mục build, publish build, trigger build khác.
Tuy nhiên, để có một hệ thống CI khơng hề đơn giản, có 2 cách cơ bản sau :
-
Bạn phải tự build một hệ thống CI từ đầu tốn nhiều thời gian và công sức. Chưa
kể chi phí bảo trì cho hệ thống CI đó.
-
Nếu khơng, bạn phải th/mua một hệ thống CI chun nghiệp với chi phí khá
cao. Rõ rang, đây khơng phải giải pháp tốt cho các team vừa và nhỏ hay là các
developer cá nhân ở các dự án mã nguồn mở miễn phí.
Từ những khó khăn nói trên, đây là thời cơ cần thiết để ra đời một hệ thống CI mã
nguồn mở, không những cung cấp cho người dung CI trên hệ thống có sẵn với cấu
hình vừa phải mà cịn cung cấp source-code để người dung có thể triển khai lên hệ
thống của họ tự túc.
11
Chính vì lẽ đó, nên nhóm quyết định thực hiện đề tài “Xây dựng Dịch vụ đám mây hỗ
trợ developer xây dựng ứng dụng di động” nhằm giúp developer ở các đội phát triển
phần mềm vừa và nhỏ có thể build ứng dụng chỉ với vài thao tác đơn giản, tiết kiệm
tối đa thời gian, công sức & chi phí. Đây là một điều không thể thiếu để phát triển một
sản phẩm thành công.
CHƯƠNG 02.
TỔNG QUAN ĐỀ TÀI
02.01 Mục tiêu và phạm vi
02.01.01
Mục tiêu
Xây dựng một hệ thống CI hỗ trợ các mobile developer build ứng dụng di động với
vài bước đơn giản, tiết kiệm tối đa thời gian, công sức và chi phí.
02.01.02
Phạm vi đề tài
Trong phạm vi đề tài lần này, hệ thống của nhóm sẽ chỉ bao gồm những chức năng
cơ bản như sau:
● Xác thực user thông qua Github API
● Build ứng dụng từ source vesion control cụ thể là Github
● Build ứng dụng bằng template mặc định dành cho ứng dụng Android build bằng
Java/Kotlin
● Gửi mail thông báo kết quả
● Publish build sau khi build thành công
12
● Trigger build theo điều kiện người dung cài đặt
02.01.03
Đối tượng người dùng chính
Trong đồ án này, đối tượng người dùng mà hệ thống muốn hướng tới gồm:
-
Các đội phát triển sản phẩm (phần mềm) vừa và nhỏ (Chưa có kinh nghiệm
trong việc xây dựng CI)
-
Những developer cá nhân chưa có kinh phí thuê dịch vụ CI chuyên nghiệp.
CHƯƠNG 03.
CƠ SỞ LÝ THUYẾT
03.01 React JS
03.01.01
Khái niệm
React.js 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. Trong khi những framework khác cố gắng hướng
đến một mơ hình MVC hồ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. Nếu như AngularJS là một Framework cho
phép nhúng code javasscript trong code html thông qua các attribute như ng-model,
ng-repeat...thì với react là một library cho phép nhúng code html trong code
javascript nhờ vào JSX, bạn có thể dễ dàng lồng các đoạn HTML vào trong JS.Tích
hợp giữa javascript và HTML vào trong JSX làm cho các component dễ hiểu hơn
React là một thư viện UI 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. Một trong những điểm hấp dẫn
của React là thư viện này không chỉ hoạt động trên phía client, mà còn được render
13
trên server và có thể kết nối với nhau. 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.
03.01.02
●
Ưu điểm
cho phép ta trộn giữa code HTML và Javascript. Ta có thể them vào các đoạn
HTML vào trong hàm render mà không cần phải nối chuỗi. Đây là đặc tính thú vị
của ReactJS. Nó sẽ chuyển đổi các đoạn HTML thành các hàm khởi tạo đối tượng
HTML bằng bộ biến đổi JSX.
●
Nó có nhiều cơng cụ phát triển: Khi bạn bắt đầu ReactJS, đừng quên cài đặt ứng
dụng mở rộng của Chrome dành cho ReactJS. Nó giúp bạn debug code dễ dàng
hơn. Sau khi bạn cài đặt ứng dụng này, bạn sẽ có cái nhìn trực tiếp vào virtual
DOM như thể bạn đang xem cây DOM thông thường.
●
Thân thiện với SEO: Một trong những vấn đề lớn của các Js frameworks là nó
khơng thân thiện với các cỗ máy tìm kiếm (search engine). Mặc dù đã có nhiều cải
thiện nhưng thực sự search engine vẫn gặp rất nhiều khó khăn khi “đọc” các web
app chứa nhiều Js. Tuy nhiên React tự hào nằm ngoài số đó bởi vì bạn có thể chạy
React trên server và các virtual DOM của component sẽ được render và trả về trình
duyệt dưới dạng web page mà khơng cần các thư viện bên thứ 3 hay bất kì thủ
thuật nào. Vì vậy React đáp ứng đầy đủ tính SEO friendly.
●
Hiệu năng cao đối với các ứng dụng có dữ liệu thay đổi liên tục, dễ dàng cho bảo
trì và sửa lỗi.
03.01.03
●
Khuyết điểm
Reactjs chỉ phục vụ cho tầng View. React chỉ là View Library nó khơng phải là một
MVC framework như những framework khác. Đây chỉ là thư viện của Facebook
giúp render ra phần view. Vì thế React sẽ khơng có phần Model và Controller, mà
14
phải kết hợp với các thư viện khác. React cũng sẽ khơng có 2-way binding hay là
Ajax
●
Tích hợp Reactjs vào các framework MVC truyền thống yêu cầu cần phải cấu hình
lại.
●
React khá nặng nếu so với các framework khác React có kích thước tương tương
với Angular (Khoảng 35kb so với 39kb của Angular). Trong khi đó Angular là một
framework hồn chỉnh
●
Khó tiếp cận cho người mới học Web
03.02 Node JS
03.02.01
●
Khái niệm
Nodejs là một nền tảng (Platform) phát triển độc lập được xây dựng ở trên
Javascript Runtime của Chrome mà chúng ta có thể xây dựng được các ứng
dụng mạng một cách nhanh chóng và dễ dàng mở rộng.
●
Nodejs được xây dựng và phát triển từ năm 2009, bảo trợ bởi công ty Joyent, trụ
sở tại California, Hoa Kỳ
●
Phần Core bên dưới của Nodejs được viết hầu hết bằng C++ nên cho tốc độ xử
lý và hiệu năng khá cao.
●
Nodejs tạo ra được các ứng dụng có tốc độ xử lý nhanh, realtime thời gian thực.
●
Nodejs áp dụng cho các sản phẩm có lượng truy cập lớn, cần mở rộng nhanh,
cần đổi mới công nghệ, hoặc tạo ra các dự án Startup nhanh nhất có thể.
15
03.02.02
03.02.03
Ưu điểm
Đặc điểm nổi bật của Node.js là nó nhận và xử lý nhiều kết nối chỉ với một
single-thread. Điều này giúp hệ thống tốn ít RAM nhất và chạy nhanh nhất
khi không phải tạo thread mới cho mỗi truy vấn giống PHP. Ngoài ra, tận
dụng ưu điểm non-blocking I/O của Javascript mà Node.js tận dụng tối đa
tài nguyên của server mà không tạo ra độ trễ như PHP
JSON APIs Với cơ chế event-driven, non-blocking I/O(Input/Output) và mơ
hình kết hợp với Javascript là sự lựa chọn tuyệt vời cho các dịch vụ Webs
làm bằng JSON.
Ứng dụng trên 1 trang( Single page Application) Nếu bạn định viết 1 ứng
dụng thể hiện trên 1 trang (Gmail?) NodeJS rất phù hợp để làm. Với khả
năng xử lý nhiều Request/s đồng thời thời gian phản hồi nhanh. Các ứng
dụng bạn định viết khơng muốn nó tải lại trang, gồm rất nhiều request từ
người dùng cần sự hoạt động nhanh để thể hiện sự chuyên nghiệp thì
NodeJS sẽ là sự lựa chọn của bạn.
Shelling tools unix NodeJS sẽ tận dụng tối đa Unix để hoạt động. Tức là
NodeJS có thể xử lý hàng nghìn Process và trả ra 1 luồng khiến cho hiệu
xuất hoạt động đạt mức tối đa nhất và tuyệt vời nhất.
Streamming Data (Luồng dữ liệu) Các web thông thường gửi HTTP request
và nhận phản hồi lại (Luồng dữ liệu). Giả xử sẽ cần xử lý 1 luồng giữ liệu
16
cực lớn, NodeJS sẽ xây dựng các Proxy phân vùng các luồng dữ liệu để
đảm bảo tối đa hoạt động cho các luồng dữ liệu khác.
Ứng dụng Web thời gian thực Với sự ra đời của các ứng dụng di động &
HTML 5 nên Node.js rất hiệu quả khi xây dựng những ứng dụng thời gian
thực (real-time applications) như ứng dụng chat, các dịch vụ mạng xã hội
như Facebook, Twitter,…
03.02.04
Khuyết điểm
Ứng dụng nặng tốn tài nguyên Nếu bạn cần xử lý các ứng dụng tốn tài
nguyên CPU như encoding video, convert file, decoding encryption… hoặc
các ứng dụng tương tự như vậy thì khơng nên dùng NodeJS (Lý do:
NodeJS được viết bằng C++ & Javascript, nên phải thông qua thêm 1 trình
biên dịch của NodeJS sẽ lâu hơn 1 chút ). Trường hợp này bạn hãy viết 1
Addon C++ để tích hợp với NodeJS để tăng hiệu suất tối đa !
NodeJS và ngôn ngữ khác NodeJS, PHP, Ruby, Python .NET …thì việc
cuối cùng là phát triển các App Web. NodeJS mới sơ khai như các ngơn
ngữ lập trình khác. Vậy nên bạn đừng hi vọng NodeJS sẽ không hơn
PHP,Ruby,Python… ở thời điểm này. Nhưng với NodeJS bạn có thể có 1
ứng dụng như mong đợi, điều đó là chắc chắn !
03.03 MongoDB
03.03.01
Khái niệm
● MongoDB là một hệ quản trị cơ sở dữ liệu mã nguồn mở, là CSDL thuộc NoSql và
được hàng triệu người sử dụng.
17
● MongoDB là một database hướng tài liệu (document), các dữ liệu được lưu trữ
trong document kiểu JSON thay vì dạng bảng như CSDL quan hệ nên truy vấn sẽ
rất nhanh.
03.03.02
Đặc điểm
● Với CSDL quan hệ chúng ta có khái niệm bảng, các cơ sở dữ liệu quan hệ (như
MySQL hay SQL Server...) sử dụng các bảng để lưu dữ liệu thì với MongoDB
chúng ta sẽ dùng khái niệm là collection thay vì bảng
● So với RDBMS thì trong MongoDB collection ứng với table, còn document sẽ ứng
với row , MongoDB sẽ dùng các document thay cho row trong RDBMS.
● Các collection trong MongoDB được cấu trúc rất linh hoạt, cho phép các dữ liệu
lưu trữ không cần tuân theo một cấu trúc nhất định.
● Thông tin liên quan được lưu trữ cùng nhau để truy cập truy vấn nhanh thông qua
ngôn ngữ truy vấn MongoDB
03.03.03
Ưu điểm
● Document oriented
● Hiệu suất cao
● Tính sẵn sàng cao – Nhân rộng
● Khả năng mở rộng cao – Sharding
● Năng động – Không có lược đồ cứng nhắc.
● Linh hoạt – thêm / xóa trường có ít hoặc khơng ảnh hưởng đến ứng dụng
● Dữ liệu không đồng nhất
● Không joins
● Phân phối được
● Biểu diễn dữ liệu trong JSON hoặc BSON
18
● Hỗ trợ khơng gian địa lý (Geospatial)
● Tích hợp dễ dàng với BigData Hadoop
● Ngôn ngữ truy vấn dựa trên tài liệu mạnh mẽ như SQL
● Các bản phân phối cloud như AWS, Microsoft, RedHat, dotCloud và SoftLayer,
v.v … Trên thực tế, MongoDB được xây dựng cho cloud. Kiến trúc mở rộng quy
mơ tự nhiên của nó, được kích hoạt bởi sharding, liên kết tốt với quy mô và sự
nhanh nhẹn có được nhờ điện tốn đám mây.
03.03.04
Khuyết điểm
● Một nhược điểm của NoSQL là hầu hết các giải pháp đều không tuân thủ ACID
mạnh mẽ (Atomic, Consistency, Isolation, Durability) như các hệ thống RDBMS
được thiết lập tốt hơn.
● Giao dịch phức tạp
● Khơng có chức năng hoặc thủ tục lưu trữ tồn tại nơi bạn có thể liên kết logic
03.04 Docker
03.04.01
Khái niệm
● Docker:
o Docker là một nền tảng cho developers và sysadmin để develop, deploy và
run application với container.
o Nó cho phép tạo các mơi trường độc lập và tách biệt để khởi chạy và phát
triển ứng dụng và môi trường này được gọi là container.
o Khi cần deploy lên bất kỳ server nào chỉ cần run container của Docker thì
application của bạn sẽ được khởi chạy ngay lập tức.
03.04.02
Đặc điểm
● Images: hiểu đơn giản là file ảnh, file nền của hệ điều hành hoặc dùng trong một
nền tảng.
19
● Containers: có thể hiểu là một máy ảo, image tạo thành Containers.
● Registry (Docker Hub): kho chứa image tương tự như github hay bitbucket
● Docker Daemon: thực thi yêu cầu từ Docker Client quản lý Container.
● Dockerfile: tập tin hướng dẫn cách tạo một image.
● Volumes: dữ liệu tạo ra khi container đang tạo.
03.04.03
Ưu điểm
● Tính đồng nhất là ưu điểm nổi bật khi phát triển docker. Trong trường hợp nhiều
người cùng phát triển một dự án trong môi trường, docker sẽ hạn chế được sự
sai khác nhất định giữa thành viên
● Tính đóng gói: Bạn có thể ẩn vào mơi trường các app vào trong container. Bên
cạnh đó, người dùng có thể kiểm tra thường xuyên các container. Lúc này việc bỏ
đi hãy giữ lại container là công việc hết sức dễ dàng.
● Tính nhất quán: Các bước thực hiện test container được dùng để phát triển bằng
CI. Có thể deploy container đã được test bằng CI lên server. Ngồi ra người dùng
cũng có thể thực hiện scale container đã được deploy.
03.04.04
Khuyết điểm
● Không thể chạy trực tiếp trên Windows và MAC OS.
03.04.05
●
Khái niệm liên quan
Docker Client: là cách mà bạn tương tác với docker thông qua command trong
terminal. Docker Client sẽ sử dụng API gửi lệnh tới Docker Daemon.
●
Docker Daemon: là server Docker cho yêu cầu từ Docker API. Nó quản lý
images, containers, networks và volume.
●
Docker Volumes: là cách tốt nhất để lưu trữ dữ liệu liên tục cho việc sử dụng và
tạo apps.
20
●
Docker Registry: là nơi lưu trữ riêng của Docker Images. Images được push vào
registry và client sẽ pull images từ registry. Có thể sử dụng registry của riêng
bạn hoặc registry của nhà cung cấp như : AWS, Google Cloud, Microsoft Azure.
●
Docker Hub: là Registry lớn nhất của Docker Images ( mặc định). Có thể tìm
thấy images và lưu trữ images của riêng bạn trên Docker Hub ( miễn phí).
●
Docker Repository: là tập hợp các Docker Images cùng tên nhưng khác tags.
VD: golang:1.11-alpine.
●
Docker Networking: cho phép kết nối các container lại với nhau. Kết nối này có
thể trên 1 host hoặc nhiều host.
●
Docker Compose: là công cụ cho phép run app với nhiều Docker containers 1
cách dễ dàng hơn. Docker Compose cho phép bạn config các command trong
file docker-compose.yml để sử dụng lại. Có sẵn khi cài Docker.
●
Docker Swarm: để phối hợp triển khai container.
●
Docker Services: là các containers trong production. 1 service chỉ run 1 image
nhưng nó mã hố cách thức để run image — sử dụng port nào, bao nhiêu bản
sao container run để service có hiệu năng cần thiết và ngay lập tức.
03.05 CI (Continuous Integration)
03.05.01
Khái niệm
Tích hợp liên tục (CI) là phương pháp phát triển phần mềm đòi hỏi các thành viên
trong nhóm tích hợp cơng việc thường xuyên. Mỗi ngày, các thành viên đều phải
theo dõi và phát triển cơng việc của họ ít nhất một lần. Việc này sẽ được một nhóm
21
khác kiểm tra tự động, nhóm này sẽ tiến hành kiểm thử truy hồi để phát hiện lỗi
nhanh nhất có thể. Cả nhóm thấy rằng phương pháp tiếp cận này giúp giảm bớt vấn
đề về tích hợp hơn và cho phép phát triển phần mềm gắn kết nhanh hơn
Bắt đầu bằng việc developer commit code lên repository (github chẳng hạn). Bất
kỳ thay đổi nào cũng sẽ trigger một vòng đời CI. Các bước trong một kịch bản
CI thường như sau:
● Đầu tiên, developer commit code lên repo.
● CI server giám sát repo và kiểm tra xem liệu có thay đổi nào trên repo hay
không (liên tục, chẳng hạn mỗi phút 1 lần)
● Ngay khi commit xảy ra, CI server phát hiện repo có thay đổi, nên nó nhận
code mới nhất từ repo và sau đó build, chạy unit và integration test
●
CI server sẽ sinh ra các feedback và gửi đến các member của project CI
server tiếp tục chờ thay đổi ở repo
03.06 CD (Continuous Deployment)
03.06.01
Khái niệm
Continuous Deployment (CD): Là khái niệm có quan hệ rất mật thiết với Continuous
Integration, Continuous Deployment giúp việc triển khai ứng dụng có thể được diễn
ra trong bất cứ thời điểm nào và sau đó thậm chí là tự động cho ra một phiên bản
mới trên mơi trường test hoặc q trình sản x́t nếu như bản build vượt qua được
tất cả các nút trước đó. Với cách làm như vậy, nếu xảy ra lỗi trong q trình build
(Cam kết code khơng vượt qua các kiểm định về chất lượng (CQM) hoặc các
trường hợp kiểm tra (UT, IT, ST) nhà phát triển sẽ có thể dễ dàng xác định được lỗi
diễn ra ở đâu và qua đó giúp sửa lỗi một cách hiệu quả hơn.
22
03.07 Agile
03.07.01
Khái niệm
Phương thức phát triển phần mềm Agile là một tập hợp các phương thức phát triển
lặp và tăng dần trong đó các yêu cầu và giải pháp được phát triển thông qua sự liên
kết cộng tác giữa các nhóm tự quản và liên chức năng. Agile là cách thức làm phần
mềm linh hoạt để làm sao đưa sản phẩm đến tay người dùng càng nhanh càng tốt
càng sớm càng tốt và được xem như là sự cải tiến so với những mơ hình cũ như
mơ hình “Thác nước (waterfall)” hay “CMMI”.
03.07.02
Giá trị
1. Kiểm thử giúp dự án nhanh chóng được bàn giao
Ở dự án truyền thống, kiểm thử thường được xem là bước cuối kiểm tra chất
lượng sản phẩm. Và việc ngăn chặn lỗi của phầm mềm bị coi như trách nhiệm
của QA/tester. Bug được tìm thấy dù quan trọng hay khơng thì cũng sẽ làm
chậm q trình bàn giao sản phẩm.
Trong dự án Agile, chúng ta xây dựng một sản phẩm tốt ngay từ ban đầu, sử
dụng kiểm thử để phản hồi trên ngay khi phát triển để làm thế nào cho sản
phẩm tương đồng với yêu cầu.
Nghe có vẻ là thay đổi nhỏ, nhưng thực chất thì việc này có ý nghĩa lớn. Mối
liên hệ giữa tester và dev cần là sự cộng tác, tương hỗ lẫn nhau
23
2. Kiểm thử không chỉ là một giai đoạn của dự án
Kiểm thử không phải là một giai đoạn trong quá trình phát triển Agile mà cần
được tham gia sâu vào quy trình phát triển từ sớm.
Cách tiếp cận Agile tập trung vào việc xác nhận những điều đúng đắn ngay
từđầu, giảm sự cần thiết phải có nhiều kiểm thử viên (QA Tester) ở cuối quy
trình để đạt được kết quả. Đảm bảo tiến độ dự án được liên tục.
3. Cá nhân và sự tương hỗ quan trọng hơn quy trình
Với dự án truyền thống, tester làm việc độc lập và chịu trách nhiệm với toàn
bộ hoạt động test.
Đối với Agile, các hoạt động test được thực hiện bởi toàn bộ dự án. Để thực
hiện được hết test thì cần thực hiện lặp lại qua các sprint.
24
Tuy nhiên tới khi dự án lớn hoặc phức tạp lên thì sẽ có lúc khơng thể test hết
các testcase đề ra và không thể thực hiện được mục tiêu ban đầu đề ra. Có
nghĩa team khơng thể thực hiện nhanh như họ nghĩ. Vì nếu test chưa xong thì
feature cũng khơng thể xong được, vì vậy để đẩy nhanh tốc độ thì cả team
phải làm cùng nhau và đẩy nhanh phần chậm nhất, test cùng nhau.
4. Rút ngắn vòng lặp phản hồi
Thời gian từ khi viết code và thực hiện code tới khi biết được code vận hành
như thế nào được gọi là feedback loop (vòng phản hồi).
Nếu một phần mềm không được thực hiện test cho tới khi kết thúc và được
bàn giao thì vịng phản hồi này bị kéo dài tới cả tháng, như thế là quá dài.
Agile tạo nên một vòng phản hồi ngắn hơn bởi với dự án Agile, phần mềm
được sẵn sàng để test ngay từ khi bắt đầu. Đặc thù của Agile là đội dự án có
25