Tải bản đầy đủ (.docx) (27 trang)

báo cáo thực tậpBACKEND với GOLANG

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 (465.56 KB, 27 trang )

ĐẠI HỌC QUỐC GIA THÀNH PHỐ 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
BACKEND VỚI GOLANG

Công ty thực tập: KMS Technology
Người phụ trách: Võ Ngọc Dũng
Thực tập sinh: Lê Hữu Thắng

Thành phố Hồ Chí Minh, ngày 28 tháng 07 năm 2020
1


LỜI CẢM ƠN
Trân trọng gửi lời cảm ơn Công ty KMS 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 vài tháng ngắn, nhưng nhờ sự chỉ dẫn tận tình của các anh chị trong
team, em đã tiếp thu được rất nhiều kiến thức hay, cần thiết để có cái nhìn tổng quan hơn
về cách xây dựng một website hoàn chỉnh. Chân thành cảm ơn các anh chị đã bỏ ra thời
gian công sức để hướng dẫn em
Đặc biệt cảm ơn anh Võ Ngọc Dũng, đã chỉ dạy, hướng dẫn em tận tình, giúp đỡ
em làm quen với môi trường làm việc chuyên nghiệp, cũng như đã có những khóa học
training, giúp em hiểu rõ hơn về lập trình website. Em cũng xin cảm ơn anh Nguyễn Duy
Quang đã giúp đỡ em trong những lúc khó khăn trong cơng việc, đã training những kiến
thức quan trọng về ngơn ngữ Go để có thể làm được sản phẩm trong thời gian qua
Cũng xin cảm ơn thầy cô trong khoa Công nghệ phần mềm đã nhiệt tình hỗ trợ,
tạo điều kiện em làm bài báo cáo này.
Lê Hữu Thắng
Thành phố Hồ Chí Minh, ngày 08 tháng 06 năm 2020



2


NHẬN XÉT CỦA KHOA
.......................................................................................................................................................
.......................................................................................................................................................
.......................................................................................................................................................
.......................................................................................................................................................
.......................................................................................................................................................
.......................................................................................................................................................
.......................................................................................................................................................
.......................................................................................................................................................
.......................................................................................................................................................
.......................................................................................................................................................
.......................................................................................................................................................
.......................................................................................................................................................
.......................................................................................................................................................
.......................................................................................................................................................
.......................................................................................................................................................
.......................................................................................................................................................
.......................................................................................................................................................
.......................................................................................................................................................

3


Mục lục
Chương I: Giới thiệu công ty thực tập................................................................................6
1.Giới thiệu công ty KMS Technology...........................................................................6

2.Các sản phẩm công ty..................................................................................................7
a.Katalon Studio.........................................................................................................7
b.Kobtion...................................................................................................................7
c.Grove....................................................................................................................... 7
Chương II: Nội dung thực tập............................................................................................9
1.Tìm hiểu cơng ty.........................................................................................................9
2.Nghiên cứu kỹ thuật....................................................................................................9
3.Viết Unit test.............................................................................................................10
4.Thực hiện Project......................................................................................................11
Chương III: Chi tiết Project..............................................................................................12
1.Giới thiệu Project......................................................................................................12
2.Thực hiện..................................................................................................................12
3.Kế hoạch...................................................................................................................13
a.Giai đoạn 1............................................................................................................13
b.Giai đoạn 2............................................................................................................13
c.Giai đoạn 3............................................................................................................13
4.Kiến trúc Project.......................................................................................................14
5.Kiến trúc Backend.....................................................................................................14
a.Elasticsearch..........................................................................................................15
b.Monstache.............................................................................................................16
4


c.Recommend-service..............................................................................................16
d.Search-service.......................................................................................................17
e.Notification-service...............................................................................................17
f.gRPC...................................................................................................................... 17
6.Lịch làm việc............................................................................................................. 23
Chương IV: Kết luận và đánh giá.....................................................................................26
1.Kết luận.....................................................................................................................26

2.Đánh giá....................................................................................................................26

5


Chương I: Giới thiệu công ty thực tập

1.Giới thiệu công ty KMS Technology
KMS được thành lập vào năm 2009, với trụ sở chính tại Mỹ, là cơng ty tồn cầu trong
lĩnh vực Gia công Phần mềm, đồng thời cung cấp các dịch vụ chính như Phát triển sản
phẩm phần mềm, Tư vấn và cung cấp giải pháp trong Công Nghệ Thông Tin
Bên cạnh việc cung cấp dịch vụ Gia công Phần mềm, KMS cũng đã có những sản phẩm
vươn tầm thế giới rất tuyệt vời như: Katalon, Kobiton, Sprynkl và sẽ sớm có những sản
phẩm khác sẽ ra mắt
Trải qua 10 năm hình thành và phát triển, KMS hiện giờ đã có hơn 1000 nhân viên tài
năng. Những năm gần đây, KMS cũng ln được bình chọn nằm trong top 4 công ty
Công Nghệ Thông Tin hàng đầu tại Việt Nam với môi trường làm việc thân thiện, ấm
cúng và đáng để phát triển sự nghiệp bản thân.

6


2.Các sản phẩm công ty
a.Katalon Studio
Katalon Studio là một giải pháp kiểm thử tự động được phát triển bởi Katalon LLC (công
ty con của KMS).
Phần mềm này được xây dựng dựa trên các khung tự động hóa nguồn mở Selenium,
Appium với giao diện IDE chuyên dụng để kiểm thử ứng dụng web, API, di động và máy
tính để bàn


b.Kobtion
Kobiton ra đời năm 2016 từ vườn ươm UpStar Labs, một nhánh đầu tư ươm tạo khởi
nghiệp thuộc KMS Technology, do nhóm 5 kỹ sư Việt Nam phát triển. Trên nền tảng
công nghệ điện toán đám mây, Kobiton tạo ra giải pháp cho các doanh nghiệp quản lý,
truy cập và kiểm thử ứng dụng di động từ xa, tối ưu chi phí phát triển sản phẩm và rút
ngắn thời gian đưa phần mềm ra thị trường.
Kobiton là phần mềm điện toán đám mây cung cấp giải pháp cho các doanh nghiệp quản
lý, truy cập và kiểm thử ứng dụng di động từ xa. Hồi tháng 10.2018, phần mềm này cũng
đã nhận đầu tư 3 triệu USD từ vòng gọi vốn ươm tạo (Seed).
Năm 2018, Kobiton thành lập công ty tại Mỹ với đội ngũ hơn 40 người bao gồm 30 kỹ sư
Việt. Số liệu nhà phát triển tự công bố đến nay Kobiton có hơn 30.000 người dùng cá
nhân, hơn 500 doanh nghiệp ứng dụng với những tên tuổi lớn như Capgemini, Frontier
Airlines, GreenSky...

c.Grove
Grove HR là sản phẩm HR được phát triển và xây dựng bởi công ty công nghệ hàng đầu KMS Technology. Với mục tiêu giúp các doanh nghiệp tại Việt Nam phát triển tối ưu,
Grove HR “số hoá" các bài tốn nhân sự bao gồm:
 Quản lý tồn diện hành trình nhân viên (Employee Journey) từ tuyển dụng đến
offboarding
7


 Đưa tuyển dụng trở thành lợi thế cạnh trạnh của doanh nghiệp
 Mang đến trải nghiệm tối ưu dành cho nhân viên thông qua ứng dụng điện thoại
 Giúp nhân viên làm việc hiệu quả hơn bằng cách “số hố" và “đơn giản hố” các
quy trình nhân sự

8



Chương II: Nội dung thực tập
1.Tìm hiểu cơng ty
Thời gian: 1 ngày
Nội dung: Giới thiệu về công ty, tổ chức trong công ty, làm quen với team
Được nghe chị HR dẫn 1 vịng cơng ty, nghe buổi giới thiệu của công ty, cách thức làm
việc, giờ giấc đi làm, các nội quy cần tuân thủ, một số công việc cần phải làm trong ngày
đầu đi thực tập
Kết quả: Hiểu rõ thêm về cơng ty KMS, q trình thành lập và phát triển. Nhận các thiết
bị từ phịng IT của cơng ty.
Lịch làm việc: Từ thứ 2 – thứ 6 (9:00-18:00)

2.Nghiên cứu kỹ thuật
Thời gian: 3~4 tuần

2.1.Công cụ làm việc
Thời gian: 1 ngày
Nội dung: Tìm hiểu về cơng cụ Git, làm các bài training liên quan đến Git
Trong thời gian này, mentor đã hướng dẫn thực tập sinh, đưa ra các bài tập nhỏ và lớn để
giúp thực tập sinh hiểu rõ thêm về công cụ Git
Thực hiện: Thực hành sử dụng công cụ Git dựa trên các bài training sẵn có của cơng ty
Kết quả: Thuần thục, hiểu rõ các câu lệnh, commit,.. liên quan đến Git, giúp thực tập sinh
có kiến thức để chuẩn bị thực hiện Project và quản lý Source code

2.2.Clean Code
Thời gian: 1 tuần
Nội dung: Được training về kỹ năng clean code, viết code dễ hiểu, dễ đọc, dễ tái sử dụng.
Những kiến thức quan trọng trong việc code, mục đích của clean code nhằm bảo trì phần
mềm dễ hơn,…
- Tìm hiểu được các tiêu chuẩn khi đặt tên biến, ý nghĩa việc comment line,..
9



- Rèn luyện tư duy code, refactor lại code của người khác
- Rèn luyện khả năng tái sử dụng code, code “sạch”
Trong thời gian này, mentor đưa ra 1 project lập trình Java đọc/ghi file và giao thời hạn 1
tuần cho thực tập sinh. Yêu cầu thực tập sinh hãy “clean code”.
Thực hiện: Đọc slide bài giảng “Clean Code”, đọc hiểu Code, phân tích, tiến hành clean
lại project
Kết quả: Hiểu được ý nghĩa, mục đích của việc “Clean Code”
Biết thêm một số quy tắc khi viết code, code sạch, code gọn
Nâng cao kỹ thuật lập trình với ngơn ngữ Java
Làm quen với nhiều khái niệm mới: Annotations, Field Reflection,…

2.3.Lập trình web cơ bản
Thời gian: 1,5 tuần
Nội dung: Tìm hiểu về lập trình web, kiến trúc cơ bản của 1 website, cách hoạt động của
website, cơ chế và quy tắc khi gửi request đến server, cách xử lý lỗi trong website,…
Mentor đưa các slide bài giảng về lập trình web cơ bản, yêu cầu thực tập sinh đọc hiểu và
báo cáo lại
Sau khi hoàn thành việc đọc hiểu, mentor đưa 1 bài tập nhỏ về website cho thực tập sinh
thực hành. Yêu cầu thêm vào đó các chức năng: sửa, xóa, phân quyền truy cập,…
Thực hiện:
Khoảng 1-2 ngày đầu, đọc hiểu slide bài giảng, đồng thời lên google tìm hiểu thêm các
kiến thức khác được đề cập trong slide
Mentor đưa 1 bài tập web cơ bản: Java + Thymeleaf, yêu cầu thực tập sinh trong khoảng
1 tuần hoàn thành các yêu cầu được đưa ra trong bài tập
Kết quả: Hiểu được lập trình web cơ bản
Học thêm được các khái niệm mới trong lập trình web, biết thêm Thymeleaf là template
của Spring dùng để xử lý và tạo HTML,CSS,Javascript


3.Viết Unit test
Thời gian: 1,5 tuần
10


Nội dung: Làm quen với source code công ty, làm việc với quy trình Agile/Scrum, cách
viết unit test cho project
Thực hiện:
Đọc hiểu, tìm hiểu cách viết unit test cho React, và Spring, cách mock các data, services
trong projects
Kết quả: Hiểu được ý nghĩa, tầm quan trọng của unit test trong phát triển phần mềm

4.Thực hiện Project
Thời gian: 4,5 tháng
Nội dung: Xây dựng hệ thống thư viện KMS tích hợp Recommend System, dựa trên hệ
thống cũ. Cơng ty mong muốn có thể thay thế hệ thống cũ
Thực hiện:
Vì project này tương đối to, bản thân cũng chưa có nhiều kinh nghiệm, nên ở project này,
sẽ tham gia ở vị trí Backend Developer, xây dựng server-side cho hệ thống
Kết quả:
Trước khi kết thúc kì thực tập, đã có thêm nhiều kinh nghiệm, cách viết server-side, học
được ngơn ngữ mới, framework mới, tìm hiểu thêm được Docker
Deploy được 1 website hoàn chỉnh trước khi kết thúc thực tập

11


Chương III: Chi tiết Project
1.Giới thiệu Project
KMS Library là hệ thống thư viện được xây dựng từ những ngày đầu công ty thành lập

chi nhánh ở Việt Nam, hỗ trợ các nhân viên mượn sách/ kindle, giúp công ty theo dõi các
transaction mượn/trả sách của nhân viên
Tuy nhiên, do đã được xây dựng từ lâu, công nghệ đã cũ, hệ thống khơng cịn đáp ứng
trải nghiệm người dùng tốt, các quy trình nghiệp vụ cũng đã cũ, một số tính năng cần
thiết hiện tại hệ thống khơng có được nên công ty đặt ra project “KMS Library” nhằm
xây dựng hệ thống mới có thể thay thế được hệ thống cũ

2.Thực hiện
Team gồm:
Backend
- Nguyễn Duy Quang
- Lê Hữu Thắng
Frontend
- Lương Văn Thắng
- Nguyễn Hữu Thắng
Bussiness Analyst
- Bích Nguyễn
AI
- Trung Nguyễn
12


- Thi Nguyễn

3.Kế hoạch
a.Giai đoạn 1
Tìm hiểu cơng nghệ sử dụng trong Project
Xây dựng frontend với VueJS
Xây dựng backend với Golang
Tích hợp API lấy thơng tin sách từ API google books

Xây dựng database cơ bản: sách,kindle, migrate các account user trong công ty,
transaction mượn, trả sách
Demo thử nghiệm để xác thực tính khả thi của Project
Giai đoạn 1 chỉ dừng lại ở mức demo đơn giản, Nhằm chứng minh tính khả thi của dự án

b.Giai đoạn 2
Cải thiện UI-UX
Xây dựng microservices với Golang
Deploy mơi trường dev với Docker
Tích hợp elasticsearch với server-side
Hoàn thành rating, review sách lấy từ API goodread
Hoàn thiện database, tham khảo quy trình mượn/trả sách hiện tại của cơng ty, hồn thiện
transactions, quản lý các state của transaction

c.Giai đoạn 3
Cải thiện UI-UX
Tích hợp Recommend System của anh Trung Nguyễn phát triển vào server-side
13


Thêm micro service notification: Hỗ trợ gửi thông báo đến người dùng
Hoàn thiện việc gửi email đến user
Deploy sản phẩm lên server công ty để tester kiểm thử

4.Kiến trúc Project

Project sẽ bao gồm 2 thành phần
- Giao diện (Front-end) sẽ được viết bằng VueJS
- Server-side (Backend) sẽ được viết bằng Golang và Python


5.Kiến trúc Backend
Đây là phần/ nội dung chính mà trong kỳ thực tập doanh nghiệp, sinh viên đã thực hiện ở
KMS

14


Giới thiệu các kỹ thuật áp dụng:

a.Elasticsearch

Elasticsearch là một công cụ tìm kiếm dựa trên nền tảng Apache Lucene. Nó cung cấp
một bộ máy tìm kiếm dạng phân tán, có đầy đủ công cụ với một giao diện web HTTP có
hỗ trợ dữ liệu JSON
Elasticsearch được phát triển bởi JAVA
Ưu điểm:
-

Tìm kiếm dữ liệu rất nhanh chóng, mạnh mẽ dựa trên Apache Lucene ( nearrealtime searching)

-

Có khả năng phân tích dữ liệu (Analysis data)
15


-

Khả năng mở rộng theo chiều ngang


-

Hỗ trợ tìm kiếm mờ (fuzzy), tức là từ khóa tìm kiếm có thể bị sai lỗi chính tả hay
khơng đúng cú pháp thì vẫn có khả năng elasticsearch trả về kết quả tốt.

-

Hỗ trợ Structured Query DSL (Domain-Specific Language ), cung cấp việc đặc tả
những câu truy vấn phức tạp một cách cụ thể và rõ ràng bằng JSON.Các bạn có
thể tìm hiểu thêm tại đây

-

Hỗ trợ nhiều Elasticsearch client như Java, PhP, Javascript, Ruby, .NET, Python

Nhược điểm:
-

Elasticsearch được thiết kế cho mục đích search, do vậy với những nhiệm vụ khác
ngồi search như CRUD thì elastic kém thế hơn so với những database khác như
Mongodb, Mysql …. Do vậy người ta ít khi dùng elasticsearch làm database
chính, mà thường kết hợp nó với 1 database khác.

-

Trong elasticsearch khơng có khái niệm database transaction , tức là nó sẽ khơng
đảm bảo được tồn vẹn dữ liệu trong các hoạt động Insert, Update, Delete.Tức khi
chúng ta thực hiện thay đổi nhiều bản ghi nếu xảy ra lỗi thì sẽ làm cho logic của
mình bị sai hay dẫn tới mất mát dữ liệu. Đây cũng là 1 phần khiến elasticsearch
khơng nên là database chính.


-

Khơng thích hợp với những hệ thống thường xuyên cập nhật dữ liệu. Sẽ rất tốn
kém cho việc đánh index dữ liệu.

b.Monstache
Monstache là một công cụ, phần mềm thực hiện đồng bộ dữ liệu từ MongoDB sang
Elasticsearch.
Monstache khá giống với Transporter tuy nhiên nó thực hiện đồng bộ dữ liệu một cách
realtime, tức là khi có bất kỳ thay đổi dữ liệu nào trên MongoDB (thêm/sửa/xóa) nó sẽ tự
động cập nhật tới Elasticsearch.
Do tính năng chính của Elasticsearch là tìm kiếm fulltext. Thế nên ở project này, chúng ta
sẽ sử dụng thêm MongoDB làm database chính lưu trữ, và Elasticsearch sẽ là database
phục vụ tìm kiếm
Để có thể search chính xác các dữ liệu hiện có trong database chính, Elasticsearch phải
được đồng bộ realtime với MongoDB
Đây chính là mục đích của Monstache

16


c.Recommend-service
Service này sẽ được viết bằng Python. Dựa vào dữ liệu đầu vào là chi tiết 1 sách bất kì,
hệ thống sẽ tính tốn, đưa ra các sách tương tự có trong hệ thống

d.Search-service
Viết bằng Golang. Mục đích của service này sẽ nhận tìm kiếm fulltext, bao gồm search cả
các sách tiếng việt


e.Notification-service
Viết bằng Golang. Service này sẽ connect tới firebase. Nhận trách nhiệm thông báo, lưu
trữ notification cho người dùng theo thời gian thực

f.gRPC
Bài toán đặt ra: 1 request phía client có thể sẽ phải cần nhiều service chạy trên các server
này để tổng hợp thông tin rồi mới response cho client. Sự liên lạc giữa các server lúc này
sẽ là vấn đề khi trước đó tất cả service chạy trên 1 server thì khoẻ re, vì local call nên
khơng có gì. Cụ thể đó là, khi một server muốn lấy data từ server khác sẽ cần phải encode
data (JSON, XML), phía nhận cũng phải làm cơng việc ngược lại là decode data mới hiểu
rồi lại phải encode lại tiếp. Việc này tiêu tốn khá nhiều tài nguyên xử lý (CPU) mà lẽ ra
chỉ cần làm ở bước đầu và cuối (đầu nhận và trả về cuối cùng).
Tối ưu cho việc "giao tiếp" giữa các server là lý do gRPC ra đời.

*Định nghĩa
17


- gRPC là sự kết hợp của Protocol Buffers và http2, Protocol Buffers được phát triển bởi
google nó nhẹ hơn, nhanh hơn và cung cấp hiệu năng tốt hơn so với sử dụng XML hoặc
JSON
- Cho phép định nghĩa cấu trúc của data dưới dạng file protoc và tự động generate ra file
sử dụng để giao tiếp với ngôn ngữ mà chúng ta muốn.
- Các ngôn ngữ đang được hỗ trợ: C++, Java, Python, Go,…
Ví dụ: Chúng ta sẽ tạo 1 service tasks với 2 tính năng chính là get all tasks và thêm mới 1
tasks
Trước tiên chúng ta sẽ định nghĩa model tasks cũng như các request và response trả về

18



Sau đó register các định nghĩa trên vào task-service

19


Tiếp theo chúng ta sẽ generate file proto. Việc generate này chỉ là chúng ta thêm các
scripts đã được định nghĩa sẵn vào trong project, và chạy lệnh generate.
protoc --proto_path=api/proto/v1 --proto_path=third_party
--go_out=plugins=grpc:pkg/api/v1 todo-service.proto

Proto_path sẽ dẫn tới file proto định nghĩa phía trên
Việc này sẽ tạo ra 1 file go với tên todo-service.pb.go các bạn không cần quan tâm nhiều
đến file này mọi thứ đã được định nghĩa ở file nguồn todo.proto
Tiếp theo chúng ta sẽ cấu hình server trong file server.go

20


21


Chúng ta sẽ tạo file main.go và chạy func RunServer trong hàm main là cài đặt thành
công
Lúc này khi chúng ta muốn service khác giao tiếp với service task, chúng ta chỉ việc copy
file todo-service.pb.proto và todo-service.pb.gw.go vào service đó, và viết các function
Get, Create bình thường
Khởi tạo connect tới service task

22



Định nghĩa function mà chúng ta muốn giao tiếp với service task

23


Khi nào 1 service cần giao tiếp, lấy dữ liệu từ service task, chúng ta chỉ việc gọi function
này trong service đó

6.Lịch làm việc
Làm việc từ thứ 2 – 6 (9:00 – 17:30)
Tuần

Cơng việc

1

Tìm hiểu cơng ty
Tìm hiểu cách liên lạc, thắc

Người hướng dẫn

Mức độ
hoàn thành
Anh Võ Ngọc Dũng 100%

Đánh giá

24



2

3
4
5

6
7

8 – 15

16-24

mắc qua email
Nhận thiết bị từ công ty
Làm các task đơn giản
Training cơng cụ
Training
Học kiến thức lập trình web
Học clean code
Học framework mới
Demo lập trình web
Đọc code project hiện tại
Viết uni test
Lên ý tưởng project mới
Tìm hiểu Golang
Set up demo cơ bản
Demo project

Tiếp tục viết thêm các API
Set up authentication,
authorization
Tìm API get thơng tin sách
từ ISBN
Hồn thiện backend
Cải thiện backend
Rating, transactions, books,
user, quản lý,…
Deploy sản phẩm lên server
thử nghiệm
Viết document bàn giao sản
phẩm lại cho team

Anh Võ Ngọc Dũng 100%

Anh Võ Ngọc Dũng 100%
Anh Võ Ngọc Dũng 100%
Anh Võ Ngọc Dũng 100%
Anh Nguyễn Duy
Quan
Anh Nguyễn Duy
100%
Quang
Anh Nguyễn Duy
100%
Quan

Anh Nguyễn Duy
Quang


100%

Anh Võ Ngọc Dũng 100%

25


×