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

Báo cáo bài tập lớn Phát triển phần mềm hướng dịch vụ . SQL LAB

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 (1.73 MB, 15 trang )

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

HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THÔNG

<b>KHOA CÔNG NGHỆ THÔNG TIN 1 </b>

<b>BÁO CÁO BÀI TẬP LỚNĐỀ TÀI: SQL LAB</b>

<b>Học phần: Phát triển phần mềm hướng dịch vụ Nhóm học phần: 04 </b>

<b>Nhóm bài tập lớn: 18 </b>

<b>Thực hiện: </b>1. Bùi Hoàng Vinh – B20DCCN736 2. Phạm Văn Tới – B20DCCN606 3. Nguyễn Hữu Tuấn – B20DCCN616

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

<b>1. Với bài tập bao gồm các câu lệnh truy vấn dữ liệu ... 3 </b>

<b>2. Với bài tập bao gồm các lệnh ghi dữ liệu và thay đổi cấu trúc của dữ liệu ... 4 </b>

<b>V. TRIỂN KHAI HỆ THỐNG ... 4 </b>

<b>1. Kiến trúc hệ thống ... 4 </b>

<b>2. Tự động triển khai bằng CICD Pipline ... 5 </b>

<b>VI. KẾT QUẢ TRIỂN KHAI ... 5 </b>

<b>VII. PHƯƠNG HƯỚNG PHÁT TRIỂN ... 14 </b>

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

<b>I. GIỚI THIỆU </b>

Ngày nay, công nghệ thông tin được xem là lĩnh vực đầu thể hiện mức độ phát triển của một quốc gia. Cùng với sự phát triển của ngành công nghệ thông tin, Database (cơ sở dữ liệu) đóng một vai trị vô cùng quan trọng và là thành phần không thể thiếu trong hầu hết ứng dụng công nghệ hiện nay. Chúng không chỉ đơn thuần là nơi lưu trữ dữ liệu cho các ứng dụng như: Web, AI, Mobile, IOT, … mà cịn là hệ thống quản lý thơng tin và hỗ trợ quyết định kinh doanh. Từ việc lưu trữ thông tin về khách hàng, sản phẩm, đến việc phân tích xu hướng và dự đốn, database đóng vai trị khơng thể phủ nhận trong việc cung cấp thơng tin chính xác, quan trọng cho các cá nhân, tổ chức và doanh nghiệp cũng như lưu trữ và quản lý những thơng tin này

Vì vậy, việc nắm bắt được các kiến thức nền tảng của Database hiện nay đang là điều trở nên vô cùng quan trọng cho những người muốn theo đuổi công nghệ, đặc biệt là cá nhân có định hướng phát triển liên quan đến cơng nghệ thơng tin. Do đó, SQL Lab sinh ra nhằm để hỗ trợ những cá nhân đặc biệt là các bạn sinh viên có nhu cầu học tập, phát triển kiến thức chuyên môn và niềm đam mê với cơ sở dữ liệu có thể tìm hiểu, thực hành trực tuyến thông qua các bài tập liên quan đến các câu lệnh truy vấn đến Database từ cơ bản cho đến nâng cao

Hiện nay, trên thế giới có rất nhiều trang web giúp chúng ta có thể luyện tập các câu lệnh về cơ sở dữ liệu (đa số về SQL) trực tuyến, nổi bật nhất như là: SQL Zoo, LeetCode, HackerRank, CodeCademy.

Các trang web trực tuyến đó đều có những bài tập đa dạng từ cơ bản đến nâng cao đi hết đa số các kiến thức, câu lệnh truy vấn thao tác với Database và có mơi trường runtime giúp người dùng có thể chạy và chấm điểm các câu lệnh trên trang web.

Chi tiết hơn, HackerRank đem đến người dùng một loạt bài luyện tập trực tuyến từ những bài toán đơn giản đến phức tạp đi qua hầu hết các kiến thức về câu lệnh truy vấn đến Database với SQL như: SELECT, SELECT DISTINCT, JOIN, WHERE Condition, GROUP, HAVING, ORDER, AGGEGATION, LIKE, IN, … Đa phần các bài toán hiện tại mang ý nghĩa đọc dữ liệu (SELECT) và không làm thay đổi dữ liệu, trạng thái của Database.

Ngoài các bài tập liên quan đến câu lệnh truy vấn dữ liệu, các trang web lớn khác như SQL Zoo và LeetCode cịn có thêm những bài tập liên quan đến việc thay đổi dữ liệu và cấu trúc dữ liệu như: CREATE, INSERT, UPDATE, DELETE, ALTER, … Tuy những bài tập liên quan đến câu lệnh này có độ khó thấp hơn và thường khơng có nhiều các bài toán phức tạp như các câu lệnh SELECT, nhưng đây cũng là những kiến thức cơ bản, vô

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

<b>III. MỤC TIÊU </b>

- Mục tiêu tối thiểu:

+ Xây dựng được trang web với mơ hình kiến trúc hướng dịch vụ

- Mục tiêu mong muốn thực hiện thêm: Xây dựng và hoàn thiện được giải pháp cho các câu lệnh ghi dữ liệu

Để triển khai được ứng dụng SQL Lab đưa đến người dùng cuối, nhóm em đưa ra giải pháp sau. Đầu tiên, việc triển khai một trang web hay một ứng dụng là điều tất yếu. Trang web hoặc ứng dụng sẽ được triển khai dựa trên mơ hình kiến trúc hướng dịch vụ, tách riêng ra: web front-end, server và database. Các thành phần trong hệ thống giao tiếp với nhau thông qua các API

Về giải pháp đưa đến môi trường runtime và các bài tập giúp người dùng có thể luyện tập, thực hành, chấm điểm trực tiếp trên trang web được chia ra làm 2 trường hợp

<b>1. Với bài tập bao gồm các câu lệnh truy vấn dữ liệu </b>

Bài tập sẽ liên quan đến các kiến thức về các câu lệnh như: SELECT, SELECT DISTINCT, JOIN, WHERE Condition, GROUP, HAVING, ORDER, AGGEGATION, LIKE, IN, …

dựng các bài tập trên trang web

hệ, dữ liệu để người dùng có thể truy vấn. Dữ liệu này sẽ được WRITE LOCK để nhằm tránh các thay đổi.

server sẽ dùng user này để đọc dữ liệu từ Database.

trên câu lệnh người dùng nhập. Sau đó, kết quả sẽ lần lượt được so sánh với nội dung test case đã tạo.

Ngược lại thì không.

câu lệnh người dùng đã tối ưu hay chưa dựa trên thời gian truy vấn của câu lệnh.

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

<b>2. Với bài tập bao gồm các lệnh ghi dữ liệu và thay đổi cấu trúc của dữ liệu </b>

Bài tập sẽ liên quan đến các kiến thức về các câu lệnh như: CREATE, INSERT, UPDATE, DELETE, ALTER, … Với trường hợp này, giải pháp sẽ phức tạp hơn so với các bài tập ở trên. Tương tự ở những bước đầu ở giải pháp trên, ta cũng cần:

CREATE, INSERT, UPDATE, DELETE, ALTER, …

thông qua các bảng tạm (lưu trữ trong Disk hoặc Memory?).

check lại bằng các câu lệnh khác như: SHOW COLUMN (trả về cấu trúc TABLE), SELECT, … để so sánh với các testcase.

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

- Database quản lý, lưu trữ các thông tin về người dùng, bài tập, bài test, ... được triển khai dưới dạng multi instance theo mơ hình sao chép dữ liệu Master-Slave replication nhằm để dự phòng, chia tải khi cần thiết hoặc khi có sự cố xảy ra

quản trị CSDL

động và tải của VM

<b>2. Tự động triển khai bằng CICD Pipline </b>

<b>- Mơ tả: </b>Triển khai tính năng tự động tích hợp, tự động triển khai cho Service chấm bài cho MySQL.

<b>- Công nghệ sử dụng: </b>Jenkins, Github, Ansible

<b>- Luồng hoạt động: </b>

repository trên Github

động triển khai code mới lên Virtual Machine được chỉ định

từ Github Repository

Hệ thống được triển khai trên 5 Virtual Machine bao gồm các Container, cụ thể:

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

- VM3: Web Server 1, Web Server 2, Master Database, Slave Database, Node Exporter, Cadvisor

<b>Hệ thống cảnh báo giám sát </b>

Các exporter trên các VM export ra các thông số giám sát:

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

Prometheus tập trung collect các thông số giám sát từ các Exporter trên VM:

Grafana visualize các thơng số đó dưới dạng đồ thị:

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

- Cadvisor giám sát các Container được cài trên VM

Grafana gửi cảnh báo đến Operator khi hệ thống gặp cao tải (Sau khi thử nghiệm stress test lên Database)

<b>Luồng CICD tự động tích hợp, tự động triển khai source code mới lên hệ thống </b>

Luồng CICD cho Server chấm bài MySQL

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

Khi có một tag mới đẩy lên Github:

Jenkins nhận được event và khởi động Pipeline:

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

Docker image với tag mới được đẩy lên Dockerhub:

Ansible triển khai hệ thống trên VM được chỉ định:

Service chấm cho MySQL được triển khai trên VM được chỉ định:

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

<b>Hình ảnh kết quả trên giao diện người dùng </b>

<b>- Đối với User là quyền student + Tham gia contest trên hệ thống </b>

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

+ Submit lời giải issue với MySQL và SQL Server

<b>- Đối với User quyền Admin </b>

+ Quản lý contest

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

+ Thêm issue vào contest

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

<b>VII. PHƯƠNG HƯỚNG PHÁT TRIỂN </b>

Bên cạnh việc đáp ứng được những yêu cầu tối thiếu đối với một hệ thống SQL lab, trong tương lai, nhóm sẽ nghiên cứu và phát triển thêm những tính năng mới bổ sung để hoàn thiện hệ thống này. Các phương hướng sẽ phát triển trong tương lai bao gồm:

thường như: Gửi request liên tục trong một thời gian ngắn,...

người dùng

<small>- </small> ...

</div>

×