Tải bản đầy đủ (.pdf) (23 trang)

báo cáo thực tập xây dựng CHATAPP và triển khai với DOCKER và KUBERNETES

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (612.65 KB, 23 trang )

ĐẠ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

BÁO CÁO THỰC TẬP

XÂY DỰNG CHATAPP VÀ TRIỂN KHAI
VỚI DOCKER VÀ KUBERNETES
Công ty thực tập

: DEK TECHNOLOGY

Người phụ trách

: Lâm Khang

Thực tập sinh

: Nguyễn Tiến Đạt

TP.HỒ CHÍ MINH, 2020


1

LỜI MỞ ĐẦU
Quá trình học tập ở đại học đã giúp sinh viên có được các kiến thức cơ bản về lý
thuyết và thực hành. Tuy nhiên, với khối lượng kiến thức được học vẫn chưa đủ để
sinh viên có thể áp dụng vào việc làm thực tế. Vì thế, để đáp ứng được các yêu cầu
của doanh nghiệp khi tham gia tuyển dụng, nhà trường đã tạo điều kiện cho sinh viên


được tiếp xúc trực tiếp với các doanh nghiệp khi cịn ngồi trên ghế nhà trường để tìm
hiểu và làm quen với công việc thực tế. Thông qua đó để hiểu rõ hơn về cách điều
hành và hoạt động của một doanh nghiệp.
Trong thời gian thực tập tại Công ty DEK Technology, em đã tiếp thu được nhiều
kiến thức về kỹ năng, tư duy logic và tư duy lập trình. Song song đó em có cơ hội
được làm quen, thực hiện đóng góp bằng chính những kiến thức mà bản thân em đã
học tập được trong quá trình thực tập tại cơng ty, hiểu về các quy trình làm việc cùng
các cách quản lý công việc một cách hiệu quả. Ngồi những kiến thức về chun
mơn, em cịn được rèn luyện về tinh thần trách nhiệm trong công việc, khả năng chịu
áp lực với công việc, kỹ năng mềm trong giao tiếp, làm việc nhóm giữa các thành
viên trong cùng một dự án, quản lý thời gian và làm việc một cách có hiệu quả.
Qua thời gian tìm hiểu và được thực hành thực tế, em đã có thể xây dựng cho bản
thân một quy trình làm việc bài bản và đúng trình tự.
Nội dung đề tài gồm 4 chương:
Chương 1: Giới thiệu về công ty
Chương 2: Giới thiệu chương trình thực tập
Chương 3: Nợi dung thực tập
Chương 4: Kết luận

Người phụ trách: Lâm Khang

Nguyễn Tiến Đạt


2

LỜI CẢM ƠN
Lời đầu tiên, em xin gửi lời cảm ơn sâu sắc đến tất cả Thầy/Cô của khoa Công
nghệ Phần mềm nói riêng và trường Đại học Cơng nghệ Thơng tin – Đại học quốc
gia TPHCM nói chung đã tận tình chỉ dạy em các kiến thức cần thiết và đã tạo điều

kiện cho em được tiếp xúc với môi trường doanh nghiệp, giúp em tự tin hơn.
Tiếp đến, em xin trân thành gửi lời cảm ơn đến Công ty DEK Technology đã tạo
điều kiện cho em có cơ hội được thực tập tại công ty.
Chỉ trong một thời gian ngắn, nhờ sự chỉ dẫn của nhóm trainer, em đã tiếp thu được
những kiến thức quan trọng về các kĩ năng, tư duy lập trình cũng như các kiến thức
liên quan về cách thức hoạt động của một doanh nghiệp. Chân thành cảm ơn các anh
chị đã dành nhiều thời gian, cơng sức q báu của mình để hướng dẫn em hồn thành
chương trình thực tập này.
Đặc biệt cảm ơn anh Lâm Khang đã hướng dẫn, giúp đỡ cho em tận tình cả những
khó khăn trong cơng việc, đến những bất cập khi làm quen với môi trường mới; cảm
ơn chị Ngọc phòng Nhân sự hỗ trợ chúng em rất nhiều về các vấn đề khi làm việc
trong công ty. Một lần nữa xin cám ơn các anh chị tại cơng ty DEK Technology đã
giúp đỡ để có thể hồn thành tốt cơng việc trong thời gian thực tập tại công ty.
Em xin chân thành cảm ơn!

Nguyễn Tiến Đạt
TP.HCM, ngày 17 tháng 12 năm 2020

Người phụ trách: Lâm Khang

Nguyễn Tiến Đạt


3

NHẬN XÉT CỦA KHOA

.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................

.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................

Người phụ trách: Lâm Khang

Nguyễn Tiến Đạt


4

MỤC LỤC
Chương 1.

GIỚI THIỆU VỀ CÔNG TY ............................................................5


Chương 2.

GIỚI THIỆU VỀ CHƯƠNG TRÌNH THỰC TẬP ..........................7

Chương 3.

NỘI DUNG THỰC TẬP ..................................................................9

Chương 4.

KẾT LUẬN .................................... Error! Bookmark not defined.

TÀI LIỆU THAM KHẢO .....................................................................................21
TỔNG KẾT ............................................................................................................22

Người phụ trách: Lâm Khang

Nguyễn Tiến Đạt


5

Chương 1. GIỚI THIỆU VỀ CƠNG TY
1.1. Giới thiệu cơng ty DEK Technologies

DEK Technologies được thành lập tại Melbourne Australia vào năm 1999, với 3
kỹ sư cung cấp dịch vụ phát triển phần mềm và phần cứng cho ngành viễn thông. Khi
một trong những công ty dịch vụ và thiết bị viễn thông và mạng đa quốc gia lớn nhất
thế giới thơng báo kết thúc phịng thí nghiệm nghiên cứu và phát triển khu vực tại

Melbourne, năm 2002, hơn 450 nhân viên đã bị dư thừa và tìm kiếm việc làm mới.
Công nghệ DEK nắm lấy cơ hội này để đảm bảo năng lực chuyên môn kỹ thuật và
hiện đã phát triển thành một tổ chức toàn cầu.
Các kỹ sư làm việc trên các sản phẩm chịu trách nhiệm xử lý 40% (gần 4 tỷ) trong
số các cuộc gọi di động hàng ngày của thế giới. Các dự án và nhiệm vụ của công ty
trải rộng trên nhiều ngành và quốc gia, với cơ hội mở rộng hơn nữa trong các thị
trường tồn cầu.
1.2. Sản phẩm của cơng ty
1. Nghiệp vụ chuyên môn:
-

Cung cấp các dịch vụ phát triển phần mềm và phần cứng

-

Quản lý, thiết kế và phát triển dự án phần mềm

-

Cung cấp nền tảng công nghệ Internet of Things

-

Telegea là nền tảng để quản lý và giám sát năng lượng nhiệt

-

Phát triển phần mềm và phần cứng trong các lĩnh vực: thông tin viễn thông, y
tế, thương mại điện tử, an tồn và bảo mật,...


2. Cơng nghệ sử dụng:

Người phụ trách: Lâm Khang

Nguyễn Tiến Đạt


6
C/C++, Java, .Net, Erlang, Python, Perl, PHP, Unix, Linux, Windows, Android,
iOS, 3G, 4G, Kotlin, Objective C, Swift, React Native, Javascript, Bootstrap,
Angular, Vue, React JS,...

Người phụ trách: Lâm Khang

Nguyễn Tiến Đạt


7

Chương 2. GIỚI THIỆU VỀ CHƯƠNG TRÌNH THỰC TẬP
2.1. Tổng quan về chương trình thực tập
Tham gia chương trình thực tập theo chuẩn đào tạo đầu vào của công ty các kiến
thức về C++, hệ điều hành Linux, Kubernetes, Gitlab, CI/CD các công cụ như
MobaXterm, Visual Code.
Quản lý, thiết kế và phát triển phần mềm Availability Chat Application đã được
đề ra theo quy trình quản lý Scrum/Agile.
Cuối chương trình, hồn thành sản phẩm đề ra theo yêu cầu của công ty, demo và
báo cáo kết quả sản phẩm.
2.2. Các quyền và nghĩa vụ của thực tập sinh
Yêu cầu:

-

Có tư duy lập trình

-

Giao tiếp bằng tiếng Anh mỗi cuối Sprint để demo cho các anh chị trainer

-

Nghiêm túc và có trách nhiệm

Quyền lợi:
-

Trong thời gian tham gia training, công ty sẽ hỗ trợ cho mỗi thực tập sinh với
chi phí 2.000.000 đ/tháng.

-

Được hướng dẫn và đào tạo về chun mơn hồn toàn miễn phí đồng thời kèm
mức hỗ trợ hàng tháng từ phía cơng ty.

-

Sử dụng máy tính do cơng ty cung cấp.

-

Miễn phí đồ uống (Milo, vinamilk, trà, cà phê, …)


-

Sau khi hồn thành chương trình đào tạo, cơng ty tạo điều kiện cho sinh viên
có thể trở thành nhân viên chính thức của công ty.

2.3. Thời gian thực tập
Chương trình thực tập kéo dài 2.5 tháng (10 tuần) từ 30/08/2020 đến 09/10/2020
Thời gian thực tập tại công ty:

Người phụ trách: Lâm Khang

Nguyễn Tiến Đạt


8
-

Trong thời gian thực tập, thực tập sinh phải làm việt ít nhất 3.5 ngày / tuần

-

Mỗi ngày làm việc 8 giờ

Người phụ trách: Lâm Khang

Nguyễn Tiến Đạt


9


Chương 3. NỘI DUNG THỰC TẬP
Đợt thực tập với chủ đề “Xây dựng ứng dụng chat có tính khả dụng cao trên nền
tảng Linux/Ubuntu”. Ngoài việc tập trung vào thiết kế và phát triển có áp dụng quy
trình phát triển phần mềm Scrum/Agile, đợt thực tập còn giúp sinh viên tiếp cận các
công nghệ mới hiện nay như triển khai ứng dụng với Docker và Kubernetes. Rèn
luyện các kỹ năng mềm như làm việc nhóm, giao tiếp và demo sản phẩm mỗi sprint
bằng tiếng Anh.
3.1. Giới thiệu về công ty và yêu cầu đối với nhân viên
Thời gian: 1 tuần
Nội dung: Giới thiệu về công ty, cách thức tổ chức nhân sự và cách làm việc của
nhân viên trong công ty. Được nghe những anh chị phụ trách của phòng nhân sự giới
thiệu về cơng ty; q trình thành lập, phát triển; cơ cấu tổ chức; quy trình làm việc.
Ngồi ra, thực tập sinh còn được giới thiệu về chương trình thực tập, quyền và nghĩa
vụ của thực tập sinh.
Kết quả: Hiểu thêm về cơng ty DEK Technologies, q trình hình thành và phát
triển. Sử dụng các cơng cụ giao tiếp, quản lý công việc, kế hoạch hiểu quả và chuyển
nghiệp hơn.
3.2. Traning về công nghệ
3.2.1.

Các công cụ làm việc

Thời gian: 1 tuần
Nội dung: Tìm hiểu về các cơng cụ sẽ được sử dụng trong quá trình làm việc. Một
số phần mềm trong số đó như VirtualBox (quy định cơng ty chỉ cho phép phát triển
phần mềm trên máy ảo), Quản lý source code GitLab & CICD, MobaExterm để
remote access vào máy ảo,... Làm việc và giao tiếp thông qua Skype,...
Kết quả : Lập trình sử dụng các cơng cụ miễn phí, giúp dễ dàng kết hợp các cơng
cụ với nhau, so với việc dùng các IDE.


Người phụ trách: Lâm Khang

Nguyễn Tiến Đạt


10
3.2.2.

C/C++ Project trên Ubuntu

Thời gian: 1 tuần
Nội dung: Tìm hiểu và làm quen với hệ điều hành Ubuntu, vì đây là nền tảng mà
ứng dụng sẽ phát triển và triển khai. Học cách tự tạo project C/C++ bằng các công cụ
trên Ubuntu như CMake, Ninja Build. Không giống như việc phát triển C/C++ project
trển Window, Ubuntu khơng có Visual Studio làm IDE.
Kết quả: Làm quen và thành thạo các thao tác sử dụng hệ điều hành Ubuntu. Xây
dựng được một cấu trúc mẫu cho chương trình C/C++ trên Ubuntu.
3.3. Thực hiện project
Sau một tuần đầu làm quen với môi trường làm việc, tiếp cận và làm quen với các
kiến thức mới. Thực tập sinh đã nắm được các phương pháp cơ bản để thực hiện với
project C/C++ trên Ubuntu. Các tuần sau, trainer sẽ hướng dẫn thực hiện project theo
quy trình phát triển phần mềm Scrum/Agile
3.4. Nhật ký thực tập
Tuần
Tuần 1

Công việc
- Training IT policy and


(03/08/2020 infrastructure
-

Người hướng
dẫn

Kết quả

Chị Kim Ngọc

- Nắm được quy

Chị Phương Loan

tắc làm việc tại

- Training coporate policy

công ty

07/08/2020) - Training Agile, GIT, CI

- Làm quen với
các bạn intern
khác

Tuần 2

- Làm quen với GIT


(10/08/2020 - Xây dựng project
-

structure, app architecture

14/08/2020) - Xây dựng các chức năng:

Anh Khang Lâm

- Sử dụng lệnh

Anh Huỳnh Tiến

GIT cơ bản
- Làm quen với
Ubuntu

nhắn tin, đổi màu tin nhắn

Người phụ trách: Lâm Khang

Nguyễn Tiến Đạt


11

- Tham gia xây
dựng chức năng
Tuần 3


- Xây dựng giao diện chat

(17/08/2020 trên terminal
-

Anh Khang Lâm

- Sử dụng được

Anh Huỳnh Tiến

CMake

- Thêm chức năng: nhắn

- Viết unit test

21/08/2020) tin nhóm, tài khoản admin

với gtest

- Debug code
Tuần 4

- Sử dụng Cmake, Gtest

(24/08/2020 chạy auto testing
-

framework

Anh Khang Lâm

- Setup máy chạy

Anh Huỳnh Tiến

test CI trên

- Set up CI cho Gitlap

Gitlab (runner)

28/08/2020)

local
- Tạo script chạy
test CI tự động

Tuần 5

- Debug code app

(31/08/2020 - Cập nhật UI
-

Anh Khang Lâm

- Sửa 1 số bug

Anh Huỳnh Tiến


trong ứng dụng

- Tìm hiểu Docker

- Tìm hiểu và sử

04/09/2020)
Tuần 6

dụng Docker
- Deploy docker trên máy

(07/09/2020 local.
-

- Cài đặt sever, database

11/09/2020) trên docker

Anh Khang Lâm

- Tạo docker

Anh Huỳnh Tiến

image local
- Triển khai
image thành
container


Tuần 7

- Tìm hiểu Kubernetes và

Deploy thành

(14/09/2020 Microk8s

cơng các pod,

-

service trên

- Deploy chat app server

18/09/2020) trên microk8s local

Người phụ trách: Lâm Khang

Microk8s

Nguyễn Tiến Đạt


12

Tuần 8


- Cài đặt CICD trên sever

- Deploy thủ

(21/09/2020 công ty

công 3 pod trên

-

server cty

- Deploy Kubernetes

25/09/2020) clusters thủ công trên
server công ty

- Gặp vấn đề về
quyền user của
CICD

Tuần 9

- Tạo Logger

(28/09/2020 - Deploy Kubernetes
-

clusters tự động trên server


02/10/2020) công ty với CICD

- Ẩn/hiển thị log
khi cần thiết
- Deploy tự động
3 pods trên server
cty

Tuần 10

- Review code, refactor

Kết thúc kỳ thực

(05/10/2020 code

tập với kết quả

-

tốt đẹp

- Báo cáo cuối kỳ thực tập

09/10/2020)

Người phụ trách: Lâm Khang

Nguyễn Tiến Đạt



13

Chương 4. CHI TIẾT VỀ PROJECT
Với đề tài “Xây dựng ứng dụng chat có tính khả dụng cao (Availability Chat
Application)”. Thực tập sinh phải xây dựng được một ứng dụng chat cơ bản với các
chức năng như: Đăng nhập, Chat peer to peer, Chat nhóm, quản lý chat nhóm,... Ngồi
ra cịn phải sử dụng các cơng nghệ mới như Docker và Kubernetes để đảm bảo tính
khả dụng của ứng dụng.
Bảng 4-1: Danh sách các Actor có trong chương trình
STT
1

Ý nghĩa

Tên tác nhân

Người quản lý danh sách các tài khoản, quản lý danh sách

Admin

các group chat hiện có.
2

Người dùng sử dụng các chức năng cơ bản của chat app

User

Bảng 4-2: Danh sách các Use Case có trong chương trình
STT

1

Ý nghĩa

Tên Use Case
Đăng nhập

Người dùng buộc phải đăng nhập để sử dụng các chức
năng khác.

2

Quản lý danh Người dùng được xác thực với phân quyền là Admin sẽ có
sách tài khoản

3

quyền quản lý các tài khoản như: thêm, xóa, sửa, xem

Quản lý danh Người dùng được xác thực với phân quyền là Admin sẽ có
sách nhóm chat quyền quản lý nhóm chat như: thêm, xóa, chỉnh sửa thành
viên, xem

4

Chat peer to Người dùng cơ bản được sử dụng chức năng chat trực tiếp
peer

với một người dùng khác đang online


Người phụ trách: Lâm Khang

Nguyễn Tiến Đạt


14

Quản lý nhóm Người dùng cơ bản được quyền quản lý nhóm chat của
chat

mình tạo ra: chỉnh sửa thành viên, xóa nhóm

Tham gia / rời Người dùng cơ bản được quyền tham gia một nhóm (nhóm
khỏi nhóm chat riêng tư phải cung cấp mật khẩu). Người dùng cơ bản có
thể rời khỏi nhóm chat đã tham gia.

4.1. Kiến trúc phần mềm

Hệ thống được chia thành các thành phần như sau:
-

Client: là ứng dụng được viết bằng ngôn ngữ C/C++ chạy trên hệ điều hành
Ubuntu. Dành cho người dùng là Admin và User thơng thường, có hai phiên
bản là Console dùng bởi Admin và GUI dùng QT để lập trình dùng bởi User.

-

Chat Server: là server chuyên dùng cho nhiệm vụ gửi nhận và lưu trữ tin nhắn
giữa các người dùng với nhau. Chat server sử dụng Socket để duy trình kết nối
với Client.


-

REST Server: là server được xây dựng để thực hiện các chức năng thông dụng
của người dùng: đăng nhập, quản lý tài khoản, quản lý nhóm chat. Sử dụng thư
viện cpprestsdk để viết HTTP request API.

-

MySQL: là hệ quản trị cơ sở dữ liệu để lưu trữ thông tin tài khoản người dùng,
nhóm chat, tin nhắn chat,...

Người phụ trách: Lâm Khang

Nguyễn Tiến Đạt


15
4.2. Giao diện Client App

Hình 4-1: Màn hình đăng nhập

Người phụ trách: Lâm Khang

Nguyễn Tiến Đạt


16

Hình 4-2: Màn hình nhắn tin trực tiếp trực tiếp với User


Người phụ trách: Lâm Khang

Nguyễn Tiến Đạt


17

Hình 4-3:Màn hình nhắn tin theo nhóm

Người phụ trách: Lâm Khang

Nguyễn Tiến Đạt


18

Hình 4-4: Màn hình quản lý nhóm
4.3. Triển khai hệ thống với Docker và Kubernetes
Docker là một ứng dụng dựa trên công nghệ containerization, là một trong nhũng
công nghệ hiện đại để triển khai phần mềm. Docker sẽ gôm tất cả thành phần cần
thiết của ứng dụng thành một: môi trường, thư viện phụ thuộc, mã nguồn đã được
build và thi thoảng có thể mang cả dữ liệu vào trong. Và chúng ta có thể chạy ứng
dụng trên bất cứ đâu có cài Docker. Với Docker, chúng ta có thể đóng gói và phân
phối phần mềm đến với khách hàng và các end-user nhanh chóng hơn.

Người phụ trách: Lâm Khang

Nguyễn Tiến Đạt



19
Với mô tả về kiến trúc hệ thống đã được đề cập trước đó, nhóm đã tạo ra 3 image
docker tương ứng là mysql, chat server và rest server.

Phần quan trọng nhất của ứng dụng là tính high availability của nó. Để có thể đảm
bảo hệ thống ln ln hoạt động thì Kubernetes có một số tính năng sau:
-

Làm nhiệm vụ khởi động các image của docker lên một cách tự động.

-

Trong trường hợp một trong những container bị lỗi có khả năng khởi động lại.

Người phụ trách: Lâm Khang

Nguyễn Tiến Đạt


20

Mỗi Deployment trong K8S sẽ làm nhiệm vụ đảm bảo các pod của nó ln ln
hoạt động, nếu có pod nào bị lỗi K8S sẽ khởi động lại pod đó với một số điều khiện
khởi động nhất định.
Service của K8S giống như là một cách thức để mọi thứ có thể kết nối với nhau:
giữa các deployment và có thể kết nối với mạng bên ngoài. Chẳng hạn, Chat và Rest
server sẽ kết nối với MySQL cũng như cho phép các Client từ bên ngồi kết nối với
chúng nó.
Persitent Volume là một giải pháp dành cho vấn đề đảm bảo tính tồn vẹn của dữ

liệu. Bản thân mỗi container có một vùng nhớ riêng, và nó sẽ bị mất trong trường hợp
xóa pod và khởi động lại, vì thế cần phải lưu trữ dữ liệu ở chỗ nào đó mà khơng bị
mất khi pod bị xóa đi.

Người phụ trách: Lâm Khang

Nguyễn Tiến Đạt


21

TÀI LIỆU THAM KHẢO
Cho quá trình phát triển:
/> /> /> />
Cho quá trình triển khai
/> /> />
Người phụ trách: Lâm Khang

Nguyễn Tiến Đạt


22

TỔNG KẾT
Lần đầu tiên tham gia thực tập cũng như làm việc ở một môi trường thực tế, mặc
dù đã có sự chuẩn bị từ trước nhưng khơng thể tránh được sự bỡ ngỡ về tác phong
cũng như quy trình làm việc ở môi trường công ty.
Sếp cùng các anh chị đồng nghiệp rất thân thiện và nhiệt tình, mơi trường làm việc
khơng q áp lực giúp em có thể hồn thành tốt các cơng việc được giao. Những kiến
thức được học ở trường chỉ là những kiến thức nền tảng để từ đó đào sâu nghiên cứu

và thực hiện nhiều dự án thực tế để đáp ứng được yêu cầu về kiến thức và kỹ năng ở
môi trường làm việc chun nghiệp. Ở cơng ty, với quy trình làm việc rõ ràng cùng
với sự giám sát và quản lý của người có chun mơn tốt, các dự án đa phần đều hoàn
thành đúng thời gian đề ra.
Ngoài những kiến thức về kỹ thuật hay lập trình, để một sinh viên có thể thích ứng
nhanh với mơi trường cơng ty thì yêu cầu kỹ năng mềm của sinh viên phải đạt một
mức độ nhất định. Có một số lượng khơng hề nhỏ sinh viên có kiến thức rất tốt nhưng
kỹ năng mềm quá yếu nên không được nhận vào các công ty hoặc được chi trả mức
lương thấp hơn năng lực.Tự nghiên cứu, giải quyết vấn đề, nêu ra/trình bày vấn đề,
kỹ năng giao tiếp với đồng nghiệp, kỹ năng về Tiếng Anh,… là những kỹ năng cơ
bản sinh viên cần phải trau dồi ngay khi còn là sinh viên để có thể đáp ứng được yêu
cầu của các nhà tuyển dụng.

Người phụ trách: Lâm Khang

Nguyễn Tiến Đạt



×