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
Trang 1ĐẠ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 TechnologyNgười phụ trách: Võ Ngọc DũngThực tập sinh: Lê Hữu Thắng
Thành phố Hồ Chí Minh, ngày 28 tháng 07 năm 2020
Trang 2LỜ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ị trongteam, 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ờigian 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ắngThành phố Hồ Chí Minh, ngày 08 tháng 06 năm 2020
Trang 3NHẬN XÉT CỦA KHOA
Trang 4
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
Trang 5d.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
Trang 6Chươ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 toàn cầu tronglĩ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ảnphẩ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ẩmvươn tầm thế giới rất tuyệt vời như: Katalon, Kobiton, Sprynkl và sẽ sớm có những sảnphẩ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àinăng Những năm gần đây, KMS cũng luôn được bình chọn nằm trong top 4 công tyCô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, ấmcúng và đáng để phát triển sự nghiệp bản thân
Trang 7Kobiton ra đời năm 2016 từ vườn ươm UpStar Labs, một nhánh đầu tư ươm tạo khởinghiệp thuộc KMS Technology, do nhóm 5 kỹ sư Việt Nam phát triển Trên nền tảngcô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útngắ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, FrontierAirlines, 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 toán nhân sự bao gồm:
- Quản lý toàn diện hành trình nhân viên (Employee Journey) từ tuyển dụng đếnoffboarding
Trang 8 Đư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ố hoá" và “đơn giản hoá” cácquy trình nhân sự
Trang 9Chươ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, quá 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 tyKế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,
Trang 10- 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
Trang 11Nộ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
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
Trang 12Chươ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ậpchi 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áctransaction 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 ứngtrả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ầnthiết hiện tại hệ thống không có được nên công ty đặt ra project “KMS Library” nhằmxây dựng hệ thống mới có thể thay thế được hệ thống cũ
Trang 13- 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, hoàn thiệntransactions, 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
Trang 14Thê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
Trang 15Giới thiệu các kỹ thuật áp dụng:
Trang 16- 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 ngoà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 toà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
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
Trang 17Service 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 toán, đưa ra các sách tương tự có trong hệ thống
Tối ưu cho việc "giao tiếp" giữa các server là lý do gRPC ra đời
*Định nghĩa
Trang 18- 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 1tasks
Trước tiên chúng ta sẽ định nghĩa model tasks cũng như các request và response trả về
Trang 19Sau đó register các định nghĩa trên vào task-service
Trang 20Tiế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
Trang 22Chú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 copyfile 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
Trang 23Định nghĩa function mà chúng ta muốn giao tiếp với service task
Trang 24Khi 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 đó
Trang 254 Đọc code project hiện tại
Viết uni test
100%
6 Demo project
Tiếp tục viết thêm các API
Anh Nguyễn Duy Quang
8 – 15 Hoàn thiện backend
Cải thiện backend
Rating, transactions, books,
Viết document bàn giao sản
phẩm lại cho team
Anh Võ Ngọc Dũng 100%
Trang 26Chương IV: Kết luận và đánh giá
1.Kết luận
Sau khi kết thúc chương trình thực tập tại KMS, sinh viên tự đánh giá bản thân tiếp thu được thêm nhiều kiến thức mới, đặc biệt là trong lĩnh vực lập trình web, hiểu thêm các khái niệm, mục đích, và ý nghĩa của các giai đoạn công việc trong quá trình phát triển sảnphẩm Sinh viên học được các kỹ năng mềm trong lúc làm việc, làm quen với các quy trình sản xuất phần mềm,…
Những kinh nghiệm quý báu này sẽ là hành trang quan trọng cho bản thân sinh viên, là kiến thức vững chãi cho sự nghiệp sau này
Một lần nữa, sinh viên Lê Hữu Thắng xin cảm ơn công ty KMS đã giúp đỡ cho sinh viên trong suốt quá trình thực tập cũng như làm việc, và chân thành cảm ơn Thầy/Cô Khoa Công nghệ phần mềm đã tạo điều kiện tốt nhất cho sinh viên được hoàn thành kỳ thực tậpdoanh nghiệp này
2.Đánh giá
Bên cạnh những kiến thức tiếp thu được, do bản thân vẫn còn chưa có nhiều kinh
nghiệm, nên những sai sót là điều không thể tránh khỏi Trong quá trình thực tập, làm việc, sinh viên tự đánh giá bản thân những điểm sau chưa làm được:
- Code đôi khi chưa được clean
- Đối với một số feature, do chưa tích lũy nhiều kiến thức, nên giải pháp đưa ra có thể chưa là tốt nhất
- Estimate công việc chưa chính xác, đôi khi trễ hơn tiến độ 1 vài ngày
Những sai sót này sẽ giúp ích sinh viên nhận ra, cải thiện bản thân hơn trong tương lai
Trang 27Tài liệu tham khảo
[Golang] gin-gonic-framework-85b1a6e176f3
https://medium.com/@thedevsaddam/build-restful-api-service-in-golang-using-[Golang Microservices] grpc-microservice-with-http-rest-endpoint-middleware-kubernetes-daebb36a97e9
https://medium.com/@amsokol.com/tutorial-how-to-develop-go-[Goodread API] https://www.goodreads.com/api
[Keycloak Golang] https://github.com/Nerzal/gocloak
[gRPC] 436168fd0cbc