Membedah Solid Stack Rails 8: Solid Queue, Solid Cache, dan Solid Cable sebagai komponen database-driven tanpa Redis, strategi scaling worker, serta praktik produksi dengan Solid Stack

Setelah di episode 11 kalian mengenal Active Job dan di episode 12 caching, episode 22 menyatukan keduanya dalam satu arsitektur: Solid Stack. Rails 8 memperkenalkan pendekatan baru yang radikal: menggantikan tiga layanan infrastruktur klasik — Redis untuk queue, cache, dan pub/sub — dengan database yang sudah kalian miliki.
Mengapa episode ini penting? Karena setiap layanan tambahan (Redis) berarti satu lagi hal yang harus diinstall, dimonitor, di-backup, dan di-scaling. Solid Stack menyederhanakan operasional secara drastis: satu PostgreSQL untuk segalanya. Memahami kapan Solid Stack cukup — dan kapan harus Redis — adalah keputusan arsitektur penting di 2026.
Solid Stack terdiri dari tiga komponen database-driven:
| Komponen | Menggantikan | Fungsi |
|---|---|---|
| Solid Queue | Redis + Sidekiq/Resque | Backend Active Job & scheduler |
| Solid Cache | Redis cache store | Cache store Rails |
| Solid Cable | Redis pub/sub | Backend Action Cable |
Ketiganya memakai PostgreSQL (atau MySQL) sebagai tempat penyimpanan — tabel yang dikelola migration Rails sendiri. Hasilnya: deployment yang lebih sedikit bergerak, lebih mudah di-backup (satu database), dan satu source of truth untuk transaksionalitas.
Solid Queue menyimpan job sebagai baris tabel:
bundle add solid_queue
bin/rails solid_queue:install
bin/rails db:migrateMembuat tabel solid_queue_jobs, solid_queue_scheduled_executions, dan lainnya. Aktifkan sebagai adapter:
config.active_job.queue_adapter = :solid_queueMenjalankan worker:
bin/rails solid_queue:startKeunggulan khas Solid Queue — transactional enqueue:
ActiveRecord::Base.transaction do
post.save!
NotificationJob.perform_later(post.id)
endJob di-enqueue dalam transaksi yang sama dengan perubahan data. Jika transaksi di-rollback, job ikut batal — tidak ada "job mengirim notifikasi untuk data yang tidak jadi disimpan". Sidekiq+Redis tidak bisa melakukan ini tanpa memisahkan kedua operasi.
Solid Cache menggunakan database sebagai store cache:
config.cache_store = :solid_cache_storeKarena cache kini di database yang sama, integrasi dengan fragment cache (episode 12) menjadi transaksional dan mudah di-backup. Solid Cache menggunakan write-through + back-end polling yang membuatnya mengejar performa Redis untuk sebagian besar beban, sambil menghilangkan satu infra.
Untuk Action Cable realtime (episode 14), Solid Cable menyimpan pesan pub/sub di database:
config.solid_cable.url = ... # konfigurasi database cableSolid Cable menggantikan Redis pub/sub untuk kebanyakan aplikasi realtime. Ia menulis pesan ke tabel dan memanfaatkan mekanisme notification PostgreSQL (LISTEN/NOTIFY atau polling) untuk mendistribusikan ke koneksi WebSocket.
Solid Stack sangat cocok untuk mayoritas aplikasi — tetapi Redis tetap unggul di beberapa skenario:
Pendekatan pragmatis di 2026: mulai dengan Solid Stack, ukur, dan pindahkan komponen tertentu ke Redis hanya jika data menunjukkan kebutuhan nyata. Prinsip omakase Rails 8 mengadopsi default database-driven karena sesuai untuk mayoritas kasus.
Note
Perhatikan satu trade-off penting: Solid Stack memindahkan beban (jobs, cache, pub/sub) ke PostgreSQL yang sama. Pastikan database kalian berukuran cukup dan memantau IOPS — database adalah titik sentral, jadi kapasitasnya harus direncanakan untuk memuat semua beban ini.
Solid Queue menyediakan cara scaling worker yang fleksibel:
production:
dispatch:
batch_size: 100
polling_interval: 0.1
queues:
- [default, 3]
- [mailers, 2]
- [low_priority, 1]
workers:
- queues: [default, mailers]
threads: 3
- queues: [low_priority]
threads: 1Prioritas queue dinyatakan sebagai bobot: [default, 3] artinya default diproses 3x lebih sering daripada [low_priority, 1]. Untuk beban tinggi, jalankan beberapa worker process (horizontal) di mesin berbeda — semua berbagi tabel queue yang sama.
Checklist produksi database-driven:
pool: cukup untuk app + worker + cable.bin/rails solid_queue:start (episode 24 untuk process manager)./solid_queue) menunjukkan job pending/berjalan.solid_queue:schedules); tidak butuh cron eksternal.bin/rails runner 'p SolidQueue::Job.group(:status).count'solid_queue:start selalu berjalan (systemd/Kamal).queue.yml.expires_in dan ukur; database cache harus di-prune.solid_queue:install + migrate di tiap environment.Episode 22 membekali kalian Solid Stack Rails 8: Solid Queue, Solid Cache, dan Solid Cable sebagai komponen database-driven yang menghapus Redis dari mayoritas deployment, keunggulan transactional enqueue, kapan Redis masih diperlukan, strategi scaling worker, dan checklist produksi database-driven.
Inti yang harus dibawa pulang:
bin/rails solid_queue:start.Di episode 23 selanjutnya kita akan membedah deployment: Kamal & Docker — deploy Rails ke VPS dengan Kamal, Dockerfile produksi, dan perbandingan managed hosting. Sampai jumpa di episode 23!