Microservices Architecture

Sistem Web Assessment dan Smartlab mengikuti arsitektur berbasis microservices, di mana setiap layanan berjalan dalam container-nya masing-masing, memberikan modularitas, skalabilitas, dan kemudahan pemeliharaan. Diagram di bawah ini mengilustrasikan komponen utama sistem dan bagaimana mereka saling berinteraksi:

Diagram

Komponen Utama

1. Admin Client (Nuxt.js)

Admin Client dibangun dengan Nuxt.js, sebuah framework untuk membuat aplikasi Vue.js yang dirender di server. Admin Client digunakan oleh administrator sistem untuk mengelola konten, memantau aktivitas, dan melakukan tugas administratif. Client ini berinteraksi dengan Admin Backend melalui panggilan API RESTful.

2. Assessment Client (Vue 3)

Assessment Client dibangun dengan Vue 3 dan menyediakan antarmuka front-end bagi pengguna yang berpartisipasi dalam assessment. Client ini berinteraksi dengan Assessment Backend, memungkinkan pengguna untuk login, mengikuti assessment, dan melihat hasilnya. Assessment Client mendukung interaksi real-time menggunakan PeerJS untuk komunikasi media selama assessment berlangsung.

3. Main Backend (Admin) [NestJS]

Admin Backend, dibangun menggunakan NestJS, menangani business logic dan API endpoints yang dibutuhkan oleh Admin Client. Backend ini bertanggung jawab atas manajemen siswa, pembuatan soal, manajemen acara ujian, sistem proctoring, serta tugas administratif lainnya.

4. Main Backend (Assessment) [NestJS]

Assessment Backend, juga dibangun menggunakan NestJS, mengelola fungsi inti dari platform assessment. Backend ini menangani otentikasi user, pengiriman assessment, pemrosesan hasil.

5. Storage

Layanan storage menangani pengunggahan dan modifikasi aset melalui gRPC, memungkinkan komunikasi yang efisien antara layanan storage dan Main Backend. Untuk pengambilan aset, Main Backend menggunakan NFS (Network File System) untuk melayani aset kepada klien, memastikan file besar seperti media atau dokumen mudah diakses selama assessment atau lainnya.

6. Database (PostgreSQL)

Sebuah database sentral PostgreSQL menyimpan semua data terstruktur. Baik Admin maupun Assessment Backend berinteraksi dengan database ini, menggunakan query dan pengindeksan untuk akses data.

7. Redis

Redis digunakan sebagai penyimpanan in-memory key-value untuk manajemen session user di kedua backend.

8. PeerJS

PeerJS digunakan untuk menangani sinyal WebRTC untuk komunikasi peer-to-peer antar klien, memungkinkan streaming media real-time selama assessment. Ini memastikan interaksi berkualitas tinggi dengan latensi rendah.

9. TURN Server

TURN Server men-relay trafik ketika komunikasi peer-to-peer langsung tidak memungkinkan karena pembatasan jaringan. Server ini memastikan bahwa user yang berada di belakang NAT atau firewall masih dapat berkomunikasi dengan efektif selama assessment.