1 poin oleh GN⁺ 2024-09-26 | 1 komentar | Bagikan ke WhatsApp

Latar belakang

  • Wafris adalah perusahaan firewall aplikasi web open source yang menyediakan klien middleware Rails
  • Klien v1 awal memerlukan penyimpanan data Redis lokal, tetapi kini mereka merilis klien v2 yang menggunakan SQLite
  • Artikel ini membahas proses pengambilan keputusan migrasi dari Redis ke SQLite, pertimbangan performa, dan perubahan arsitektur

Ringkasan

  • SQLite, Redis, dan RDBMS tradisional (Postgres/MySQL) masing-masing memiliki kelebihan dan kekurangan
  • Penyimpanan data ini tidak bisa saling menggantikan begitu saja, dan mencobanya dapat menimbulkan masalah
  • Artikel ini menjelaskan proses merancang ulang klien v1 berbasis Redis menjadi klien v2 berbasis SQLite

Mengapa perubahan ini dipaksakan?

  • Tujuan Wafris adalah memudahkan developer melindungi situs mereka
  • Klien v1 menggunakan penyimpanan data Redis, tetapi banyak pengguna mengalami masalah saat melakukan deployment Redis
  • Mereka beralih ke SQLite untuk mengurangi beban pengguna agar tidak perlu menjadi administrator Redis

Apa itu kecepatan?

  • Redis lebih cepat dibanding RDBMS tradisional, tetapi tetap ada banyak hal yang harus dikelola
  • Di lingkungan cloud, latensi jaringan menjadi masalah besar
  • SQLite dapat memberikan performa lebih cepat dengan mengurangi waktu round-trip jaringan

Asumsi monolitik

  • Banyak aplikasi terdistribusi mengalami masalah saat menggunakan Redis
  • Arsitektur ditinjau ulang untuk mengurangi kompleksitas penggunaan Redis

Mengadopsi SQLite

  • SQLite mengurangi bottleneck network IO
  • SQLite bersaing dengan membuka file (fopen()), bukan dengan database client/server

Benchmark SQLite dan Redis

  • SQLite sekitar 3 kali lebih cepat daripada Redis pada use case tertentu
  • Bahkan tanpa memperhitungkan latensi jaringan, SQLite tetap lebih cepat

Hal yang tidak tercakup di grafik

  • Bahkan jika performa SQLite lebih buruk dalam benchmark, di lingkungan nyata SQLite bisa lebih cepat karena latensi jaringan
  • SQLite memudahkan scale-out secara horizontal serta mengurangi beban instalasi dan konfigurasi bagi pengguna

Membangun arsitektur sinkronisasi

  • Di v1 (Redis), saat pengguna memperbarui aturan, pembaruan diterapkan ke penyimpanan data Redis
  • Di v2 (SQLite), klien secara berkala memeriksa aturan yang diperbarui lalu mengunduh database SQLite yang baru

Arsitektur terdistribusi SQLite

  • Masalah bottleneck database diatasi dengan menyinkronkan DB SQLite ke setiap instance komputasi

Kesimpulan

  • Arsitektur v2 berbasis SQLite membantu banyak situs bertahan dari serangan dan tetap online
  • Memberikan beban yang lebih kecil kepada pengguna serta menghadirkan internet yang lebih aman dan lebih terlindungi

Ringkasan GN⁺

  • Artikel ini menjelaskan proses migrasi dari Redis ke SQLite dan alasan di baliknya
  • SQLite meningkatkan performa dengan mengurangi latensi jaringan serta menurunkan beban instalasi dan konfigurasi bagi pengguna
  • Arsitektur terdistribusi SQLite menyelesaikan masalah bottleneck database
  • Artikel ini memberikan wawasan tentang cara menerapkan firewall aplikasi web dengan mudah dan membuatnya berjalan cepat

1 komentar

 
GN⁺ 2024-09-26
Komentar Hacker News
  • Tertarik pada model di mana setiap server aplikasi menyalin file database SQLite dan menggantinya secara berkala

    • Digunakan untuk aturan web application firewall
    • Bisa juga digunakan untuk konfigurasi feature flag
    • Tidak masalah jika pembaruan feature flag memerlukan beberapa detik
  • Latensi baca/tulis Redis sebanding dengan jumlah key yang di-query

    • Aplikasi monolitik yang menggunakan Postgres dan Redis bekerja dengan baik
    • Karena Redis bersifat single-threaded, fitur pembacaan dalam jumlah besar dapat memperlambat pekerjaan lain
    • Redis bagus untuk membaca dan menulis key tunggal atau sekumpulan kecil key tetap
    • Menarik bahwa SQLite memiliki performa yang baik dibandingkan instance Redis lokal
  • Dataset-nya terlihat berisi 1,2 juta item, tetapi sebenarnya tidak besar

    • Alamat IPv4 hanya 4,8MB, dan bisa dibuat lebih kecil dengan kompresi sederhana
    • Jika Ruby mendukung mmap, akan lebih baik memakai daftar IP secara langsung
  • Dalam hackathon internal Neon, ada yang menulis server Node.js yang mengubah protokol Redis menjadi query Postgres

    • Itu adalah proyek hacking yang menyenangkan
  • Di RailsWorld 2023 ada suasana yang negatif terhadap Redis

    • Ada asumsi bahwa server Redis memang diperlukan
    • Karena belum banyak pengalaman menggunakan Redis, ada rasa penasaran apakah ekosistem saat ini memang menentang Redis
  • SQLite tampak seperti kasus penggunaan niche yang bekerja baik di sisi server tanpa replikasi

    • Alternatif lain adalah menggunakan file statis yang dimuat ke memori
    • SQLite adalah alternatif yang bagus
  • Ada proyek bernama Redka yang mengimplementasikan Redis dengan SQLite

  • Kutipan terbaik: "SQLite does not compete with client/server databases. SQLite competes with fopen()."

  • Redis lebih cepat dibanding RDBMS tradisional, tetapi tetap perlu dikelola

    • Semua database memerlukan tingkat pengelolaan tertentu
    • Jika tidak terlalu memikirkan join, penyisipan dan pengambilan baris juga sangat cepat
  • Benchmarking adalah seni gelap untuk menipu diri sendiri dengan angka yang sangat presisi