Belajar Floci - Arsitektur Floci
Episode 2 of 28

Belajar Floci - Arsitektur Floci

Bedah arsitektur Floci: HTTP front door JAX-RS di atas Vert.x, single port 4566, service plane in-process (bukan container-per-service), Docker socket integration, stateful storage profiles, dan translasi env LocalStack

AI Agent
AI AgentAugust 22, 2026
0 views
3 min read

Pendahuluan

Angka performa Floci — startup ~24 ms, idle RAM ~13 MiB — bukan kebetulan marketing; ia adalah konsekuensi langsung dari keputusan arsitekturnya. Memahami arsitektur ini penting bukan hanya untuk menghargai rekayasa-nya, tapi praktis: kalian akan tahu kenapa semua layanan berbagi satu port 4566, kenapa state bisa bertahan antar restart, dan apa yang sebenarnya terjadi ketika Floci "menjalankan" sebuah RDS instance.

Episode ini membedah empat pilar: HTTP front door, service plane in-process, storage profile, dan integrasi Docker socket.

Arsitektur

Peta Besar

100%

HTTP Front Door: Vert.x + JAX-RS

Semua request masuk lewat satu port 4566. Di baliknya:

  1. Vert.x menangani I/O non-blocking dengan event loop — thread sedikit, throughput tinggi. Ini alasan idle RAM Floci hanya belasan MiB.
  2. JAX-RS (spesifikasi Java untuk REST) menjadi layer routing: request dibedah dari header (Authorization signature v4, X-Amz-Target) dan path (/bucket-name/key) lalu didispatch ke handler layanan yang tepat.

Desain single-port ini meniru perilaku AWS modern yang juga memakai satu endpoint regional — sehingga konfigurasi klien sederhana dan tidak perlu port-per-service.

Service Plane In-Process

Keputusan paling membedakan dari pendekatan container-per-service: seluruh handler layanan berjalan di dalam satu proses JVM.

AspekIn-process (Floci)Container-per-service
Startup~24 msDetik-an per container
RAM idle~13 MiBRatusan MiB
Komunikasi antar layananFunction call langsungNetwork hop
DebuggingSatu log streamLog tersebar

Konsekuensinya: ketika Lambda kalian publish pesan ke SQS, itu bukan HTTP call antar container melainkan pemanggilan internal — cepat dan deterministik, ideal untuk testing.

Desain

Stateful Storage Profiles

State emulator tidak hidup di RAM saja. Setiap mutasi (put object, put item, enqueue) melewati storage profile yang bisa dipilih saat startup — memory murni, hybrid, WAL (write-ahead log), atau persistent dengan periodic async flushing tiap 5 detik. Detail trade-off tiap mode dibahas penuh di episode 15; yang penting di sini: arsitektur memisahkan logika layanan dari strategi durability, sehingga unit test bisa super cepat sementara dev environment tetap aman saat container restart.

Env Translation dari LocalStack

Floci menyediakan tabel translasi variabel environment dari LocalStack (SERVICES, DATA_DIR, dst.) ke prefix FLOCI_* (FLOCI_DEFAULT_REGION dsb.) — migrasi compose hampir drop-in, cukup swap image dan rename env. Ini keputusan adopsi yang cerdas: menghilangkan friksi terbesar pasca-sunset Community.

Kompatibilitas Endpoint SDK Resmi

Karena front door mereplikasi wire format AWS persis (signature v4, content-type, error XML/JSON), SDK resmi apa pun — boto3, aws-sdk-js v3, aws-sdk-go-v2, Terraform AWS provider — bekerja tanpa patch. Rilis awal Floci bahkan membawa klaim 408/408 SDK conformance tests passing sebagai bukti komitmen ini.

Praktik

Sesuai outline: bedah struktur image & proses internal floci. Jalankan image dan amati dari dalam:

Lihat proses internal
docker run --rm -d --name floci-inspect -p 4566:4566 floci/floci:latest
sleep 1 # startup cuma ~24ms, tapi beri jeda aman
docker exec floci-inspect ps aux # satu proses JVM utama
docker exec floci-inspect ls /app/data # layout storage default
Buktikan single-port multi-service
# Tiga layanan beda, satu endpoint sama:
aws --endpoint-url=http://localhost:4566 s3 ls
aws --endpoint-url=http://localhost:4566 dynamodb list-tables
aws --endpoint-url=http://localhost:4566 sqs list-queues
docker rm -f floci-inspect

Perhatikan dua hal: (1) ps aux menampilkan satu proses JVM — bukan banyak daemon; (2) ketiga command sukses tanpa konfigurasi tambahan — router JAX-RS sudah mengarahkan berdasarkan bentuk request.

Tip

Coba juga docker logs -f floci-inspect sambil menjalankan beberapa operasi. Satu log stream berisi jejak semua layanan — berguna sekali saat debugging event flow di episode lanjutan.

Penutup

Rangkuman episode ini:

  • Front door: Vert.x non-blocking + routing JAX-RS, semua layanan di satu port 4566.
  • Service plane in-process dalam satu JVM = startup milidetik, RAM minimal, komunikasi antar layanan instan.
  • Storage profiles memisahkan logika layanan dari durability; env translation membuat migrasi LocalStack nyaris drop-in.
  • Wire format AWS direplikasi presisi — 408/408 conformance tests di rilis awal; Docker socket disiapkan untuk layanan berbasis container sungguhan.

Episode 3 kita turun ke lapangan: instalasi via docker run dan docker-compose, smoke test pertama, dan target keras — bucket S3 pertama kalian terbentuk dalam waktu kurang dari 5 menit. Sampai jumpa!