lOMoARcPSD| 58815430
H
C VI
N CÔNG NGH
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:
0
4
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
HÀ N
I, 202
4
lOMoARcPSD| 58815430
MỤ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 ............................................................................. 13
lOMoARcPSD| 58815430
I. 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ò cùng quan trọng thành phần không thể thiếu trong hầu
hết ứng dụng công nghhiện nay. Chúng không chỉ đơn thuần i lưu trữ dữ liệu cho
các ứng dụng như: Web, AI, Mobile, IOT, còn hệ thống quản thông tin hỗ
trợ quyết định kinh doanh. Từ việc 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ậ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
điều trở nên cùng quan trọng cho những người muốn theo đuổi công nghệ, đặc biệt
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 nhân đặc biệt là c bạn sinh viên nhu cầu học tập, phát triển
kiến thức chuyên môn niềm đam với sở dữ liệu 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ừbản cho
đến nâng cao
II. KHẢO SÁT
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 những bài tập đa dạng từ 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 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) 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 thêm những bài tập liên quan đến việc thay đổi dữ liệu
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 độ khó thấp hơn thường không 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 những kiến thức bản,
cùng quan trọng khi thao tác với Database.
lOMoARcPSD| 58815430
III. 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ụ
+ Người dụng có thể chạy các câu lệnh và submit trực tiếp trên trang web
+ Xây dựng và hoàn thiện được giải pháp cho các câu lệnh đọc dữ liệu
- 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
IV. GIẢI PHÁP
Để 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 điều tất yếu.
Trang web hoặc ứng dụng sẽ được triển khai dựa trên hình kiến trúc hướng dịch vụ,
tách riêng ra: web front-end, server 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 các bài tập giúp người dùng 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, …
- Đầu tiên, cần tham khảo các nội dung bài tập trên các trang web lớn khác. Từ đó, xây
dựng các bài tập trên trang web
- Xây dựng sở dữ liệu ý nghĩa, liên quan đến các bài tập bao gồm các bảng, quan
hệ, dữ liệu để người ng có thể truy vấn. Dữ liệu này sẽ được WRITE LOCK để nhằm
tránh các thay đổi.
- Thiết kế, xây dựng những testcase cho từng bài tập.
- Tạo một user trên Database chỉ có quyền đọc dữ liệu từ các dữ liệu có sẵn đã tạo. Web
server sẽ dùng user này để đọc dữ liệu từ Database.
- Khi người dùng yêu cầu runtime hoặc submit bài, server sẽ query từ Database dựa
trên câu lệnh người 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.
- Nếu kết quả từ server trả về khớp với test case thì câu truy vấn của người dùng đã đúng.
Ngược lại thì không.
- Ngoài ra, cần kiểm tra thời gian thực thi cho những bài toán phức tạp để kiểm tra xem
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.
lOMoARcPSD| 58815430
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à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:
- Tham khảo các bài tập của các trang web lớn trên thế giới
- Tìm hiểu và xây dựng bài toán
- Xây dựng testcase
- Tuy nhiên, luồng hoạt động ở dưới server và Database sẽ có điểm khác biệt:
- Khi người dùng yêu cầu runtime hoặc submit các câu lệnh làm thay đổi dữ liệu
CREATE, INSERT, UPDATE, DELETE, ALTER, …
- Khi server nhận yêu cầu sẽ tạo ra môi trường làm việc riêng cho từng session (user)
thông qua các bảng tạm (lưu trữ trong Disk hoặc Memory?).
- các câu lệnh trên không trả về dữ liệu nên khi thực thi xong, server sẽ thực hiện
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.
- Sau khi server trả về kết quả đến người dùng. Session sẽ disconnect và các bảng tạm sẽ
được giải phóng.
V. TRIỂN KHAI HỆ THỐ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:
- Triển khai Web Server ới dạng 2-node chịu tải chính cho việc giao tiếp giữa các thành
phần trong hệ thống
- Triển khai Load Balancer (HaProxy) để cân bằng tải giữa 2-node Web Server
lOMoARcPSD| 58815430
- Database quản 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 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
- Triển khai các hệ thống chấm bài ới dạng Service tách biệt với nhau cho từng hệ quản
trị CSDL
- Trên mỗi VM chạy các dịch vụ, dựng các Node Exporter để giám sát trạng thái hoạt
động và tải của VM
- Triển khai Cadvisor trên VM chạy Webserver để giám sát hoạt động của các Container
- Dựng Prometheus để query các thông số giám sát từ các Exporter và Cadvisor trên các
VM
- Dựng Grafana để visualize dữ liệu giám sát dưới dạng đồ thị
- Cảnh báo bằng việc gửi email đến Operator khi hệ thống cao tải hoặc gặp vấn đề
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:
+ Điều kiện trigger Pipeline: Khi có 1 tag mới release được push lên remote repository
trên Github
+ Thực hiện build Docker Image dựa trên code mới nhất được release
+ Thực hiện đánh tag cho Docker Image với tag mới được release
+ Đẩy image lên repository trên DockerHub
+ Sau khi image được push lên thành công, thực hiện trigger Ansible Playbook tự
động triển khai code mới lên Virtual Machine được chỉ định + Ansible Playbook
thực hiện các công việc sau:
Tạo user mới trên VM
Cài đặt Docker trên VM
Copy các files cần thiết từ Github Repository về VM
Pull các Docker Image cần thiết
Triển khai các container bằng Docker Compose
+ Cuối ng, hoàn tất việc triển khai Service chấm trên các VM bằng code mới nhất từ
Github Repository
VI. KẾT QUẢ TRIỂN KHAI
Hệ thống được triển khai trên 5 Virtual Machine bao gồm các Container, cụ thể:
- VM1: Jenkins, Prometheus, Grafana
- VM2: Client, Haproxy
lOMoARcPSD| 58815430
- VM3: Web Server 1, Web Server 2, Master Database, Slave Database, Node
Exporter, Cadvisor
- VM4: MySQL Service Server, MySQL Database, Node Exporter
- VM5: SQL Server Service Server, SQL Server Database, Node Exporter
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:
Prometheus tập trung collect các thông số giám sát từ các Exporter trên VM:
lOMoARcPSD| 58815430
Grafana visualize các thông số đó dưới dạng đồ thị:
- Node Exporter giám sát VM
- Cadvisor giám sát các Container được cài trên VM
lOMoARcPSD| 58815430
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
(repo: https://github.com/crvt4722/CICD_MySQL_Judge_Service)
Khi có một tag mới đẩy lên Github:
lOMoARcPSD| 58815430
Jenkins nhận được event và khởi động Pipeline:
Docker image với tag mới được đẩy lên Dockerhub:
lOMoARcPSD| 58815430
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:
Hì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
lOMoARcPSD| 58815430
+ Xem danh sách issue trong contest kèm trạng thái
+ Xem lịch sử nộp bài
+ Submit lời giải issue với MySQL và SQL Server
lOMoARcPSD| 58815430
- Đối với User quyền Admin
+ Quản lý contest
+ Thêm issue vào contest
lOMoARcPSD| 58815430
+ Quản lý issue
VII. 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:
lOMoARcPSD| 58815430
- Hệ thống có khả năng thao tác với các bài tập NoSQL
- Sử dụng Rabbit MQ trong quá trình chấm bài
- Block hoặc chặn User, IP trong một khoảng thời gian khi xuất hiện đấu hiệu bất
thường như: Gửi request liên tục trong một thời gian ngắn,...
- Ứng dụng trí tuệ nhân tạo trong việc phát hiện tấn công, hoặc sao chép bài làm của
người dùng - ...

Preview text:

lOMoAR cPSD| 58815430
H Ọ 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: 0 4
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
HÀ N I, 202 4 lOMoAR cPSD| 58815430 MỤ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 ............................................................................. 13 lOMoAR cPSD| 58815430 I. 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 II. KHẢO SÁT
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ô
cùng quan trọng khi thao tác với Database. lOMoAR cPSD| 58815430 III. 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ụ
+ Người dụng có thể chạy các câu lệnh và submit trực tiếp trên trang web
+ Xây dựng và hoàn thiện được giải pháp cho các câu lệnh đọc dữ liệu
- 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 IV. GIẢI PHÁP
Để 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, …
- Đầu tiên, cần tham khảo các nội dung bài tập trên các trang web lớn khác. Từ đó, xây
dựng các bài tập trên trang web
- Xây dựng cơ sở dữ liệu có ý nghĩa, liên quan đến các bài tập bao gồm các bảng, quan
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.
- Thiết kế, xây dựng những testcase cho từng bài tập.
- Tạo một user trên Database chỉ có quyền đọc dữ liệu từ các dữ liệu có sẵn đã tạo. Web
server sẽ dùng user này để đọc dữ liệu từ Database.
- Khi người dùng có yêu cầu runtime hoặc submit bài, server sẽ query từ Database dựa
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.
- Nếu kết quả từ server trả về khớp với test case thì câu truy vấn của người dùng đã đúng. Ngược lại thì không.
- Ngoài ra, cần kiểm tra thời gian thực thi cho những bài toán phức tạp để kiểm tra xem
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. lOMoAR cPSD| 58815430
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à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: -
Tham khảo các bài tập của các trang web lớn trên thế giới -
Tìm hiểu và xây dựng bài toán - Xây dựng testcase -
Tuy nhiên, luồng hoạt động ở dưới server và Database sẽ có điểm khác biệt: -
Khi người dùng có yêu cầu runtime hoặc submit các câu lệnh làm thay đổi dữ liệu
CREATE, INSERT, UPDATE, DELETE, ALTER, … -
Khi server nhận yêu cầu sẽ tạo ra môi trường làm việc riêng cho từng session (user)
thông qua các bảng tạm (lưu trữ trong Disk hoặc Memory?). -
Vì các câu lệnh trên không trả về dữ liệu nên khi thực thi xong, server sẽ thực hiện
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. -
Sau khi server trả về kết quả đến người dùng. Session sẽ disconnect và các bảng tạm sẽ được giải phóng. V.
TRIỂN KHAI HỆ THỐ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:
- Triển khai Web Server dưới dạng 2-node chịu tải chính cho việc giao tiếp giữa các thành phần trong hệ thống
- Triển khai Load Balancer (HaProxy) để cân bằng tải giữa 2-node Web Server lOMoAR cPSD| 58815430
- 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
- Triển khai các hệ thống chấm bài dưới dạng Service tách biệt với nhau cho từng hệ quản trị CSDL
- Trên mỗi VM chạy các dịch vụ, dựng các Node Exporter để giám sát trạng thái hoạt động và tải của VM
- Triển khai Cadvisor trên VM chạy Webserver để giám sát hoạt động của các Container
- Dựng Prometheus để query các thông số giám sát từ các Exporter và Cadvisor trên các VM
- Dựng Grafana để visualize dữ liệu giám sát dưới dạng đồ thị
- Cảnh báo bằng việc gửi email đến Operator khi hệ thống cao tải hoặc gặp vấn đề
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:
+ Điều kiện trigger Pipeline: Khi có 1 tag mới release được push lên remote repository trên Github
+ Thực hiện build Docker Image dựa trên code mới nhất được release
+ Thực hiện đánh tag cho Docker Image với tag mới được release
+ Đẩy image lên repository trên DockerHub
+ Sau khi image được push lên thành công, thực hiện trigger Ansible Playbook tự
động triển khai code mới lên Virtual Machine được chỉ định + Ansible Playbook
thực hiện các công việc sau:
• Tạo user mới trên VM
• Cài đặt Docker trên VM
• Copy các files cần thiết từ Github Repository về VM
• Pull các Docker Image cần thiết
• Triển khai các container bằng Docker Compose
+ Cuối cùng, hoàn tất việc triển khai Service chấm trên các VM bằng code mới nhất từ Github Repository
VI. KẾT QUẢ TRIỂN KHAI
Hệ thống được triển khai trên 5 Virtual Machine bao gồm các Container, cụ thể:
- VM1: Jenkins, Prometheus, Grafana - VM2: Client, Haproxy lOMoAR cPSD| 58815430
- VM3: Web Server 1, Web Server 2, Master Database, Slave Database, Node Exporter, Cadvisor
- VM4: MySQL Service Server, MySQL Database, Node Exporter
- VM5: SQL Server Service Server, SQL Server Database, Node Exporter
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:
Prometheus tập trung collect các thông số giám sát từ các Exporter trên VM: lOMoAR cPSD| 58815430
Grafana visualize các thông số đó dưới dạng đồ thị: - Node Exporter giám sát VM
- Cadvisor giám sát các Container được cài trên VM lOMoAR cPSD| 58815430
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
(repo: https://github.com/crvt4722/CICD_MySQL_Judge_Service)
Khi có một tag mới đẩy lên Github: lOMoAR cPSD| 58815430
Jenkins nhận được event và khởi động Pipeline:
Docker image với tag mới được đẩy lên Dockerhub: lOMoAR cPSD| 58815430
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:
Hì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 lOMoAR cPSD| 58815430
+ Xem danh sách issue trong contest kèm trạng thái
+ Xem lịch sử nộp bài
+ Submit lời giải issue với MySQL và SQL Server lOMoAR cPSD| 58815430
- Đối với User quyền Admin + Quản lý contest + Thêm issue vào contest lOMoAR cPSD| 58815430 + Quản lý issue
VII. 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: lOMoAR cPSD| 58815430 -
Hệ thống có khả năng thao tác với các bài tập NoSQL -
Sử dụng Rabbit MQ trong quá trình chấm bài -
Block hoặc chặn User, IP trong một khoảng thời gian khi xuất hiện đấu hiệu bất
thường như: Gửi request liên tục trong một thời gian ngắn,... -
Ứng dụng trí tuệ nhân tạo trong việc phát hiện tấn công, hoặc sao chép bài làm của người dùng - ...