A Kết quả phân loại câu hỏi môn KTLT và CTDL&GT
4.1 Luồng chấm bài cũ
Luồng thực hiện như thế này tồn tại một vấn đề là chi phí sử dụng Docker Machine là rất lớn tại một bước quan trọng và phải chịu tải lớn như bước chấm bài. Với mỗi bài nộp lên, quá trình
khởi chạy và tắt Docker Machine cứ được lặp lại, ảnh hưởng lớn đến hiệu năng chấm bài của hệ thống.
4.1.2 Thay thế bằng thành phần chấm bài mới - Jobe
Không như Docker - với cơ chế bật tắt liên tục, Jobe - một con chấm khác đã được giới thiệu ở phần 2.3.7, hoạt động như một dịch vụ luôn chạy để chấm bài. Vì vậy cơ chế khác biệt như vậy nên về cảm quan, nhóm nhận thấy Jobe có khả năng mang lại hiệu năng tốt hơn giải pháp được sử dụng trước đó là Docker. Nhóm cũng đã thực hiện một đánh giá sơ bộ về hiệu năng của Jobe để chứng minh cho tính ứng dụng của Jobe trong thực tế ở phần B.
Cụ thể hơn, một số API mà Jobe cung cấp (Richard Lobb,2021) để Grader có thể ứng dụng được như :
• API chấm bài:
– Method: POST
– Target resource: /jobe/index.php/restapi/runs/
– Body parameters: run_spec
API này được dùng để biên dịch và thực thi mã nguồn với những thông tin kèm theo trong tham số run_spec.
• API kiểm tra file có tồn tại trên Jobe:
– Method: HEAD
– Target resource: /jobe/index.php/restapi/files/
– Request parameters: uniqueid
API này được dùng để kiểm tra xem file có tồn tại trong Jobe hay không, và thường được sử dụng trong quá trình chấm bài cần kèm theo các file khác để làm testcase trong quá trình chấm bài. Tham số uniqueid biểu diễn định danh duy nhất cho một file. Nhóm quyết định sử dụng hàm băm MD5 lên nội dung file để lấy giá trị cho tham số uniqueid này.
• API upload file lên Jobe
– Method: PUT
– Target resource: /jobe/index.php/restapi/files/
API này được dùng để tải file lên Jobe và ngữ cảnh sử dụng là tương tự với API trên. Luồng thực thi chấm bài thường gọi API kiểm tra file trước, nếu kết quả là khơng có thì Grader sẽ dùng API này để tải file lên Jobe. Tham số uniqueid được dùng tương tự như trên.
Một điểm đáng chú ý là Jobe chỉ có chức năng biên dịch và thực thi mã nguồn, sau đó trả về kết quả đầu ra chuẩn hoặc lỗi chuẩn, chứ không bao gồm chức năng so sánh với kết quả mong đợi. Điều này dẫn đến Jobe không thể cho ra điểm số cuối cùng cho bài nộp. Do vậy, hệ thống cần một thành phần để chuẩn bị dữ liệu gửi sang Jobe, cũng như xử lý kết quả mà Jobe trả về để hoàn tất khâu chấm bài.
Do q trình chầm bài với con chấm Jobe có nhiều điểm khác biệt so với con chấm cũ, nhóm quyết định thay thế thành phần Grader cũ bằng một thành phần Grader hồn tồn mới. Trong đó, Grader mới vẫn sẽ kết nối với Back-end để nhận các thông tin về câu hỏi và bài nộp, đồng thời thực hiện được hai chức năng mới là chuẩn bị dữ liệu gửi sang Jobe, cũng như xử lý kết quả mà Jobe trả về.
Kiến trúc mới cho khối Back-end, Grader và Jobe để thực hiện quá trình chấm bài như sau: