Desain Teknis
Komponen
| Komponen | Tanggung jawab |
|---|---|
WorkerCommonAppModule | Memuat konfigurasi, database, startup barrier, bootstrap, dan modul realtime. |
KvBootstrapService | Menjalankan full bootstrap lalu membuka startup barrier. |
KvInitService | Membaca daftar tabel dan mengisi cache awal. |
KvCacheTableService | Mendengarkan perubahan metadata kv_cache_table. |
KvCacheTableItemService | Menambah/menghapus subscription CDC secara dinamis untuk tabel terdaftar. |
KvCacheSyncService | Mengorkestrasi query database, operasi cache, dan publish event sinkronisasi. |
KvCacheService | Menyediakan operasi Redis row, index, serta global:config. |
StartupBarrierService | Menahan komponen realtime sampai bootstrap selesai. |
Relasi sistem
Stream dan subject
| Stream | Subject | Pemakaian |
|---|---|---|
PG_CDC_EVENTS | pgcdc.public.kv_cache_table | Perubahan registrasi tabel cache. |
PG_CDC_EVENTS | pgcdc.public.<table> | Perubahan row pada setiap tabel terdaftar. |
CONFIG_EVENTS | config.sync.init | Snapshot global:config setelah bootstrap. |
CONFIG_EVENTS | config.sync.changed | Perubahan satu row atau hasil full sync satu tabel. |
CONFIG_EVENTS | config.sync.force | Didaftarkan, tetapi belum digunakan oleh worker ini. |
Kedua stream memakai file storage, satu replica, retention berbasis limits, dan batas max_bytes 2 GiB. CONFIG_EVENTS juga memiliki max_age 30 hari.
Kontrak event keluar
config.sync.init membawa:
{ type: 'init', snapshot: Record<string, Record<string, any>>, syncedAt: string }
config.sync.changed membawa salah satu bentuk:
// Perubahan row
{ type: 'row', cacheName, tableName, id, operation: 'c' | 'u' | 'd', data?, changedAt }
// Full sync tabel
{ type: 'table', cacheName, tableName, operation: 'sync', data, changedAt }
Teknologi
| Teknologi | Fungsi |
|---|---|
| NestJS 11 | Lifecycle, dependency injection, dan application context worker. |
TypeORM 0.3 + pg | Akses PostgreSQL datacore_db. |
| Redis + ioredis | Penyimpanan cache. |
| NATS.js 2.29 | JetStream consumer dan publisher. |
| TypeScript 5.7 | Implementasi dan build. |