Rilis Dragonfly 1.0, sistem untuk menyimpan data dalam RAM

Sistem penyimpanan dan caching dalam memori Dragonfly telah dirilis, yang memanipulasi data dalam format kunci/nilai dan dapat digunakan sebagai solusi ringan untuk mempercepat pekerjaan situs dengan muatan tinggi, menyimpan kueri lambat ke DBMS dan data perantara dalam RAM. Dragonfly mendukung protokol Memcached dan Redis, yang memungkinkan Anda menggunakan perpustakaan klien yang ada dan mentransfer proyek menggunakan Memcached dan Redis ke Dragonfly tanpa mengerjakan ulang kodenya.

Dibandingkan dengan Redis, Dragonfly mencapai peningkatan kinerja 2 kali lipat (6 juta permintaan per detik) untuk beban kerja umum di lingkungan c16gn.25xlarge Amazon EC3.8. Dibandingkan dengan Memcached di lingkungan AWS c6gn.16xlarge, Dragonfly mampu melakukan permintaan tulis 4.7 kali lebih banyak per detik (3.8 juta berbanding 806 ribu) dan 1.77 kali lebih banyak permintaan baca per detik (3.7 juta berbanding 2.1 juta).

Rilis Dragonfly 1.0, sistem untuk menyimpan data dalam RAM

Dalam pengujian untuk menyimpan data sebesar 5 GB, Dragonfly memerlukan memori 30% lebih sedikit dibandingkan Redis. Saat membuat snapshot dengan perintah "bgsave", konsumsi memori meningkat, tetapi pada saat puncak konsumsi memori tetap hampir tiga kali lebih sedikit dibandingkan di Redis, dan operasi perekaman snapshot itu sendiri jauh lebih cepat (dalam pengujian, snapshot di Dragonfly ditulis dalam 30 detik, sedangkan Redis - dalam 42 detik).

Rilis Dragonfly 1.0, sistem untuk menyimpan data dalam RAM

Performa tinggi dicapai berkat arsitektur multi-thread tanpa berbagi sumber daya (shared-nothing), yang berarti bahwa setiap thread diberi prosesor terpisah dengan porsi datanya sendiri, bekerja tanpa mutex dan spin lock. Untuk memastikan atomisitas saat bekerja dengan banyak kunci, kunci VLL yang ringan digunakan. Untuk menyimpan informasi secara efisien dalam memori, struktur dashtable digunakan, yang mengimplementasikan jenis tabel hash yang dipartisi.

Beberapa fitur Capung:

  • Mode caching, yang secara otomatis mengganti data lama dengan data baru setelah memori bebas habis.
  • Dukungan untuk mengikat data seumur hidup selama data tersebut dianggap relevan.
  • Dukungan untuk menghapus status penyimpanan ke disk di latar belakang untuk pemulihan nanti setelah restart.
  • Kehadiran konsol HTTP (mengikat port TCP 6379) untuk manajemen sistem dan API untuk mengembalikan metrik, kompatibel dengan Prometheus.
  • Dukungan untuk 185 perintah Redis, yang kira-kira setara dengan fungsionalitas rilis Redis 5.
  • Mendukung semua perintah Memcached kecuali CAS (check-and-set).
  • Dukungan untuk operasi asinkron untuk membuat snapshot.
  • Konsumsi memori yang dapat diprediksi.
  • Penerjemah Lua 5.4 bawaan.
  • Mendukung tipe data kompleks seperti hash, set, daftar (ZSET, HSET, LIST, SETS dan STRING) dan data JSON.
  • Mendukung replikasi penyimpanan untuk toleransi kesalahan dan penyeimbangan beban.

Kode Dragonfly ditulis dalam C/C++ dan didistribusikan di bawah BSL (Business Source License). Lisensi BSL diusulkan oleh salah satu pendiri MySQL sebagai alternatif model Open Core. Inti dari BSL adalah bahwa kode fungsionalitas tingkat lanjut pada awalnya tersedia untuk dimodifikasi, tetapi untuk beberapa waktu dapat digunakan secara gratis hanya jika kondisi tambahan terpenuhi, yang memerlukan pembelian lisensi komersial untuk menghindarinya. Persyaratan lisensi tambahan untuk proyek Dragonfly mengharuskan kode ditransfer ke lisensi Apache 2.0 pada tanggal 15 Maret 2028. Hingga saat ini, lisensi mengizinkan penggunaan kode hanya untuk memastikan pengoperasian layanan dan produknya, tetapi melarang penggunaan untuk pembuatan layanan cloud berbayar yang bertindak sebagai tambahan pada Dragonfly.

Versi Dragonfly 1.0 terkenal karena implementasi dukungan untuk replikasi data dari server utama ke server sekunder. Namun, Dragonfly dapat dikonfigurasi untuk digunakan sebagai penyimpanan sekunder yang menerima data dari server utama baik berdasarkan Dragonfly atau berdasarkan Redis. API manajemen replikasi kompatibel dengan Redis dan didasarkan pada penggunaan perintah ROLE dan REPLICAOF (SLAVEOF).

Sumber: opennet.ru

Tambah komentar