backend
Catatan teknis seputar web development, DevOps, dan integrasi AI.
96 artikel
- 12.24backend
Invalidasi Cache Redis: Naikkan Versi, Jangan Hapus Key
Ganti cara invalidasi cache jawaban chat AI: bump versi namespace dengan INCR supaya key lama unreachable, bukan dihapus satu-satu.
TL;DR: Jawaban chat AI yang di-cache di Redis jadi basi tiap artikel berubah, dan masalah utamanya bukan SCAN yang blocking melainkan fan-out invalidasi yang rumit. Solusinya versioned key: tiap mutasi nge-bump counter versi via INCR, key lama jadi unreachable dan mati sendiri lewat TTL 24 jam. Bonusnya ada lookup mundur ke versi sebelumnya dan fallback persona saat LLM down.
#redis#caching#cache-invalidation - 02.34backend
Semantic Search di VPS 1GB Tanpa Vector DB
Cosine pure-Python, vektor di postmeta MariaDB, embedding di mesin lokal. Fitur semantik tanpa service baru di server 1GB.
TL;DR: VPS 1GB tak kuat menjalankan vector database plus model embedding, jadi bebannya dipecah. Embedding dihitung di mesin lokal via Ollama, vektor disimpan sebagai JSON di postmeta MariaDB, dan cosine similarity pakai pure Python tanpa numpy untuk deteksi duplikat. Skema ini efisien untuk puluhan artikel, tapi mulai jebol saat katalog ribuan atau QPS tinggi.
#python#fastapi#embedding - 16.31backend
Bare python di entrypoint Docker: interpreter sistem, bukan venv
Script seed knowledge gagal terus di container padahal file ada di image. Ternyata bare python manggil interpreter sistem, bukan venv.
TL;DR: Script knowledge seed gagal di Docker karena bare python memakai interpreter sistem, bukan venv, sehingga dependensi yang terpasang tidak terlihat. Solusinya panggil interpreter venv dengan path absolut dan set PYTHONPATH ke root project agar import berfungsi. Tambahkan || echo skipped supaya container tetap hidup dan kegagalan tetap tercatat di log.
#docker#python#deployment - 11.40backend
Upsert Idempoten di Entrypoint, Biar Data Chat Gak Selisih Lagi
Data baseline chat bot lokal dan VPS selisih karena seeding manual. Solusinya: seed JSON di repo di-upsert via entrypoint container.
TL;DR: Data knowledge di VPS kurang karena baseline diisi lewat copy-paste SQL manual yang rawan kelewat baris. Solusinya: seed file di repo di-upsert otomatis tiap container start pakai INSERT ON DUPLICATE KEY UPDATE dengan slug sebagai kunci alami. Pelajarannya: affected-rows 2 berarti update satu baris, dan dev-prod sebaiknya parity agar bug serupa tidak lolos.
#mariadb#docker#python - 16.42backend
CTA_FLAG Terbelah di Tengah Stream SSE
Regex strip per delta nggak bisa melihat marker yang terbelah dua potongan. Pelajaran boundary matching di streaming SSE.
TL;DR: Bug ini terjadi karena regex pembersih CTA_FLAG: YES dijalankan per delta, sementara marker sering terbelah di dua potongan stream sehingga lolos tersimpan ke cache Redis. Perbaikannya strip ulang di string gabungan setelah stream selesai. Pelajarannya: cek invariant di output akhir, dan gunakan structured output JSON untuk solusi kanonis.
#sse#streaming#regex - 19.48ai
Konteks percakapan di chat AI, tanpa session di server
Chat AI yang nyambung tanpa session server: frontend pegang riwayat di localStorage, backend susun ulang prompt dengan char-budget.
#fastapi#llm#stateless - 18.30ai
AI yang tahu lagi kerjain apa: grounding ke commit terbaru
Chat AI blog yang jawab 'lagi kerjain apa' dari commit history lokal — port sempit, cache version namespace, dan mining istilah dari commit message.
#fastapi#redis#cache-invalidation - 14.56backend
Jawaban Tetap Hidup Saat LLM Mati
LLM router mati saat streaming jawaban. Yang muncul: event meta fallback lalu pengunjung tetap dapat jawaban dari cache atau knowledge.
#fastapi#redis#llm - 14.34backend
Saat Pencarian AI Perlu Tahu Isi Situsnya Sendiri
Ketik hai ke pencarian AI dulu dapat error no_results. Biang keladinya batas panjang kata FULLTEXT, bukan prompt yang salah.
#fastapi#mariadb#llm