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

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)

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 (2.04 MB, 14 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINHTRƯỜNG ĐẠI HỌC BÁCH KHOA</b>

<b>KHOA KHOA HỌC VÀ KĨ THUẬT MÁY TÍNH</b>

<b>BÁO CÁO</b>

<b>THỰC TẬP NGỒI TRƯỜNGHỌC KỲ 223 NĂM HỌC 2022-2023</b>

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

<b>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)</b>

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

<b>– SINH VIÊN THỰC HIỆN (SVTH):</b>

<b>HỌ VÀ TÊN: Nguyễn Quang Huy MSSV: 1916081</b>

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

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<b>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</b>

<b>Mục lục</b>

<b>2Kết quả xét tuyển từ doanh nghiệp7</b>

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

<b>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</b>

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

<b>- Vị trí: Fullstack Engineer</b>

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

<b>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</b>

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

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

<b>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</b>

<b>3.1Dự án VMP</b>

<b>3.1.1Giới thiệu dự án</b>

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. Ngồ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 tn thủ đúng những gì có trong request và response được NAB định sẵn.

<b>3.1.2Hiện thực dự án</b>

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

<b>- 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</b>

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

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

<b>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</b>

• : Tuần 1:

<b>– 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</b>

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:

<b>– 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</b>

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.

<b>– 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</b>

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

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

• Tuần 3:

<b>– 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</b>

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.

<b>– Hồ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</b>

như giao diện xem và quản lý tồ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:

<b>– 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ự</b>

độ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.

<b>– 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</b>

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.

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

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.

<b>- 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:</b>

• Tuần 5:

<b>– Hồ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</b>

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.

<b>– Hồn thiện tồ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,</b>

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

<b>– 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</b>

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:

<b>– 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 </b>

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

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

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.

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

<b>- 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:</b>

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

<b>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</b>

• Tuần 7:

<b>– 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:</b>

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.

<b>– 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</b>

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:

<b>– 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</b>

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.

<b>– 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ý</b>

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.

<b>– 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ệ</b>

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.

<b>3.1.3Kết quả hiện thực dự án</b>

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.

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

<b>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</b>

<b>3.2Dự án Cloud Cost Optimize</b>

<b>3.2.1Giới thiệu dự án</b>

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 ngồ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 thố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.

<b>3.2.2Hiện thực dự án</b>

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:

<b>- Sprint 1: Research</b>

• 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

<b>- Sprint 2: Implement</b>

• 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.

<b>- Sprint 3: Testing and Deploying</b>

• 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.

<b>3.2.3Kết quả hiện thực dự án</b>

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.

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

<b>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</b>

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

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 q 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.

<b>4.2Cảm nghĩ cá nhân</b>

• 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ể hồ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 q 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.

</div>

×