Bagaimana Direviu Bekerja
Berikut adalah gambaran besar alur dari keseluruhan sistem autograder di Dicoding ketika menggunakan direviu sebagai autograder runner.
Mari bedah satu per satu.
1. Siswa mengirim submission ke dicoding.com​
Tidak ada perubahan. Prosesnya masih sama, baik pada submission yang menerapkan autograder ataupun tidak.
2. dicoding.com mengecek apakah submission bisa di-autograde​
Setelah siswa mengirim submission, sistem dicoding.com akan mengecek untuk memastikan submission yang dikirim merupakan kategori submission yang bisa di-autograde atau tidak. Jika keputusannya tidak, submission tidak akan diambil oleh akun autograder (saat ini akunnya dicoding-academy) agar submission tersebut dapat diambil oleh reviewer.
3. dicoding.com menahan submission oleh akun autograder​
Jika keputusannya bisa di-autograde, submission tersebut akan ditahan oleh akun autograder dengan maksud agar tidak bisa diambil oleh reviewer selama proses autograde berlangsung.
4. dicoding.com mengirim informasi perihal submission ke direviu-publisher​
publisher merupakan aplikasi (HTTP API) yang bertugas untuk menerima informasi submission dari dicoding.com, kemudian menyimpan informasi tersebut ke queue channel.
Sembari menahan submission, sistem dicoding.com akan mengirimkan informasi submission. Informasi tersebut akan dikirimkan ke publisher kemudian disimpan di queue channel hingga diambil oleh instance worker.
Berikut adalah contoh informasi yang dikirim oleh dicoding.com ke publisher.
{
"submissionId": 12345,
"quizId": "54321",
"lms": "lms-1"
}
Properti submissionId dibutuhkan oleh worker untuk berinteraksi dengan submission, seperti men-download berkas
submission, mendapatkan artifact, hingga mengirimkan hasil review. Seluruh interaksi tersebut nantinya dilakukan melalui
HTTP API yang disediakan dicoding.com.
Lalu, properti quizId dan lms dikombinasikan oleh publisher untuk menentukan queue yang akan digunakan sebagai
tempat penyimpanan. Hal ini nantinya akan menentukan direviu-worker mana yang ditugaskan untuk menjalankan autograder.
5. direviu-publisher mengirim informasi submission ke submission queue​
Tahap selanjutnya adalah direviu-publisher akan mengirimkan informasi submission yang akan di-autograde ke dalam submission queue. Submission queue memiliki banyak jenis, ada “low-spec”, “medium-spec”, dan “high-spec” yang dipisahkan berdasarkan spesifikasi mesin atau VM. Setiap queue memiliki direviu-worker-nya masing-masing.
Publisher memanfaatkan nilai quizId dan lms untuk menentukan queue jenis apa yang akan dipilih untuk menyimpan
informasi submission. Dengan begitu dapat dipastikan bahwa submission tersebut diambil oleh instance direviu-worker yang
tepat, karena tidak semua instance worker mampu menjalankan autograder yang ada (disesuaikan berdasarkan spesifikasi
server). Kita akan diskusi masalah queue distribution ini lebih detail, nanti.
6. direviu-worker mengambil informasi submission dari Channel Queue​
Ketika ada informasi yang tersimpan di submission queue, instance direviu-worker yang idle langsung mengambil informasi tersebut secara satu per satu. Informasi ini hanya dapat diambil oleh satu direviu-worker. Misalnya, ketika ada dua instance direivu-worker yang sedang idle, hanya satu instance saja yang bisa mendapatkan informasinya.
7. direviu-worker menjalankan autograder berdasarkan informasi yang didapatkan​
Setelah direviu-worker mengambil informasi dari submission queue, ia langsung menjalankan tugasnya, mulai dari
mendapatkan artifact submission, mengunduh berkas submission, mengekstrak berkas submission, menyiapkan input untuk
autograder, mengeksekusi script untuk menjalankan autograder hingga autograder menghasilkan berkas report.json, hingga
pekerjaan "bersih-bersih" pasca menjalankan autograding.
8. direviu-worker mengirim laporan (report) review ke queue​
Setelah menjalankan serangkaian proses autograding, direviu-worker akan mengirimkan laporan review ke reporting queue (
queue yang menampung report hasil autograding). Data laporan yang dikirim tergantung dari nilai yang dihasilkan oleh
autograder pada berkas report.json.
9. direviu-report mengambil laporan dari reporting queue​
Ketika ada report yang tersimpan di dalam reporting queue, direviu-report akan segera mengambil report. Di tahap ini, memungkinkan untuk ditambahkan delay dalam mengambil report dari queue untuk menjaga experience siswa dalam menerima hasil review.
10. direviu-report mengirim report review ke dicoding.com via HTTP API​
Setelah report diambil dari queue, direviu-report langsung memproses report dan mengirimkan report review ke dicoding.com (LMS) melalui HTTP API. Di tahap ini, siswa akan mendapatkan hasil review dari submission yang ia kirimkan.