Phát triển phần mềm hướng dịch vụ . SQL LAB Học viện công nghệ bưu chính viễn thông ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
KHOA CÔNG NGHỆ THÔNG TIN 1
BÁO CÁO BÀI TẬP LỚN
ĐỀ TÀI: SQL LAB
Học phần: Phát triển phần mềm hướng dịch vụ Nhóm học phần: 04
Nhóm bài tập lớn: 18 Thực hiện: 1 Bùi Hoàng Vinh – B20DCCN736
2 Phạm Văn Tới – B20DCCN606
3 Nguyễn Hữu Tuấn – B20DCCN616
Trang 2MỤC LỤC
MỤC LỤC 1
I GIỚI THIỆU 2
II KHẢO SÁT 2
III MỤC TIÊU 3
IV GIẢI PHÁP 3
1 Với bài tập bao gồm các câu lệnh truy vấn dữ liệu 3
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
V TRIỂN KHAI HỆ THỐNG 4
1 Kiến trúc hệ thống 4
2 Tự động triển khai bằng CICD Pipline 5
VI KẾT QUẢ TRIỂN KHAI 5
VII PHƯƠNG HƯỚNG PHÁT TRIỂN 14
Trang 3I GIỚI THIỆU
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ự đoá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ô
Trang 4III MỤC TIÊU
- 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
1 Với bài tập bao gồm các câu lệnh truy vấn dữ liệu
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
Trang 52 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à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
được giải phóng
1 Kiến trúc hệ thống
Hệ thống SQL Lab được triển khai theo kiến trúc dưới đây:
Các thành phần và chức năng:
thành phần trong hệ thống
Trang 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
VM
2 Tự động triển khai bằng CICD Pipline
- Mô tả: 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
- Công nghệ sử dụng: Jenkins, Github, Ansible
- Luồng hoạt động:
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ể:
Trang 7- VM3: Web Server 1, Web Server 2, Master Database, Slave Database, Node
Exporter, Cadvisor
Hệ thống cảnh báo giám sát
Các exporter trên các VM export ra các thông số giám sát:
Trang 8Prometheus 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ị:
Trang 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)
Luồng CICD tự động tích hợp, tự động triển khai source code mới lên hệ thống
Luồng CICD cho Server chấm bài MySQL
Trang 10Khi có một tag mới đẩy lên Github:
Jenkins nhận được event và khởi động Pipeline:
Trang 11Docker 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:
Trang 12Hình ảnh kết quả trên giao diện người dùng
- Đối với User là quyền student
+ Tham gia contest trên hệ thống
Trang 13+ Submit lời giải issue với MySQL và SQL Server
- Đối với User quyền Admin
+ Quản lý contest
Trang 14+ Thêm issue vào contest
Trang 15VII PHƯƠNG HƯỚNG PHÁT TRIỂN
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
-