Membangun Layanan Web Highly Available tanpa Database
Eksplorasi
- Untuk startup baru, biasanya dipilih framework web seperti Rails, Django, atau Node, serta database seperti MySQL, PostgreSQL, atau MongoDB
- Namun bagaimana jika layanan web dan instance database bisa digabung menjadi satu? Pendekatan ini dimungkinkan dengan menyimpan semua data di RAM
- Jika RAM digunakan sebagai database, tidak perlu melakukan serialisasi data dengan kueri SQL
- Indeks dapat diimplementasikan menggunakan hash table di dalam memori
- Pekerjaan latar belakang dapat ditangani sebagai thread di dalam satu proses besar
- Jika proses mengalami crash, pemulihan dimungkinkan dengan mengambil snapshot RAM secara berkala dan mencatat perubahan ke disk
Skalabilitas
- Ketika muncul pelanggan yang membutuhkan high availability, server direplikasi menggunakan algoritma konsensus Raft
- Jika server leader mati, leader baru akan dipilih untuk menangani permintaan
- Dengan cara ini, rolling deployment dapat dilakukan tanpa perlu me-restart server
Ekstraksi
- Saat jumlah pelanggan besar bertambah, layanan web dapat dipecah dan ditangani melalui sharding
- Setiap pelanggan enterprise disediakan cluster khusus
- Bottleneck utama dapat berupa performa thread commit
Stack kami
- Menggunakan Common Lisp: sangat baik dalam mendukung multithreading dan cocok untuk hot reloading kode
- Menggunakan bknr.datastore dan bknr.cluster: memakai library Braft dari Baidu untuk implementasi Raft
- Menggunakan EFS untuk menyimpan file gambar: lebih mudah untuk penanganan error dan pengujian dibandingkan S3
Ringkasan
- Arsitektur ini cocok untuk startup baru, dan dengan Common Lisp banyak tooling sudah tersedia
- Ucapan terima kasih kepada para kontributor bknr.datastore, Braft, dan Raft
Ringkasan GN⁺
- Artikel ini memperkenalkan arsitektur baru untuk membangun layanan web highly available tanpa database
- Dengan menggunakan RAM sebagai database dan algoritma konsensus Raft, high availability dapat dijamin
- Menggunakan Common Lisp untuk mendukung multithreading dan hot reloading kode
- Arsitektur ini cocok untuk startup baru serta memungkinkan pengembangan dan debugging yang cepat
- Proyek dengan fungsi serupa antara lain Redis dan Memcached
1 komentar
Komentar Hacker News
Aneh membuat log transaksi sendiri alih-alih menggunakan SQLite
Membuat database in-memory sendiri alih-alih menggunakan MySQL, Postgres, Redis, MongoDB, dan sebagainya itu rumit
Tidak mau mempelajari aspek dasar MySQL atau Postgres adalah pemborosan waktu
Arsitekturnya mirip dengan Nomad, Consul, dan Vault dari HashiCorp
Ada kesalahpahaman bahwa RAM itu sangat murah
Pernah melihat proyek yang menggunakan direktori file system sebagai tabel, dan file JSON sebagai baris
Menggunakan database relasional lebih andal
Mengimplementasikan lapisan konsensus Raft sendiri untuk menghindari hal yang kompleks
Aplikasi desktop dan mobile modern sering menggunakan database seperti SQLite
Membangun database in-memory sendiri tidak lebih sederhana daripada memasang Postgres atau SQLite