Saya mula mengusahakan projek sumber terbuka kira-kira setahun yang lalu untuk membina alternatif yang boleh dibenamkan kepada Redis in Go. Ketika itulah saya mula membina projek EchoVault. Sejak itu, projek itu telah mendapat minat dan juga beberapa penyumbang.
Artikel ini memperkenalkan EchoVault, ciri, kes penggunaannya dan motivasi di sebalik perkembangannya.
Apakah EchoVault?
EchoVault ialah stor data dalam memori yang boleh dibenamkan yang disesuaikan untuk aplikasi Go. Ia menyediakan antara muka serasi RESP melalui TCP sambil menawarkan fleksibiliti untuk dibenamkan terus ke dalam aplikasi.
Dengan berbuat demikian, EchoVault menyasarkan untuk menggantikan stor data dalam memori tradisional seperti Redis dalam beberapa kes penggunaan, menawarkan fungsi serupa dengan penyepaduan yang dipertingkatkan untuk Go.
Mengapa EchoVault Dibina
Motivasi awal saya untuk membina EchoVault ialah:
- Fleksibiliti Terbenam: Simpanan data dalam memori tradisional seperti Redis ialah perkhidmatan luaran yang memerlukan pengurusan dan penggunaan berasingan. EchoVault menghapuskan overhed ini dengan membenarkan pembangun membenamkan stor data terus ke dalam aplikasi mereka, memperkemas proses penggunaan.
- Penyepaduan Ekosistem Go: EchoVault direka terutamanya untuk Go, memastikan penyepaduan yang lancar dan prestasi optimum dalam aplikasi Go. Walau bagaimanapun, ia juga mengekalkan keserasian RESP berbanding TCP, menjadikannya serasi dengan pelanggan Redis sedia ada seperti redis-cli dan Jedis.
- Perubahan Lesen Redis: EchoVault ialah sumber terbuka (dilesenkan di bawah Apache 2.0). Kami komited untuk kekal menggunakan model sumber terbuka sepenuhnya ini dan bukan teras terbuka.
Ciri-ciri Disediakan oleh EchoVault
EchoVault padat dengan ciri yang menjadikannya pilihan yang mantap untuk storan data dalam memori:
- Sokongan TLS dan mTLS: Komunikasi selamat dengan sokongan untuk berbilang pelayan dan pelanggan Pihak Berkuasa Sijil Root (RootCAs).
Sokongan Kluster Replikasi: Menggunakan algoritma RAFT untuk replikasi dan pengelompokan.
- Lapisan Kawalan Akses: Menyediakan pengesahan dan kebenaran pengguna untuk menjamin akses data.
- Fungsi Pub/Sub Teragih: Menyokong penerbitan/langgan saluran dan corak untuk pemprosesan data masa nyata.
- Struktur Data: Kami menyokong pelbagai struktur data, termasuk set, set diisih, cincang, senarai dan banyak lagi. Kami terus menambah lebih banyak struktur data dan perintah di dalamnya.
- Lapisan Kegigihan: Lapisan ini memastikan ketahanan data dengan syot kilat dan kegigihan fail tambahan sahaja. Fail AOF serasi dengan RESP tetapi belum serasi sepenuhnya dengan Redis.
- Dasar Pengusiran Utama: Melaksanakan pelbagai strategi untuk pengusiran utama untuk mengurus penggunaan memori. EchoVault mempunyai pengusiran kunci pasif dan aktif. Dengan pengusiran kunci pasif, kunci yang telah tamat tempoh tidak akan dikeluarkan sehingga kali berikutnya ia diakses. Dengan pengusiran aktif, EchoVault akan memadamkan kunci yang telah tamat tempoh secara proaktif.
- Pelanjutan Perintah: Membenarkan lanjutan masa jalan perintah melalui fail objek kongsi dan API terbenam.
Senarai ciri terus berkembang kerana kami berada di peringkat awal pembangunan. Kami mempunyai beberapa lagi ciri hebat yang disediakan untuk masa hadapan, termasuk:
- Strim.
- Pelanjutan dengan modul Lua.
- Sharding.
Seni bina EchoVault
EchoVault menyokong penggunaan kendiri dan berkelompok.
Mod Kendiri
Dalam mod kendiri, EchoVault mengendalikan satu tika (berdiri) tunggal. Ini adalah cara paling mudah untuk menjalankan EchoVault. Anda boleh menjalankan contoh kendiri daripada pustaka terbenam atau memulakannya sebagai proses sendiri yang menerima sambungan TCP.
Contoh terbenam juga boleh menerima sambungan TCP, membolehkan anda berkomunikasi dengan proses Go anda daripada klien TCP.
Mod Kluster Replikasi RAFT
Untuk aplikasi yang memerlukan konsistensi yang kuat dan toleransi kesalahan, EchoVault menyokong mod kelompok replikasi berasaskan RAFT.
RAFT ialah algoritma konsensus yang memastikan ketekalan data merentas sistem teragih. Dalam mod ini, berbilang kejadian EchoVault boleh membentuk gugusan, menyediakan replikasi data dan memastikan data kekal konsisten walaupun sekiranya berlaku kegagalan nod.
Ciri Utama Mod Kluster RAFT:
- Toleransi Kesalahan: Memastikan ketersediaan data walaupun beberapa nod dalam gugusan gagal.
- Ketekalan: Menjamin semua nod dalam kelompok mempunyai data yang sama.
- Skalabiliti: Membolehkan penskalaan mendatar dengan menambahkan lebih banyak nod pada gugusan.
Anda boleh menjalankan gugusan EchoVault walaupun dalam mod terbenam. Ini bermakna contoh aplikasi anda boleh berkomunikasi antara satu sama lain melalui lapisan EchoVault tanpa perlu menggunakan perkhidmatan ketiga. Ini sesuai untuk kes penggunaan seperti pengurusan sesi merentas kelompok kejadian aplikasi.
Gunakan Kes untuk EchoVault
Kepelbagaian EchoVault menjadikannya sesuai untuk pelbagai aplikasi. Berikut ialah beberapa kes penggunaan yang berpotensi:
- Caching Dalam Memori
Senario: Tapak web e-dagang perlu menyimpan butiran produk dan maklumat sesi pengguna untuk meningkatkan prestasi.
Penyelesaian: Gunakan EchoVault untuk cache data yang kerap diakses untuk mempercepatkan masa tindak balas.
Faedah: Pemuatan halaman yang lebih pantas, pengalaman pengguna yang lebih baik dan ketegangan pangkalan data yang dikurangkan.
- Penemuan Perkhidmatan
Senario: Seni bina perkhidmatan mikro memerlukan penemuan perkhidmatan dinamik untuk komunikasi antara perkhidmatan.
Penyelesaian: Simpan titik akhir perkhidmatan dalam EchoVault, membolehkan perkhidmatan menemui dan berkomunikasi antara satu sama lain dengan cekap.
Faedah: Penemuan perkhidmatan yang dipermudahkan dan kecekapan komunikasi yang dipertingkatkan.
- Pengurusan Sesi
Senario: Aplikasi web yang diedarkan mesti mengurus sesi pengguna merentas berbilang kejadian.
Penyelesaian: Gunakan kluster terbenam EchoVault untuk menyimpan data sesi, memastikan konsistensi dan kebolehaksesan merentas semua kejadian aplikasi.
Faedah: Pengurusan sesi yang konsisten merentas kluster aplikasi tanpa menggunakan perkhidmatan kedua seperti Redis.
- Analitis Masa Nyata
Senario: Platform dagangan kewangan memerlukan analisis masa nyata dan pemantauan data perdagangan.
Penyelesaian: Simpan dan proses data perdagangan masa nyata dalam EchoVault, memanfaatkan set diisih dan keupayaan pub/sub untuk penjejakan dan analisis.
Faedah: Pemprosesan data masa nyata dan analitik yang lebih pantas.
- Barisan Tugasan Teragih
Senario: Sistem hujung belakang perlu mengurus dan mengagihkan tugas kepada berbilang nod pekerja.
Penyelesaian: Laksanakan baris gilir tugas menggunakan struktur data senarai EchoVault, di mana tugasan ditolak ke senarai dan nod pekerja pop tugas untuk diproses.
Faedah: Pengagihan tugas dan skalabiliti yang cekap.
- Bendera Ciri dan Pengurusan Konfigurasi
Senario: Aplikasi SaaS perlu mendayakan atau melumpuhkan ciri secara dinamik dan mengurus tetapan konfigurasi tanpa menggunakan semula aplikasi.
Penyelesaian: Simpan bendera ciri dan tetapan konfigurasi dalam EchoVault.
Faedah: Pengurusan konfigurasi dinamik dan masa henti yang dikurangkan.
- Penghadan dan Pendikitan Kadar
Senario: Gerbang API perlu menguatkuasakan had kadar dan permintaan pendikit untuk mencegah penyalahgunaan dan memastikan penggunaan yang adil.
Penyelesaian: Laksanakan pengehadan kadar menggunakan keupayaan dalam memori EchoVault untuk menjejak kiraan permintaan dan menguatkuasakan had dalam masa nyata.
Faedah: Pengehadan kadar yang berkesan dan kebolehpercayaan API yang dipertingkatkan.
- Pemilihan Pemimpin
Senario: Sekumpulan perkhidmatan teragih perlu memilih pemimpin untuk menyelaraskan tugas.
Penyelesaian: Bergantung pada pemilihan ketua kelompok teragih terbenam EchoVault untuk memastikan bahawa hanya satu contoh aplikasi ditetapkan sebagai ketua.
Faedah: Pemilihan pemimpin yang boleh dipercayai dan penyelarasan yang lebih baik tanpa melaksanakannya sendiri di peringkat permohonan.
Kesimpulan
EchoVault ialah projek yang bercita-cita tinggi. Pada peringkat awal ini, kami menjangkakan banyak kekusutan perlu diperbaiki dan banyak ciri perlu ditambah. Walau bagaimanapun, kami mengalu-alukan cabaran ini dan ingin melibatkan komuniti Go dalam projek ini.
Jika artikel ini telah mencetuskan rasa ingin tahu anda, atau anda berminat untuk menyumbang kepada projek seperti ini, lihat GitHub kami dan berikan bintang kepada kami! Kami sentiasa terbuka untuk menerima lebih banyak maklum balas dan sumbangan!
Atas ialah kandungan terperinci EchoVault: Alternatif Redis Boleh Benam dalam Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!