1. Trang chủ
  2. » Giáo Dục - Đào Tạo

báo cáo thực tập tại Công ty TNHH Trung tâm phát triển phần mềm Việt Nam (NAB - Ngân hàng quốc gia Úc)

14 5 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Báo Cáo Thực Tập Tại Công Ty TNHH Trung Tâm Phát Triển Phần Mềm Việt Nam (NAB - Ngân Hàng Quốc Gia Úc)
Tác giả Nguyễn Quang Huy
Người hướng dẫn Harry Trần, Trần Hồng Tài
Trường học Đại Học Bách Khoa
Chuyên ngành Khoa Học Máy Tính
Thể loại báo cáo thực tập
Năm xuất bản 2023
Thành phố TP. Hồ Chí Minh
Định dạng
Số trang 14
Dung lượng 2,04 MB

Nội dung

Trường Đại Học Bách Khoa - Đại học Quốc gia TP.HCMKhoa Khoa Học & Kỹ Thuật Máy Tính 3.1 Dự án VMP 3.1.1 Giới thiệu dự án Phòng ban NABServ của NAB có nhu cầu phát triển 1 hệ thống giúp q

Trang 1

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH

TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA KHOA HỌC VÀ KĨ THUẬT MÁY TÍNH

BÁO CÁO THỰC TẬP NGOÀI TRƯỜNG HỌC KỲ 223 NĂM HỌC 2022-2023

– CHƯƠNG TRÌNH ĐÀO TẠO: Chính quy đại trà

Công ty TNHH Trung tâm phát triển phần mềm Việt Nam (NAB -Ngân hàng quốc gia Úc)

– CÁN BỘ HƯỚNG DẪN CHUYÊN MÔN TRỰC TIẾP CỦA ĐƠN VỊ/

DOANH NGHIỆP:

Harry Trần

– CÁN BỘ HƯỚNG DẪN/ GIÁM SÁT/ CHẤM ĐIỂM BÁO CÁO CỦA

KHOA (CBHD/CBGS/CĐBC):

Trần Hồng Tài

– SINH VIÊN THỰC HIỆN (SVTH):

HỌ VÀ TÊN: Nguyễn Quang Huy MSSV: 1916081

TP Hồ Chí Minh, Tháng 08/2023

Trang 2

Trường Đại Học Bách Khoa - Đại học Quốc gia TP.HCM

Khoa Khoa Học & Kỹ Thuật Máy Tính

Mục lục

2 Kết quả xét tuyển từ doanh nghiệp 7

3.1 Dự án VMP 9

3.1.1 Giới thiệu dự án 9

3.1.2 Hiện thực dự án 9

3.1.3 Kết quả hiện thực dự án 11

3.2 Dự án Cloud Cost Optimize 12

3.2.1 Giới thiệu dự án 12

3.2.2 Hiện thực dự án 12

3.2.3 Kết quả hiện thực dự án 12

4 Tổng kết quá trình học tập 13 4.1 Những kiến thức, kỹ năng thu nhận được 13

4.2 Cảm nghĩ cá nhân 13

Trang 3

Trường Đại Học Bách Khoa - Đại học Quốc gia TP.HCM

Khoa Khoa Học & Kỹ Thuật Máy Tính

- Mô tả JD về nội dung chương trình thực tập được trình bày dưới đây

- Vị trí: Fullstack Engineer

Trang 8

Trường Đại Học Bách Khoa - Đại học Quốc gia TP.HCM

Khoa Khoa Học & Kỹ Thuật Máy Tính

Kết quả xét tuyển của chương trình thực tập tại NAB Innovation Centre Vietnam

Trang 10

Trường Đại Học Bách Khoa - Đại học Quốc gia TP.HCM

Khoa Khoa Học & Kỹ Thuật Máy Tính

3.1 Dự án VMP

3.1.1 Giới thiệu dự án

Phòng ban NABServ của NAB có nhu cầu phát triển 1 hệ thống giúp quản lý, kiểm soát và cập nhật tự động những lỗ hồng (vulnerability) có trong những platform mà họ phát triển để team dễ theo dõi và sửa chữa Theo nhu cầu đó, dự án VMP (Vunerability Monitoring Project) được hình thành Hệ thống được phát triển thông qua 3 giai đoạn như sau:

• Giai đoạn 1:

- Hoàn thành cơ sở dữ liệu cho hệ thống: Developer cần quan sát quá trình CI/CD của phòng ban NAB-Serv, từ đó xây dựng 1 hệ cơ sở dữ liệu có khả năng mở rộng Ngoài ra, khi NABServ thay đổi quá trình CI/CD thì hệ thống vẫn nhanh chóng đáp ứng mà không gặp trở ngại

- Hoàn thành giao diện cơ bản cho hệ thống: Bao gồm những giao diện hiển thị thông tin của từng vulnerability, hiển thị dashboard cùng những metrics để phòng ban NABServ theo dõi được độ khỏe mạnh của hệ thống mà họ phát triển

- Hoàn thiện những API cơ bản: Backend Developer cần hiện thực thành công những API phục vụ việc thêm, sửa, xóa và đưa thông tin lên cho giao diện để hiện thị lên Dashboard UI

• Giai đoạn 2:

- Hiển thị log trên giao diện: Khi nhập vào vulnerability của 1 CI bị fail, hệ thống sẽ lấy thông tin từ log trong pipeline và hiện lên giao diện

- Cập nhật cơ sở dữ liệu: Khi có bất kỳ Vulnerability mới, cơ sở dữ liệu sẽ tự động cập nhật Điều này sẽ được trigger tự động thông qua 1 quy trình ETL gắn trên máy ảo chạy pipelines

- Nâng cấp Dashboard: Các đồ thị trên dashboard được người dùng nhập thông tin một cách dynamic và trả lại những gì người dùng cần quan sát

• Giai đoạn 3:

- Thực hiện tự động khắc phục những vulnerability phổ biến: Thiết kế quy trình xử lý cho những vulner-ability phổ biến theo cơ sở dữ liệu bảo mật (CVE)

- Tích hợp các phần mềm quét mã nguồn vào hệ thống: Sử dụng các phần mềm phát hiện Vulnerability

tự động như CSS, SCA để quét và tự động cập nhật vào hệ thống cũng như cơ sở dữ liệu

Các vị trí có trong dự án trên:

• QE/QC: 2 người

• Front-end Developer: 3 người

• Backend Developer: 3 người

• DevOps: 2 người

Tất cả các yêu cầu trên đều phải được thực hiện trên hệ thống riêng của NAB, giao diện phải được làm trên 1 Miniapp code bằng React dùng GraphQL để lấy data từ nhiều endpoint và lưu vào từng slice trên redux API phải được viết trên platform NEF của NAB, từng API phải tuân thủ đúng những gì có trong request và response được NAB định sẵn

3.1.2 Hiện thực dự án

Thời gian thực hiện dự án: 7 tuần - bắt đầu từ ngày 28/07 và kết thúc vào ngày 5/9

Dự án được quản lý theo phương pháp Scrum Vì vậy, các mốc thời gian được tính theo sprint và trong dự án này sẽ có tổng cộng là 4 sprint

- Sprint 0: Trong sprint này, các thành viên sẽ làm quen với nhau và làm quen với phương pháp Scrum cùng với

sự hướng dẫn của mentors Outcome của sprint 0 bao gồm:

Trang 11

Trường Đại Học Bách Khoa - Đại học Quốc gia TP.HCM

Khoa Khoa Học & Kỹ Thuật Máy Tính

• : Tuần 1:

– Nắm rõ yêu cầu dự án: Biết được Vulnerability là gì, pipelines của NABServ setup cho các phòng ban

khác như thế nào, tại sao phải cần có 1 platform để quản lý những vấn đề trên

• : Tuần 2:

– Thiết lập Way of works chung cho cả team, làm quen từng thành viên và vai trò của nhau: Giới thiệu

cho mọi người về Scrum framework, cách làm việc chung như thế nào để mọi người có thể thoải mái

tự do đóng góp ý kiến, sắp xếp thời gian và các mốc meeting

– Thiết lập repository trên Github để sẵn sàng cho việc code từ sprint sau: Thiết lập repository cho

Front-end và Back-end, phân công DevOps để setup CI của từng repository lên Jenkins

- Sprint 1: Outcome của sprint 1 bao gồm các task như sau.

• Tuần 3:

– Hoàn thành việc thiết kế cơ sở dữ liệu: Thực hiện phân tích yêu cầu dữ liệu, lấy data từ pipelines và các

tool bảo mật để xem những fields nào cần lưu lại và lưu như thế nào để có thể mở rộng được Vẽ ERD

và thực hiện Mapping thành Schema, chuẩn hóa dữ liệu cũng như phân quyền cho các nhóm người dùng

– Hoàn thành phác thảo giao diện bằng figma: Sử dụng figma để phác thảo những giao diện chính

như giao diện xem và quản lý toàn bộ vulnerability, giao diện dashboard, giao diện thêm/sửa/xóa vulnerability, giao diện hiện lịch sử chỉnh sửa và quá trình tự động thêm vào của pipelines

• Tuần 4:

– Thiết lập CI thành công để giúp các developer phát triển sản phẩm: Setup các state có trong CI, tự

động hóa các bước build, test, integration, deployment có trong hệ thống, tự động hóa việc chạy CI mỗi khi có commit hoặc PR trên repository chính

– Nghiên cứu về GraphQL và hiện thực sử dụng GraphQL trong hệ thống: Hiểu được lợi ích và bất lợi

khi sử dụng GraphQL, cần lưu ý những gì Cách thiết lập Apollo server cho Miniapps cũng như tạo schema cho dữ liệu trong GraphQL

– Hoàn thiện sequence diagram, activity diagram và component diagram: Thực hiện các diagram để

developer dễ dàng code theo yêu cầu chức năng, yêu cầu hệ thống Đảm bảo các diagram biểu diễn đúng behavior của hệ thống và không conflict lẫn nhau

- Sprint 2: Sau khi thực hiện sprint 1, sprint 2 đặt nặng việc hoàn thành các yêu cầu về tech bao gồm:

• Tuần 5:

– Hoàn thành các ticket liên quan đến UI và tạo PR: Thực hiện tạo component trong React và ghép thành

các trang sau khi hoàn thành các component đó Tạo PR và sửa theo review của các mentor có trong PR

– Hoàn thiện toàn bộ các API, tạo PR: Hiện thực các API bằng Java, các API chính bao gồm thêm, sửa,

xóa và kéo data lên dashboard Ngoài ra, cần có API để tương tác với terminal mà máy ảo đang chạy

CI trên

– Viết unit-test cho từng UI và API: Developer sẽ tạo unitest cho từng UI và API, từ đó nếu có chỉnh sửa

gì thì có thể chạy lại test để biết behavior mà mình đổi có hoạt động giống như cũ hay không

• Tuần 6:

– Hiện thực kiểm thử API: Các QE sẽ sử dụng Postman để test API cũng như Cypress cho việc

Intergra-tion Test Kiểm tra các request và response có đúng với compliance mà NAB đề ra hay không

– Setup Redux và Apollo server: Sử dụng GraphQL để query dữ liệu từ nhiều endpoint, sau đó thêm

chúng vào các slice có trong redux, nhờ vậy các global state sẽ được quản lý chặt chẽ hơn và đi đến đúng những trang nào cần

– Nghiên cứu về quy trình phòng ban NABServ thiết lập CI để chuẩn bị cho sprint cuối.

- Sprint 3: Trong sprint cuối này, nhóm em sẽ thực hiện việc tự động hóa qua các tasks sau:

Trang 12

Trường Đại Học Bách Khoa - Đại học Quốc gia TP.HCM

Khoa Khoa Học & Kỹ Thuật Máy Tính

• Tuần 7:

– Viết bash-script sử dụng cronjobs để schedule việc đưa dữ liệu từ log vào cơ sở dữ liệu của hệ thống:

Sau khi hoàn thiện các task yêu cầu manual, nhóm em bắt đầu hiện thực những task về automation và task transform data từ logs vào database là task đầu tiên mà nhóm thực hiện

– Thiết lập 1 quy trình ETL sử dụng Python để xử lý dữ liệu và lưu dữ liệu: Dữ liệu từ logs sẽ không

thể đi thẳng vào database được vì nhóm đang dùng cơ sở dữ liệu quan hệ, hệ thống cần làm sạch và transform dữ liệu trước sau đó mới có thể thêm vào schema có sẵn

• Tuần 8:

– Thiết lập script xử lý các Vulnerability thường xuyên gặp phải của những platform trong NAB: Với

những vulnerability đã có cách làm đơn giản và cụ thể, nhóm sẽ viết script và tích hợp nó với terminal

có sẵn trong máy ảo chạy CI, script này sẽ tự động trigger khi phát hiện đúng vulnerability mà nó cần tìm

– Tích hợp việc tự động hóa và báo cáo lại kết quả của hệ thống trên giao diện: Sau khi hoàn thành xử lý

các vulnerability một cách tự động, các hoạt động này sẽ được ghi nhận lại và hiển thị trên giao diện

– Kiểm thử phần mềm và deploy lên hệ thống của NAB: QE/QC sẽ thực hiện intergration test cho cả hệ

thống với số lượng lớn các vulnerability được đổ vào cũng như số lượng lớn các pipelines được chạy Sau khi test thành công, hệ thống sẽ được deploy lên hệ thống phần mềm của NAB

3.1.3 Kết quả hiện thực dự án

Dự án chạy tốt ở môi trường dev, lượng vulnerability truyền vào cơ sở dữ liệu dưới mức 100000000 đạt performance tốt Tuy nhiên, khi số vulnerability tăng mạnh và đồng thời tại cùng 1 thời điểm, hệ thống gặp 1 số vấn đề về performance

Trong môi trường production, hệ thống thực hiện tương tự như trong môi trường dev, dữ liệu từ pipelines truyền ra được ghi nhận lại và được phản hồi đúng như requirement đề ra Hệ thống hoạt động real-time tốt và có performance ở mức chấp nhận được với lượng metrics nhận vào là dưới 2 triệu metrics trong 1 ngày

Trang 13

Trường Đại Học Bách Khoa - Đại học Quốc gia TP.HCM

Khoa Khoa Học & Kỹ Thuật Máy Tính

3.2 Dự án Cloud Cost Optimize

3.2.1 Giới thiệu dự án

NAB có nhu cầu sử dụng rất nhiều computing và storing services Vì vậy, việc sử dụng những giải pháp trên Cloud sẽ giúp NAB tiết kiệm được rất nhiều chi phí Tuy nhiên, những máy ảo trên cloud sẽ không tự động tắt ngoài giờ làm việc một cách tự động, và nếu ta chọn cách làm manual thì điều đó gần như không thể vì số lượng máy ảo mà NAB sử dụng là rất lớn (lên tới con số hàng chục triệu), điều này làm thất thoát 1 lượng chi phí khá lớn Chính vì nhu cầu trên, NAB muốn xây dựng 1 hệ thống quản lý các máy ảo và tự động bật/tắt theo nhu cầu sử dụng, hệ thống tuy có chức năng đơn giản nhưng sẽ phải đáp ứng được nhu cầu mở rộng và không bị sập với số lượng máy ảo quản lý dưới 100000

Các vị trí có trong dự án trên:

• Python developer: 1 người

• Terraform DevOps: 1 người

• AWS Architect: 1 người

Để giới hạn lại tầm vực dự án, hệ thống trên sẽ hiện thực trên AWS và sẽ sử dụng terraform cùng với boto3 (SDK của AWS trong Python) để tự động hóa qua IaC

3.2.2 Hiện thực dự án

Dự án được hiện thực trong 3 sprint, mỗi sprint kéo dài 1 tuần bắt đầu từ ngày 05/07 với các công việc như sau:

- Sprint 1: Research

• Tìm hiểu về AWS: Hiểu rõ về những lợi ích khi dùng Cloud, những service chính mà AWS cung cấp

• Tìm hiểu về Terraform - Khái niệm Infrastructure as Code (IaC): Tìm hiểu về những lợi ích khi dùng IaC, những điều cần lưu ý khi sử dụng IaC

• Tìm hiểu về Boto3: Hiểu rõ những SDK mà AWS cung cấp, hiểu rõ lợi ích khi sử dụng Boto3 kết hợp với Terraform

- Sprint 2: Implement

• Hiện thực các function bật tắt EC2 bằng Boto3: Sử dụng Boto3 trên Python để setup các function cho việc

tự động hóa bật tắt EC2, viết hàm lấy dữ liệu các metrics và thời gian từ AWS - sau đó transform và xử lý

dữ liệu

• Hiện thực các script Terraform: Viết các script terraform để dựng lên các EC2 trong AWS, việc viết bằng code sẽ giúp lưu lại thông tin các EC2 và tránh sai sót khi dựng 1 lượng lớn các EC2 trên Cloud

- Sprint 3: Testing and Deploying

• Kiểm thử sản phẩm với môi trường sandbox thiết lập và quản lý 2000 máy ảo

• Kiểm thử khi metrics đạt thấp, các máy ảo tự động tắt

• Kiểm thử trường hợp các EC2 tự động shutdown khi hết giờ làm việc

• Deploy sản phẩm lên hệ thống của NAB

3.2.3 Kết quả hiện thực dự án

Sản phẩm của nhóm tuy đạt được yêu cầu chức năng tuy nhiên lại không đạt được hết những yêu cầu phi chức năng Khi số lượng EC2 đạt đến hàng chục và trăm nghìn, behavior của hệ thống không được như mong muốn Nhìn chung, hệ thống sẽ áp dụng được với số lượng EC2 nhỏ hơn 5000 máy

Trang 14

Trường Đại Học Bách Khoa - Đại học Quốc gia TP.HCM

Khoa Khoa Học & Kỹ Thuật Máy Tính

4.1 Những kiến thức, kỹ năng thu nhận được

Sau quá trình được thực tập tại doanh nghiệp qua 9 tuần vừa qua, bản thân em đã được học hỏi và tiếp thu rất nhiều điều từ những người đàn anh đi trước trong nghề, cụ thể như sau:

• Được tham gia vào 1 quy trình sản xuất phần mềm chỉnh chu, làm việc theo những chuẩn đề ra và có phương pháp hiệu quả

• Được học về nguyên lý phát triển hệ thống để hệ thống có thể scale trên quy mô lớn, nhiều người cùng tham gia phát triển mà hệ thống vẫn không bị conflict lên nhau cũng như có thể tự do thêm mới mà không ảnh hưởng đến những gì đã có trước đó trong hệ thống

• Được học về những hệ thống và giải pháp sử dụng Cloud thay cho Data center on premise Biết được những lợi ích khi sử dụng cloud, làm thế nào để tối ưu khi sử dụng cloud và đặc biệt là cách để thiết kế và kiểm thử

1 hệ thống xem có đạt chuẩn hay không

• Được trải nghiệm thiết kế 1 Miniapp ở trong NAB, hiểu về kiến trúc hệ thống của một ngân hàng lớn, được chỉ dẫn về GraphQL, tích hợp GraphQL trong hệ thống

• Được training về bảo mật và những nguyên tắc về bảo mật khi phát triển hệ thống Biết được những lợi ích khi phân tầng API nội bộ và API công khai Hiểu về khái niệm Penetration Testing và cách để triển khai nó

1 cách hiệu quả

• Được tham gia các buổi sharing về những công việc, vị trí có trong NAB và cách mọi người trong team làm việc với nhau cho hiệu quả bằng phương pháp Agile

• Được áp dụng những kiến thức có được từ những môn học trên trường trong quá trình thực tập, từ đó biết bản thân mình cần phải cải thiện thêm ở những lỗ hổng kiến thức nào

4.2 Cảm nghĩ cá nhân

• Theo em, việc được trải nghiệm môi trường doanh nghiệp đã giúp em mở rộng thêm được nhiều thứ, giúp

em hiểu được văn hóa làm việc và sắp xếp thời gian một cách hợp lý để có thể hoàn thành kịp thời gian đề ra

• Môi trường ở đây khá thân thiện và hòa đồng, vì là một doanh nghiệp lớn nên đôi lúc sẽ có những quy định khá khắt khe và chặt chẽ, tuy nhiên vì vậy mà em học được nhiều về quy trình của một công ty lớn

• Về chương trình thực tập, em cảm thấy những gì mà công ty cũng như những dự án này đem lại thật sự rất

bổ ích cho cá nhân em Những kinh nghiệm mà em tích lũy được trong quá trình thực tập cũng như thực hiện các dự án do công ty đề ra nhất định sẽ giúp cho em rất nhiều trong chặng đường về sau

• Việc thực tập trong kỳ hè này đã làm em nhận ra mình vẫn còn rất nhiều điểm yếu cần khắc phục, những thiểu sót cần phải bổ sung Em thật sự rất trân trọng khoảng thời gian được thực tập ở đây vì đã giúp em nhận

ra những gì mà bản thân cần cải thiện để có thể trở nên tốt đẹp hơn trong sự nghiệp của mình

Ngày đăng: 23/04/2024, 14:31

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w