Kinerja Server

Diperbarui: 1 Februari, 2022

Sparrow Wallet mengandalkan protokol server Electrum untuk manajemen data transaksi.

Dokumen ini memberikan tolok ukur kinerja saat ini untuk berbagai implementasi server Electrum indeks penuh pada perangkat keras standar, dan membahas dua pendekatan implementasi yang berbeda berdasarkan temuan ini.

Latar Belakang

Server Electrum berfungsi sebagai indeks alamat Bitcoin, yang memungkinkan pengguna untuk mengambil transaksi yang terkait dengan alamat tertentu. Tidak seperti implementasi referensi Bitcoin yang tidak memiliki fitur ini, server Electrum menawarkan fungsionalitas ini. Walaupun filter blok ringkas dapat memberikan informasi yang serupa, filter ini tidak mendukung transaksi mempool dan kurang efisien.

Protokol server Electrum adalah protokol indeks alamat Bitcoin yang paling banyak digunakan. Tolok ukur ini berfokus pada indeks alamat lengkap, yang sangat penting untuk privasi karena tidak menyimpan detail dompet tertentu di server. Untuk keamanan cold storage yang optimal, semua informasi dompet harus disimpan di dalam file dompet dan dihapus dari server setelah penutupan dompet. Pendekatan ini tidak termasuk proyek seperti BWT dan EPS yang membutuhkan penyimpanan alamat dompet di server.

MotivasiPermalink

Tolok ukur ini dibuat berdasarkan laporan kinerja Jameson Lopp pada bulan Juli 2020, dengan dua perbedaan utama:

  1. Ia menggunakan Raspberry Pi 4 dan bukannya server AWS, membuatnya lebih relevan untuk pengguna rumahan.
  2. Perusahaan ini menggunakan proyek-proyek terbaru dan mengujinya kembali setelah terjadi perubahan yang signifikan.

Pembaruan ini membuat benchmark menjadi sangat berguna bagi pengguna Sparrow yang ingin menjalankan server Electrum mereka sendiri di komputer papan tunggal, sehingga mereka dapat membandingkan implementasi yang berbeda dan memilih salah satu yang paling sesuai dengan kebutuhan mereka. Hasilnya memberikan wawasan praktis bagi pengguna yang mempertimbangkan untuk meng-hosting sendiri server Electrum di lingkungan rumah.

Perangkat keras

Benchmark ini menggunakan perangkat keras yang umum digunakan oleh pengguna Sparrow yang sadar akan privasi: Raspberry Pi 4 (model 8GB) yang menjalankan OS Ubuntu 21.10 64-bit. Penyimpanan data menggunakan SSD USB eksternal 1TB, lebih disukai daripada HDD karena ukuran blockchain Bitcoin dan indeks terkait yang besar (sekitar 0,5 TB). Pengaturan ini mencerminkan konfigurasi pengguna rumahan yang umum, menyediakan data kinerja yang relevan bagi mereka yang mempertimbangkan untuk meng-hosting sendiri server Electrum pada pengaturan komputer papan tunggal yang serupa.

Proyek

ElectrumX

ElectrumX, penerus proyek server Electrum yang asli, diadopsi pada tahun 2017. Setelah pembuat aslinya menghentikan dukungan blockchain Bitcoin, pengembang Electrum bercabang proyek tersebut, yang sekarang dikelola di https://github.com/spesmilo/electrumx.

Tantangan yang signifikan dengan ElectrumX adalah pembuatan indeks awal, yang memakan waktu sekitar satu minggu pada perangkat keras uji. Namun, pengguna dapat membangun indeks pada mesin yang lebih kuat dan mentransfernya ke komputer papan tunggal. Poin-poin penting:

  • Ukuran basis data saat ini: 75 GB
  • Memerlukan txindex yang diaktifkan di Bitcoin Core
  • Tidak ada binari yang telah dikompilasi sebelumnya
  • Versi yang diuji: ElectrumX 1.16

Indeks ElectrumX dapat dibangun di atas perangkat keras yang lebih kuat dan ditransfer, menawarkan fleksibilitas bagi pengguna dengan sumber daya komputasi yang terbatas.

Electrs

Electrs, yang dirancang untuk penggunaan pribadi dan bukannya server publik, menawarkan kebutuhan penyimpanan yang lebih rendah tetapi penggunaan CPU yang lebih tinggi dibandingkan dengan ElectrumX. Ini dikelola di https://github.com/romanz/electrs.

Keunggulan utama Electrs adalah waktu pembuatan indeks yang lebih cepat, hanya membutuhkan waktu 12-24 jam pada perangkat keras pengujian. Efisiensi ini menjadikannya pilihan yang lebih disukai untuk sebagian besar paket node yang sudah jadi. Poin-poin penting:

  • Ukuran basis data saat ini: 32 GB
  • Tidak memerlukan txindex pada Bitcoin Core
  • Tidak ada binari yang telah dikompilasi sebelumnya
  • Versi yang diuji: Electrs 0.9.4

Waktu pembuatan indeks yang jauh lebih singkat dan ukuran basis data yang lebih kecil membuat Electrs menjadi pilihan yang menarik untuk penggunaan pribadi, terutama pada perangkat keras dengan sumber daya yang terbatas.

Titik tumpu

Fulcrum, sebuah implementasi C++ modern, menawarkan kinerja tinggi meskipun kebutuhan ruang disk yang lebih besar. Dipelihara di https://github.com/cculianu/Fulcrumini memberikan keseimbangan antara kecepatan pengindeksan dan kinerja operasional.

Pengindeksan Fulcrum membutuhkan waktu 2-3 hari pada perangkat keras pengujian, memposisikannya di antara Electrs dan ElectrumX dalam waktu pembuatan. Setelah diindeks, Fulcrum memberikan performa yang luar biasa. Poin-poin penting:

  • Ukuran basis data saat ini: 102 GB
  • Memerlukan txindex yang diaktifkan di Bitcoin Core
  • Tersedia binari yang telah dikompilasi sebelumnya untuk Linux (x86_64 dan arm64) dan Windows
  • Versi yang diuji: Fulcrum 1.6.0

Kombinasi waktu pengindeksan yang masuk akal dan performa operasional yang luar biasa dari Fulcrum membuatnya menjadi pilihan yang menarik, terutama bagi pengguna yang dapat mengakomodasi kebutuhan penyimpanan yang lebih besar.

Electrs-esplora

Electrs-esplora, sebuah cabang dari Electrs, membangun indeks tambahan untuk meningkatkan performa perusahaan. Namun demikian, kebutuhan datanya yang tinggi (sekitar 800 GB) membuatnya tidak cocok untuk perangkat keras pengujian. Poin-poin penting:

  • Kebutuhan penyimpanan yang sangat besar (~800 GB)
  • Dapat dijalankan dengan --lightmode flag, mengurangi ruang disk hingga setengahnya
  • Bahkan dalam mode ringan, drive ini hampir menghabiskan drive 1TB ketika dikombinasikan dengan blockchain ~420GB

Kebutuhan penyimpanan yang ekstensif dari implementasi ini melebihi pengaturan komputer papan tunggal pada umumnya, sehingga tidak praktis bagi sebagian besar pengguna rumahan. Meskipun menawarkan manfaat kinerja untuk penggunaan perusahaan, kebutuhan sumber dayanya membatasi penerapannya dalam penerapan pribadi atau skala kecil.

addrindexrs

addrindexrs adalah garpu Electrs lainnya, yang digunakan oleh backend Dojo untuk pengambilan data transaksi historis. Fork ini tidak memiliki perubahan signifikan terkait kinerja yang akan membenarkan inklusi sebagai implementasi terpisah dalam benchmark ini. Fork ini mempertahankan karakteristik yang mirip dengan proyek Electrs asli, sehingga membuatnya berlebihan untuk tujuan perbandingan kinerja dalam konteks ini.

Pengindeksan

Kinerja pengindeksan bervariasi secara signifikan di antara ketiga implementasi tersebut:

ElectrumX: Pengindeksan paling lambat (1 minggu), karena penguraian blok Python dan penguraian blok yang lebih lambat. Namun, indeksnya yang komprehensif memungkinkan respons server yang lebih terukur tanpa sering melakukan kueri Bitcoin Core. OS 64-bit sangat penting untuk performa yang optimal.

Electrs: Pengindeksan tercepat (1 hari), disebabkan oleh indeksnya yang lebih kecil dan lebih sederhana serta pengambilan dan penguraian blok yang dioptimalkan. Kecepatan ini ada harganya: ia harus mengurai blok selama operasi, yang berpotensi mempengaruhi performa untuk wallet yang lebih dalam.

Titik tumpu: Waktu pengindeksan sedang (2-3 hari), membangun indeks yang sedikit lebih besar daripada ElectrumX tetapi jauh lebih cepat. Prosesnya yang intensif sumber daya mendapat manfaat dari implementasi bahasa tingkat rendah. The sinkronisasi cepat Opsi ini dapat meningkatkan kecepatan pengindeksan lebih lanjut. Indeks komprehensif yang dihasilkan menghasilkan kinerja operasional yang sangat baik.

Setiap implementasi menghadirkan pertukaran antara waktu pengindeksan, ukuran indeks, dan efisiensi operasional, yang melayani berbagai kasus penggunaan dan kemampuan perangkat keras.

Tes

Benchmark ini mengevaluasi dua beban server umum dari Sparrow menggunakan wallet besar (~3000 alamat yang digunakan):

  1. Pemuatan dompet awal: Berfokus pada langganan alamat, yang memungkinkan Sparrow menerima pembaruan untuk transaksi alamat. Yang penting, setiap permintaan berlangganan mengembalikan hash dari semua ID transaksi dan ketinggian blok yang mempengaruhi alamat tersebut. Tes ini mengukur waktu untuk berlangganan semua alamat dompet.
  2. Penyegaran dompet: Mensimulasikan pengambilan semua data dompet (transaksi dan blok) selama penyegaran manual, yang diperlukan ketika masalah komunikasi menyebabkan data yang buruk. Langganan alamat sudah tersedia untuk pengujian ini.

Parameter uji utama:

  • Dompet besar dengan ~3000 alamat yang digunakan
  • Ukuran halaman batch 50 untuk semua server
  • Mengukur waktu berlangganan untuk pemuatan awal
  • Mengukur waktu pengambilan data untuk penyegaran dompet

Pendekatan ini memberikan perbandingan kinerja yang komprehensif di berbagai implementasi server Electrum, dengan fokus pada skenario penggunaan dunia nyata di Sparrow Wallet.

Tes 1: Beban Awal (Langganan Alamat)

Tes Mulai Dingin Jalankan 1 Jalankan 2 Jalankan 3
ElectrumX 52655 ms 40721 ms 54143 ms 49011 ms
Electrs 322386 ms 393303 ms 384036 ms 427722 ms
Titik tumpu 2333 ms 1413 ms 1472 ms 1413 ms
  • Titik tumpu: Tercepat (rata-rata ~1660 ms)
  • ElectrumX: Sedang (rata-rata ~49.133 ms)
  • Electrs: Paling lambat (rata-rata ~381.862 ms)

Fulcrum mengungguli ElectrumX sebesar 22x dan Electrs sebesar ~300x untuk pemuatan dompet awal.

Tes 2: Penyegaran Dompet (Pengambilan Data)

Tes Mulai Dingin Jalankan 1 Jalankan 2 Jalankan 3
ElectrumX 114466 ms 66175 ms 80133 ms 75489 ms
Electrs 17562 ms 11621 ms 11219 ms 11521 ms
Titik tumpu 14152 ms 7854 ms 7382 ms 7442 ms
  • Titik tumpu: Tercepat (rata-rata ~9.208 ms)
  • Electrs: Detik (rata-rata ~12.981 ms)
  • ElectrumX: Paling lambat (rata-rata ~84.066 ms)

Fulcrum 8x lebih cepat dari ElectrumX dan 1,5x lebih cepat dari Electrs untuk penyegaran dompet.

Fulcrum secara konsisten menunjukkan performa superior di kedua pengujian, menunjukkan keunggulan signifikan dalam pemuatan awal dan mempertahankan keunggulan dalam penyegaran dompet. ElectrumX berkinerja sedang dalam pemuatan tetapi kesulitan dalam penyegaran. Electrs, meskipun lambat dalam pemuatan awal, menunjukkan kinerja yang kompetitif dalam penyegaran.

Diskusi

Sparrow Wallet mengandalkan protokol server Electrum untuk manajemen data transaksi. Dokumen ini membandingkan kinerja implementasi server Electrum indeks penuh pada perangkat keras standar, dengan fokus pada Raspberry Pi 4 dengan RAM 8GB dan SSD USB eksternal 1TB. Ini memeriksa implementasi ElectrumX, Electrs, dan Fulcrum.

ElectrumX, dikelola di https://github.com/spesmilo/electrumxmembutuhkan waktu sekitar satu minggu untuk membangun indeks 75GB pada perangkat keras uji coba dan membutuhkan txindex yang diaktifkan pada Bitcoin Core. Electrs, dirancang untuk penggunaan pribadi https://github.com/romanz/electrsmembangun indeks 32GB dalam 12-24 jam tanpa memerlukan txindex. Titik tumpu https://github.com/cculianu/Fulcrum membangun indeks 102GB dalam 2-3 hari, membutuhkan txindex, dan menawarkan binari yang sudah dikompilasi.

Pengujian menggunakan dompet besar (~3000 alamat) untuk mengukur pemuatan awal (langganan alamat) dan penyegaran dompet (pengambilan data). Hasilnya menunjukkan bahwa Fulcrum secara signifikan mengungguli yang lain, 22x lebih cepat daripada ElectrumX dan ~300x lebih cepat daripada Electrs dalam pemuatan awal, dan 8x lebih cepat daripada ElectrumX dan 1.5x lebih cepat daripada Electrs dalam penyegaran.

Perbedaan performa antara Fulcrum dan Electrs dalam pemuatan awal (1,4 detik vs 6 menit) berasal dari pendekatan penyimpanan data yang berbeda. Electrs menyimpan data minimal, membutuhkan pengambilan dan penguraian blok yang ekstensif untuk setiap pemuatan dompet. Untuk dompet uji, ini berarti memproses 3,5GB blok berulang kali, menyebabkan beban CPU yang tinggi dan potensi kegagalan respons pada komputer papan tunggal. ElectrumX dan Fulcrum mempertahankan indeks alamat yang komprehensif, sehingga memungkinkan pengambilan data yang efisien. Pendekatan ini, dikombinasikan dengan indeks transaksi Bitcoin Core, memungkinkan kinerja Fulcrum yang superior.

Implementasi C++17 Fulcrum memberikan kecepatan yang konsisten di seluruh platform, sementara arsitektur berbasis Python ElectrumX menunjukkan kinerja yang tidak konsisten dan penggunaan CPU yang lebih tinggi. Temuan ini menyoroti pertukaran antara ukuran indeks, kecepatan kueri, dan pemanfaatan sumber daya dalam implementasi server Electrum, dengan Fulcrum menawarkan keseimbangan terbaik untuk sebagian besar pengguna.

Kesimpulan

Benchmark ini menunjukkan Fulcrum sebagai implementasi server Electrum yang optimal untuk pengguna Sparrow Wallet.

Meskipun waktu pengindeksan awal sedikit lebih lama dibandingkan dengan Electrs, indeks komprehensif Fulcrum menawarkan skalabilitas dan kinerja yang unggul.

Seiring dengan bertambahnya kedalaman dompet dan berkurangnya biaya penyimpanan, manfaat Fulcrum dalam hal kecepatan kueri, keandalan, dan daya tahan perangkat keras lebih besar daripada kebutuhan ruang disk yang lebih besar.

Meskipun Electrs mungkin sesuai dengan skenario dengan ruang disk yang sangat terbatas dan kedalaman dompet yang kecil, Fulcrum direkomendasikan sebagai server yang ideal untuk Sparrow, memberikan keseimbangan kinerja dan pemanfaatan sumber daya yang terbaik bagi sebagian besar pengguna.

Catatan teknis
Pengindeksan alamat yang efisien di server Electrum melibatkan teknik penyimpanan data yang strategis. Fulcrum dan ElectrumX menggunakan kunci hash skrip (masing-masing 32 byte dan 11 byte) untuk memetakan ke nomor transaksi (tx_num). Ini tx_num mewakili urutan transaksi dalam blockchain, yang berfungsi sebagai pengenal yang ringkas. Sistem menyimpan sebuah file dari txids diperintahkan oleh tx_num, memungkinkan cepat txid pengambilan. Mereka juga menyimpan larik dalam memori yang memetakan ketinggian blok ke jumlah transaksi kumulatif, memungkinkan pencarian ketinggian blok dengan cepat. Pendekatan ini memperdagangkan penyimpanan yang lebih besar (misalnya, tambahan 21GB ElectrumX untuk txid lookup) untuk meningkatkan performa kueri secara signifikan dibandingkan dengan metode penyimpanan minimal Electrs. Desain ini menggambarkan keseimbangan antara efisiensi penyimpanan dan kecepatan kueri dalam rekayasa basis data, dengan Fulcrum dan ElectrumX yang memprioritaskan kinerja di atas penghematan penyimpanan.