Nodeflux Central
Developer Guide

Developer Guide

Konsep inti FREMIS-N — keyspace, enrollment, embedding, similarity score, threshold, top-k, dan cara FREMIS-N memproses permintaan secara internal.

Halaman ini menjelaskan konsep inti dan pipeline internal FREMIS-N — model mental yang perlu Anda pahami sebelum mengintegrasikan API. Untuk gambaran umum kapabilitas dan posisi FREMIS-N dalam stack Nodeflux, lihat halaman utama FREMIS-N.

Untuk referensi endpoint, lihat API Reference. Untuk panduan deployment dan konfigurasi, lihat Pre-requisite Installation.


Konsep Inti

Enrollment

Enrollment adalah proses mendaftarkan satu identitas ke dalam database FREMIS-N. Saat enrollment, FREMIS-N mengekstrak representasi matematis unik dari wajah dalam foto — disebut embedding — dan menyimpannya agar bisa dicari di kemudian hari.

Satu identitas dapat memiliki beberapa variasi enrollment: foto dari sudut berbeda, kondisi pencahayaan berbeda, atau dengan maupun tanpa kacamata. Semakin beragam variasi yang didaftarkan, semakin baik kemampuan sistem mengenali orang tersebut dalam kondisi nyata yang beragam.

Praktik Terbaik Enrollment

Daftarkan 2–3 variasi foto per identitas — misalnya satu foto frontal, satu sedikit miring, dan satu dalam kondisi pencahayaan berbeda. Hindari foto dengan oklusi (masker, kacamata hitam, topi) kecuali jika kondisi tersebut memang lazim di lingkungan deployment Anda.

Embedding

Embedding adalah representasi matematis sebuah wajah dalam bentuk vektor fitur. Vektor ini dihasilkan oleh model ekstraksi fitur dan bersifat unik untuk setiap identitas — dua foto orang yang sama akan menghasilkan vektor yang sangat berdekatan dalam ruang vektor tersebut.

Setiap embedding disimpan di dua tempat secara bersamaan:

TempatTujuan
Database persistenPenyimpanan persisten dan durable; sumber kebenaran (source of truth)
Indeks pencarian in-memoryIndex pencarian cepat; di-load ke memori saat startup

Index default FREMIS-N melakukan pencarian eksak terhadap seluruh enrollment di keyspace — akurasi penuh dijaga, tetapi waktu pencarian tumbuh dengan jumlah enrollment. Mode opsional compressed (--index-mode compressed) menggunakan pencarian compressed yang di-akselerasi GPU untuk kapasitas jutaan enrollment.

Setiap keyspace memiliki indeks pencarian in-memory tersendiri; pencarian tidak pernah bercampur lintas keyspace.

Keyspace

Keyspace adalah namespace atau grup terisolasi tempat enrollment disimpan. Analoginya seperti folder atau tenant yang terpisah: enrollment di keyspace A sama sekali tidak bercampur dengan keyspace B, bahkan jika keduanya berjalan di FREMIS-N yang sama.

Keyspace berguna untuk:

  • Isolasi departemen — karyawan divisi A dan divisi B disimpan di keyspace berbeda
  • Multi-use-case — database VIP dan database watchlist keamanan tidak saling menginterferensi
  • Multi-tenant — beberapa klien atau deployment berbagi satu instansi FREMIS-N tanpa data overlap

Saat melakukan recognition atau search, Anda menentukan keyspace mana yang menjadi target pencarian.

1:1 Match membandingkan dua foto secara langsung untuk menjawab pertanyaan: "Apakah orang A dan orang B adalah orang yang sama?"

Tidak memerlukan database enrollment. Cocok untuk skenario verifikasi identitas — misalnya, memverifikasi bahwa foto selfie cocok dengan foto KTP, atau bahwa dua gambar dari CCTV menampilkan orang yang sama.

Output utama: similarity score antara dua foto tersebut.

Similarity Score & Threshold

Setiap hasil matching dan recognition disertai similarity score — angka antara 0.0 dan 1.0 yang menunjukkan seberapa mirip dua wajah yang dibandingkan. Nilai mendekati 1.0 berarti sangat mirip; nilai mendekati 0.0 berarti sangat berbeda.

Threshold adalah batas minimum similarity yang Anda tentukan untuk menyatakan bahwa dua wajah "cocok". Ini adalah trade-off yang perlu disesuaikan dengan kebutuhan deployment:

ThresholdEfek
Terlalu rendah (misal 0.60)Banyak pasangan wajah berbeda yang dianggap cocok (false match)
Terlalu tinggi (misal 0.95)Wajah yang sebenarnya sama bisa terlewat (false negative), terutama jika kualitas foto berbeda
Seimbang (misal 0.80–0.87)Titik tengah yang baik untuk sebagian besar deployment standar

Tidak ada nilai threshold universal yang benar untuk semua kondisi. Lakukan evaluasi dengan sampel data nyata dari lingkungan deployment Anda sebelum menentukan nilai akhir.

Top-k

Saat melakukan 1:N search, FREMIS-N dapat mengembalikan lebih dari satu kandidat — ini disebut top-k. Misalnya, top-3 berarti tiga identitas dengan similarity score tertinggi dikembalikan sekaligus.

Top-k berguna ketika:

  • Anda ingin membangun antarmuka review manual di mana operator memilih dari beberapa kandidat
  • Sistem downstream perlu mempertimbangkan beberapa kemungkinan sebelum memutuskan
  • Anda sedang melakukan audit atau investigasi dan ingin melihat kandidat alternatif selain yang paling cocok

Quotas & Limits

FREMIS-N menerapkan dua jenis batasan berdasarkan lisensi yang aktif:

Batas Enrollment

Lisensi menentukan jumlah maksimum identitas (enrollment) yang dapat disimpan di seluruh keyspace dalam satu deployment. Saat batas ini tercapai, permintaan enrollment baru akan ditolak hingga sebagian enrollment dihapus atau lisensi ditingkatkan.

Batas QPS (Queries Per Second)

Selain batas enrollment, lisensi juga membatasi laju permintaan untuk operasi recognition, match, dan operasi utility lainnya. Jika laju permintaan melampaui batas yang diizinkan, permintaan yang melebihi kuota akan ditolak sementara — bukan diproses dengan penundaan.

Pembatasan QPS menggunakan mekanisme token-bucket per analytic group: endpoint recognition, match, dan utility masing-masing memiliki bucket terpisah, sehingga lonjakan request recognition tidak menghabiskan kuota utility, dan sebaliknya. Saat batas tercapai, server mengembalikan HTTP 429 Too Many Requests.

Di mode cluster, worker yang berjalan tanpa deployment key (lisensi terpusat di coordinator) hanya menerima permintaan yang ditandatangani secara HMAC dari coordinator — permintaan langsung dari klien eksternal akan ditolak.

Saat batas QPS terlampaui, sistem mengembalikan HTTP 429 (bukan antre). Pastikan sistem Anda menangani kondisi ini dengan baik, misalnya dengan retry logic yang mempertimbangkan jeda singkat sebelum mencoba kembali.

Untuk mengetahui batas yang berlaku pada lisensi Anda, hubungi tim Nodeflux atau lihat halaman Quota & License Management.


Bagaimana FREMIS-N Memproses Permintaan

Bagian ini menjelaskan pipeline internal FREMIS-N — dari HTTP request masuk hingga respons keluar. Memahami bagian ini membantu Anda menjawab pertanyaan operasional seperti: "Apakah ada antrian internal?", "Apa yang terjadi saat server penuh?", dan "Berapa banyak inferensi AI yang dijalankan per request?"

1. HTTP Intake

FREMIS-N menggunakan async HTTP server untuk menerima permintaan. Setiap request HTTP yang masuk ditangani secara konkuren, sehingga ratusan koneksi dapat diproses tanpa overhead memori yang besar per koneksi.

2. Internal Work Queue

Ya, ada antrian internal di dalam FREMIS-N — namun bukan message broker eksternal.

Internal Work Queue adalah buffer in-process antara HTTP server dan worker inferensi AI. Setelah request HTTP diterima dan divalidasi, FREMIS-N meletakkan tugas ekstraksi ke dalam antrian ini; worker thread kemudian mengambil tugas secara berurutan dan menjalankan inferensi.

Mengapa ada antrian ini? Antrian memisahkan laju kedatangan request HTTP dari laju pemrosesan GPU. Saat terjadi lonjakan request singkat (burst), antrian menyerap kelebihannya — klien tetap menerima respons akhirnya tanpa harus menunggu giliran secara sinkron di level jaringan.

Karakteristik antrian

AspekDetail
Jenis antrianIn-process FIFO — tidak ada prioritas antar tipe request
ScopeDibagi oleh semua tipe request (enrollment, recognition, match) dalam satu instance
Ukuran antrianTidak ada batas keras — antrian tumbuh selama memori tersedia
Jumlah workerDikonfigurasi via --max-workers (default: 1)
GPU batchingTidak ada — satu worker memproses satu tugas dalam satu waktu
ThroughputSkala dengan jumlah worker, bukan dengan batching
LifecycleIn-RAM; semua tugas yang mengantri hilang saat proses restart
Metrik Prometheusqueue_face (Gauge) — panjang antrian saat ini

Tidak ada prioritas di antara tipe request — enrollment, recognition, dan match berbagi satu antrian yang sama secara FIFO. Request yang masuk lebih awal diproses lebih awal, terlepas dari jenisnya.

Karena tidak ada GPU batching, menambah worker (via --max-workers) adalah satu-satunya cara meningkatkan throughput paralel. Dua worker memproses dua tugas sekaligus; sepuluh worker memproses sepuluh tugas sekaligus.

Pantau metrik queue_face di Prometheus secara berkala. Nilai stabil mendekati nol menunjukkan sistem sehat. Nilai yang terus meningkat tanpa turun adalah sinyal bahwa worker tidak mampu mengimbangi laju kedatangan request — pertimbangkan untuk menaikkan --max-workers atau mengurangi laju pengiriman request.

Batas sistem dan admission control

FREMIS-N tidak menolak request berdasarkan kedalaman antrian. Admission control bekerja berdasarkan tren latensi (lihat Backpressure & Admission Control), sehingga antrian bisa tumbuh sebelum ada 503 dikembalikan. Ini berarti pada kondisi overload, respons akhir tetap datang — hanya lebih lambat — hingga server mendeteksi tren latensi yang cukup buruk untuk mulai menolak request baru.

Karena antrian bersifat in-RAM dan tidak persisten, semua tugas yang sedang mengantri akan hilang jika FREMIS-N di-restart. Pastikan klien Anda mengimplementasikan retry untuk permintaan yang gagal karena restart.

3. Inferensi AI (Tanpa Batching GPU)

FREMIS-N tidak menggabungkan (batch) beberapa request ke dalam satu inferensi GPU. FREMIS-N memproses inferensi satu tugas dalam satu waktu per worker; tidak ada batching GPU lintas request. Setiap tugas diproses secara individual oleh satu worker.

Untuk setiap gambar, pipeline menjalankan tiga tahap secara berurutan:

Face Detection — model deteksi wajah

Model mengembalikan area wajah yang terdeteksi beserta titik referensi untuk langkah alignment.

Face Alignment

Titik referensi dari deteksi digunakan untuk menormalkan orientasi wajah — mengkoreksi rotasi dan skala sebelum ekstraksi. Langkah ini ringan dibanding tahap deteksi dan ekstraksi.

Feature Extraction — model ekstraksi fitur

Wajah yang sudah di-align diproses oleh model ekstraksi fitur. Output: vektor embedding wajah yang merepresentasikan identitas unik.

IQA (Image Quality Assessment) bersifat opsional dan hanya berjalan saat enrollment jika diaktifkan — menilai kecerahan dan ketajaman gambar sebelum deteksi.

Jumlah inferensi neural network per jenis request:

Tipe RequestInferensi NNCatatan
Enrollment2Detect + Extract; 3 jika IQA aktif
1:1 Match4Detect + Extract untuk masing-masing dari 2 gambar
1:N Recognition2 + 1 pencarian similarityDetect + Extract, lalu similarity search

4. Backpressure & Admission Control

FREMIS-N memiliki dua lapisan perlindungan saat server kelebihan beban:

MekanismePemicuRespons HTTP
Rate limiter (token-bucket)QPS melebihi batas lisensi per analytic group429 Too Many Requests
Admission control (latency-trend)Tren latensi endpoint meningkat melebihi threshold (mekanisme deteksi overload internal)503 Service Unavailable

Admission control bekerja berdasarkan tren kemiringan latensi (linear regression), bukan kedalaman antrian. Ini berarti server mulai menolak request baru saat sistem terdeteksi sedang kewalahan, bahkan jika antrian belum penuh. Tidak ada batas keras pada jumlah item di antrian.

Respons 503 dari FREMIS-N berarti server terdeteksi overload berdasarkan tren latensi, bukan karena antrian penuh. Jika Anda menerima 503 secara konsisten, pertimbangkan untuk menambah --max-workers atau mengurangi laju request.

5. Startup: Preload Model & Index

Saat FREMIS-N pertama kali start, sebelum request pertama pun diterima:

  • Setiap worker mendekripsi dan memuat file model ke dalam session inferensi.
  • Seluruh embedding yang tersimpan di database persisten di-load ke dalam indeks pencarian in-memory.

Waktu startup bergantung pada ukuran database enrollment dan jumlah worker. Cluster mode juga me-load semua embedding per keyspace ke indeks pencarian in-memory di masing-masing worker node.

Diagram Pipeline

alt [Enrollment] [Recognition (1:N)] [Match (1:1)] alt [Latensi trend overload] [Normal] alt [QPS melebihi batas] [QPS tersedia] HTTP Request (gambar) Cek QPS token-bucket 429 Too Many Requests Cek admission control 503 Service Unavailable Enqueue task Worker mengambil task (FIFO) Deteksi wajah Wajah terdeteksi Alignment Gambar wajah ter-align Ekstraksi embedding Embedding wajah Simpan ke database + indeks pencarian Cari kandidat Top-k kandidat Hitung similarity Hasil JSON Response Client HTTP Server Rate Limiter Internal Queue Worker Thread Face Detection Face Alignment Feature Extraction Storage / Search Index

Performance Issues

Tiga skenario performa paling sering muncul saat FREMIS-N digunakan di produksi.

Latency Tinggi pada Recognition

Setiap request memakan waktu lama (misalnya > 5 detik) meskipun beban tampak normal.

  1. Periksa ukuran keyspace. Indeks pencarian default melakukan pencarian eksak, jadi waktu pencarian tumbuh dengan jumlah enrollment per keyspace. Jika keyspace > 1 juta enrollment, pertimbangkan --index-mode compressed (GPU-accelerated), pecah ke beberapa keyspace, atau deploy cluster.
  2. Pantau kedalaman antrean internal. Metrik Prometheus queue_face (Gauge) menunjukkan request yang menunggu worker. Jika konsisten tinggi, naikkan --max-workers atau tambah resource GPU.
  3. Cek resource node. CPU/GPU/memory yang maxed-out di puncak traffic adalah sinyal scale-up atau load redistribution. Lihat /v1/resource-stats per node.
  4. Untuk cluster, verifikasi distribusi partisi. Jika satu node memegang sebagian besar enrollment yang aktif diquery, latency-nya akan menonjol. Lihat Cluster Sharding — Partition Imbalance.
  5. Network. Latency klien-to-FREMIS-N harus < 50ms di LAN; di Internet/VPN lebih tinggi adalah expected.

Throughput Rendah Padahal GPU Tersedia

GPU utilization rendah tetapi hanya sedikit request yang diproses per detik.

  • Tingkatkan parallelism di klien. FREMIS-N tidak melakukan GPU batching antar request; throughput tinggi tergantung pada banyak request konkuren mengisi worker pool. Mulai dari 10–20 concurrent request, monitor, naikkan hingga GPU utilization mendekati saturated.
  • Profile bottleneck. Jika round-trip latency tinggi tetapi GPU low, bottleneck adalah network/I/O. Jika latency rendah tetapi throughput rendah, klien yang sequential.
  • Verifikasi GPU benar-benar aktif. Cek startup logs — nvidia-smi di host menunjukkan FREMIS-N sebagai proses, container dijalankan dengan --gpus all.

HTTP 429 — Request Di-Throttle

API mengembalikan 429 (Too Many Requests) meskipun traffic tidak terasa tinggi. Ini adalah admission control terhadap QPS limit lisensi.

  1. Konfirmasi QPS limit lisensi Anda dengan tim Nodeflux dan dokumentasikan agar bisa dibandingkan dengan traffic ekspektasi.
  2. Monitor actual QPS. Cek metrik per detik — average bisa di bawah limit, tetapi burst (peak QPS) yang melebihi limit sudah cukup memicu 429.
  3. Implementasi backoff & retry. Saat menerima 429, tunggu 1–5 detik sebelum retry; gunakan exponential backoff (1s, 2s, 4s, ...) untuk retry berulang.
  4. Upgrade lisensi jika QPS limit memang tidak mencukupi untuk use case Anda.

Lihat Batas QPS untuk dasar quota lisensi.


Kapan Hubungi Support

Setelah mencoba langkah-langkah di halaman ini dan halaman troubleshooting per-fitur, jika masalah masih persisten siapkan informasi berikut sebelum menghubungi tim Nodeflux:

  • Versi FREMIS-N — output fremis_n_app --version atau Docker image tag
  • Mode deployment — standalone atau cluster, jumlah worker node, alamat coordinator
  • Logs — stderr/stdout dari rentang 5–10 menit sebelum dan sesudah incident
  • Output /health dan /v1/resource-stats dari node yang bermasalah
  • Ringkasan symptom — deskripsi singkat, langkah reproduksi, dan hasil troubleshooting yang sudah dilakukan
  • Opsional tetapi membantu — error message lengkap, network topology, resource metrics saat incident, jumlah enrollment dan QPS rata-rata per keyspace

Selanjutnya

On this page