Sunucu Performansı

Güncellenmiştir: 1 Şubat, 2022

Sparrow Wallet, işlem veri yönetimi için Electrum sunucu protokolüne dayanır.

Bu belge, standart donanım üzerinde çeşitli tam dizin Electrum sunucu uygulamaları için güncel performans karşılaştırmaları sağlamakta ve bu bulgulara dayalı olarak iki farklı uygulama yaklaşımını tartışmaktadır.

Arka plan

Bir Electrum sunucusu, kullanıcıların belirli bir adresle ilişkili işlemleri almasına olanak tanıyan bir Bitcoin adres dizini olarak işlev görür. Bu özellikten yoksun olan Bitcoin referans uygulamasının aksine, Electrum sunucuları bu işlevi sunar. Kompakt blok filtreleri benzer bilgiler sağlayabilirken, mempool işlemlerini desteklemezler ve daha az verimlidirler.

Electrum sunucu protokolü en yaygın olarak benimsenen Bitcoin adres dizini protokolüdür. Bu kıyaslama, sunucuda belirli cüzdan ayrıntılarını saklamadıkları için gizlilik açısından çok önemli olan tam adres dizinlerine odaklanmaktadır. Optimum soğuk depolama güvenliği için, tüm cüzdan bilgileri cüzdan dosyası içinde bulunmalı ve cüzdan kapatıldıktan sonra sunucudan kaldırılmalıdır. Bu yaklaşım, cüzdan adreslerinin sunucuda saklanmasını gerektiren BWT ve EPS gibi projeleri hariç tutar.

MotivasyonKalıcı bağlantı

Bu kıyaslama, Jameson Lopp'un Temmuz 2020 performans raporunu temel almakla birlikte iki önemli fark içermektedir:

  1. AWS sunucusu yerine Raspberry Pi 4 kullanıyor, bu da onu ev kullanıcıları için daha uygun hale getiriyor.
  2. Projelerin güncel yapılarını kullanır ve önemli değişikliklerden sonra bunları yeniden test eder.

Bu güncellemeler, kıyaslamaları özellikle kendi Electrum sunucularını tek kartlı bir bilgisayarda çalıştırmak isteyen Sparrow kullanıcıları için yararlı hale getirerek, farklı uygulamaları karşılaştırmalarına ve ihtiyaçlarına en uygun olanı seçmelerine olanak tanır. Sonuçlar, bir Electrum sunucusunu ev ortamında kendi kendine barındırmayı düşünen kullanıcılar için pratik bilgiler sağlıyor.

Donanım

Bu kıyaslama, gizlilik bilincine sahip Sparrow kullanıcıları için tipik bir donanım kullanmaktadır: Ubuntu 21.10 64-bit işletim sistemi çalıştıran bir Raspberry Pi 4 (8GB model). Veri depolamada, Bitcoin blok zincirinin ve ilgili dizinlerin büyük boyutu (yaklaşık 0,5 TB) nedeniyle HDD'ler yerine tercih edilen 1 TB'lık harici bir USB SSD kullanılmıştır. Bu kurulum, yaygın ev kullanıcısı yapılandırmalarını yansıtmakta ve benzer tek kartlı bilgisayar kurulumlarında bir Electrum sunucusunu kendi kendine barındırmayı düşünenler için ilgili performans verilerini sağlamaktadır.

Projeler

ElectrumX

Orijinal Electrum sunucu projesinin halefi olan ElectrumX, 2017 yılında kabul edildi. Orijinal yazar Bitcoin blok zinciri desteğini durdurduktan sonra, Electrum geliştiricileri projeyi çatalladı ve şu anda https://github.com/spesmilo/electrumx.

ElectrumX ile ilgili önemli bir zorluk, test donanımında yaklaşık bir hafta süren ilk endeks oluşturma işlemidir. Ancak kullanıcılar endeksi daha güçlü bir makinede oluşturabilir ve tek kartlı bir bilgisayara aktarabilir. Önemli noktalar:

  • Mevcut veritabanı boyutu: 75 GB
  • Bitcoin Core'da txindex'in etkinleştirilmesini gerektirir
  • Önceden derlenmiş ikili dosyalar mevcut değil
  • Test edilen sürüm: ElectrumX 1.16

ElectrumX'in endeksi daha güçlü donanımlar üzerine kurulabilir ve aktarılabilir, bu da sınırlı bilgi işlem kaynaklarına sahip kullanıcılar için esneklik sunar.

Elektrikçiler

Genel sunucular yerine kişisel kullanım için tasarlanan Electrs, ElectrumX'e kıyasla daha düşük depolama gereksinimleri ancak daha yüksek CPU kullanımı sunar. Bakımı şu adreste yapılmaktadır https://github.com/romanz/electrs.

Electrs'in en önemli avantajı, test donanımında yalnızca 12-24 saat süren daha hızlı dizin oluşturma süresidir. Bu verimlilik, onu çoğu önceden oluşturulmuş düğüm paketi için tercih edilen seçenek haline getirmiştir. Önemli noktalar:

  • Mevcut veritabanı boyutu: 32 GB
  • Bitcoin Core'da txindex gerektirmez
  • Önceden derlenmiş ikili dosyalar mevcut değil
  • Test edilen sürüm: Electrs 0.9.4

Önemli ölçüde daha kısa dizin oluşturma süresi ve daha küçük veritabanı boyutu, Electrs'i özellikle sınırlı kaynaklara sahip donanımlarda kişisel kullanım için cazip bir seçenek haline getirmektedir.

Fulcrum

Modern bir C++ uygulaması olan Fulcrum, daha büyük disk alanı gereksinimlerine rağmen yüksek performans sunar. Bakımı şu adreste yapılmaktadır https://github.com/cculianu/Fulcrumindeksleme hızı ve operasyonel performans arasında bir denge kurar.

Fulcrum'un indeksleme işlemi test donanımında 2-3 gün sürüyor ve bu da onu yapım süresi açısından Electrs ve ElectrumX arasında konumlandırıyor. İndekslendikten sonra olağanüstü performans sunar. Önemli noktalar:

  • Mevcut veritabanı boyutu: 102 GB
  • Bitcoin Core'da txindex'in etkinleştirilmesini gerektirir
  • Linux (x86_64 ve arm64) ve Windows için önceden derlenmiş ikili dosyalar mevcuttur
  • Test edilen sürüm: Fulcrum 1.6.0

Fulcrum'un makul indeksleme süresi ve olağanüstü operasyonel performans kombinasyonu, özellikle daha büyük depolama ihtiyaçlarını karşılayabilen kullanıcılar için cazip bir seçenek haline getiriyor.

Electrs-esplora

Electrs'in bir çatalı olan Electrs-esplora, gelişmiş kurumsal performans için ek dizinler oluşturur. Ancak, yüksek veri gereksinimleri (yaklaşık 800 GB) onu test donanımı için uygun kılmamaktadır. Önemli noktalar:

  • Son derece büyük depolama gereksinimi (~800 GB)
  • İle çalıştırılabilir --lightmode bayrağı, disk alanını yarı yarıya azaltır
  • Hafif modda bile, ~420GB blok zinciri ile birleştirildiğinde neredeyse 1TB'lık bir sürücüyü tüketir

Bu uygulamanın kapsamlı depolama ihtiyaçları tipik tek kartlı bilgisayar kurulumlarını aşmakta ve bu da onu çoğu ev kullanıcısı için pratik olmaktan çıkarmaktadır. Kurumsal kullanım için performans avantajları sunarken, kaynak talepleri kişisel veya küçük ölçekli dağıtımlarda uygulanabilirliğini sınırlar.

addrindexrs

addrindexrs, Dojo arka ucu tarafından geçmiş işlem verilerini almak için kullanılan başka bir Electrs çatalıdır. Bu kıyaslamaya ayrı bir uygulama olarak dahil edilmesini haklı çıkaracak performansla ilgili önemli değişikliklerden yoksundur. Bu çatal, orijinal Electrs projesine benzer özellikleri korur ve bu bağlamda performans karşılaştırma amaçları için gereksiz hale getirir.

İndeksleme

İndeksleme performansı üç uygulama arasında önemli farklılıklar göstermektedir:

ElectrumX: Python'un tek iş parçacıklı olması ve daha yavaş blok ayrıştırması nedeniyle en yavaş indeksleme (1 hafta). Bununla birlikte, kapsamlı dizini, sık Bitcoin Core sorguları olmadan daha ölçeklenebilir sunucu yanıtları sağlar. Optimum performans için 64 bit işletim sistemi çok önemlidir.

Electrs: En hızlı indeksleme (1 gün), daha küçük, daha basit indeksine ve optimize edilmiş blok alma ve ayrıştırmaya atfedilir. Bu hızın bir bedeli vardır: işlem sırasında blokları yeniden ayrıştırması gerekir, bu da daha derin cüzdanlar için performansı potansiyel olarak etkiler.

Fulcrum: Orta düzeyde indeksleme süresi (2-3 gün), ElectrumX'ten biraz daha büyük bir indeks oluşturur ancak çok daha hızlıdır. Kaynak yoğun süreci, düşük seviyeli dil uygulamasından faydalanır. Fulcrum hızlı senkronizasyon seçeneği indeksleme hızını daha da artırabilir. Ortaya çıkan kapsamlı endeks mükemmel operasyonel performans sağlar.

Her uygulama, farklı kullanım durumlarına ve donanım özelliklerine hitap ederek indeksleme süresi, indeks boyutu ve operasyonel verimlilik arasında bir değiş tokuş sunar.

Test

Bu kıyaslama, büyük bir cüzdan (~3000 kullanılan adres) kullanarak Sparrow'dan iki yaygın sunucu yükünü değerlendirir:

  1. İlk cüzdan yüklemesi: Sparrow'un adres işlemleri için güncellemeleri almasını sağlayan adres aboneliklerine odaklanır. Daha da önemlisi, her abonelik talebi, o adresi etkileyen tüm işlem kimliklerinin ve blok yüksekliklerinin bir özetini döndürür. Test, tüm cüzdan adreslerine abone olma süresini ölçer.
  2. Cüzdan yenileme: İletişim sorunları hatalı verilere yol açtığında gerekli olan manuel yenileme sırasında tüm cüzdan verilerinin (işlemler ve bloklar) alınmasını simüle eder. Bu test için adres abonelikleri halihazırda mevcuttur.

Anahtar test parametreleri:

  • 3000'den fazla kullanılmış adrese sahip büyük cüzdan
  • Tüm sunucular için 50 toplu sayfa boyutu
  • İlk yükleme için abonelik süresini ölçer
  • Cüzdan yenileme için veri alma süresini ölçer

Bu yaklaşım, Sparrow Wallet'deki gerçek dünya kullanım senaryolarına odaklanarak farklı Electrum sunucu uygulamaları arasında kapsamlı bir performans karşılaştırması sağlar.

Test 1: İlk Yükleme (Adres Aboneliği)

Test Soğuk Çalıştırma Koşu 1 Koşu 2 Koşu 3
ElectrumX 52655 ms 40721 ms 54143 ms 49011 ms
Elektrikçiler 322386 ms 393303 ms 384036 ms 427722 ms
Fulcrum 2333 ms 1413 ms 1472 ms 1413 ms
  • Fulcrum: En hızlı (ortalama ~1660 ms)
  • ElectrumX: Orta (ortalama ~49,133 ms)
  • Electrs: En Yavaş (ortalama ~381,862 ms)

Fulcrum, ilk cüzdan yüklemesinde ElectrumX'i 22 kat, Electrs'i ise ~300 kat geride bırakıyor.

Test 2: Cüzdan Yenileme (Veri Alma)

Test Soğuk Çalıştırma Koşu 1 Koşu 2 Koşu 3
ElectrumX 114466 ms 66175 ms 80133 ms 75489 ms
Elektrikçiler 17562 ms 11621 ms 11219 ms 11521 ms
Fulcrum 14152 ms 7854 ms 7382 ms 7442 ms
  • Fulcrum: En hızlı (ortalama ~9,208 ms)
  • Elektronlar: Saniye (ortalama ~12,981 ms)
  • ElectrumX: En yavaş (ortalama ~84,066 ms)

Fulcrum, ElectrumX'ten 8 kat ve cüzdan yenileme için Electrs'ten 1,5 kat daha hızlıdır.

Fulcrum, ilk yüklemede önemli avantajlar göstererek ve cüzdan yenilemede üstünlüğünü koruyarak her iki testte de tutarlı bir şekilde üstün performans sergiliyor. ElectrumX yüklemede orta düzeyde performans gösterirken yenilemede zorlanıyor. Electrs, ilk yüklemede yavaş olsa da yenilemede rekabetçi bir performans gösteriyor.

Tartışma

Sparrow Wallet, işlem verisi yönetimi için Electrum sunucu protokolüne dayanır. Bu belge, 8GB RAM ve 1TB harici USB SSD'ye sahip Raspberry Pi 4'e odaklanarak standart donanım üzerindeki tam dizin Electrum sunucu uygulamalarının performansını karşılaştırmaktadır. ElectrumX, Electrs ve Fulcrum uygulamalarını inceler.

ElectrumX, şu adreste tutulur https://github.com/spesmilo/electrumx'nin test donanımında 75 GB'lık endeksini oluşturması yaklaşık bir hafta sürüyor ve Bitcoin Core'da txindex'in etkinleştirilmesini gerektiriyor. Electrs, kişisel kullanım için tasarlanmıştır https://github.com/romanz/electrstxindex gerektirmeden 12-24 saat içinde 32GB'lık bir dizin oluşturur. Fulcrum https://github.com/cculianu/Fulcrum 102 GB'lık bir dizini 2-3 günde oluşturur, txindex gerektirir ve önceden derlenmiş ikili dosyalar sunar.

Testlerde ilk yükleme (adres abonelikleri) ve cüzdan yenilemeyi (veri alma) ölçmek için büyük bir cüzdan (~3000 adres) kullanıldı. Sonuçlar, Fulcrum'un ilk yüklemede ElectrumX'ten 22 kat ve Electrs'ten ~300 kat daha hızlı ve yenilemede ElectrumX'ten 8 kat ve Electrs'ten 1,5 kat daha hızlı olarak diğerlerinden önemli ölçüde daha iyi performans gösterdiğini göstermektedir.

İlk yüklemede Fulcrum ve Electrs arasındaki performans farkı (1,4 saniyeye karşı 6 dakika) farklı veri depolama yaklaşımlarından kaynaklanmaktadır. Electrs minimum veri depolar ve her cüzdan yüklemesi için kapsamlı blok alma ve ayrıştırma gerektirir. Test cüzdanı için bu, 3,5 GB'lık blokların tekrar tekrar işlenmesi anlamına geliyordu ve tek kartlı bilgisayarlarda yüksek CPU yüküne ve potansiyel yanıt hatalarına neden oluyordu. ElectrumX ve Fulcrum kapsamlı adres indeksleri tutarak verimli veri alımına olanak tanır. Bu yaklaşım, Bitcoin Core'un işlem dizini ile birleştiğinde Fulcrum'un üstün performansını mümkün kılmaktadır.

Fulcrum'un C++17 uygulaması platformlar arasında tutarlı hız sağlarken, ElectrumX'in Python tabanlı mimarisi tutarsız performans ve daha yüksek CPU kullanımı göstermektedir. Bu bulgular, Electrum sunucu uygulamalarında dizin boyutu, sorgu hızı ve kaynak kullanımı arasındaki dengeyi vurgulamakta ve Fulcrum'un çoğu kullanıcı için en iyi dengeyi sunduğunu göstermektedir.

Sonuç

Bu kıyaslama, Fulcrum'un Sparrow Wallet kullanıcıları için en uygun Electrum sunucu uygulaması olduğunu ortaya koymaktadır.

Electrs'e kıyasla biraz daha uzun ilk indeksleme süresine rağmen, Fulcrum'un kapsamlı indeksi üstün ölçeklenebilirlik ve performans sunar.

Cüzdan derinlikleri arttıkça ve depolama maliyetleri düştükçe, Fulcrum'un sorgu hızı, güvenilirlik ve donanım ömründeki avantajları, daha büyük disk alanı gereksiniminden daha ağır basmaktadır.

Electrs çok sınırlı disk alanı ve küçük cüzdan derinlikleri olan senaryolara uygun olsa da, Fulcrum çoğu kullanıcı için en iyi performans ve kaynak kullanımı dengesini sağlayarak Sparrow için ideal sunucu olarak önerilmektedir.

Teknik not
Electrum sunucularında verimli adres indeksleme, stratejik veri depolama tekniklerini içerir. Fulcrum ve ElectrumX, işlem numaralarıyla eşleştirmek için komut dosyası karma anahtarlarını (sırasıyla 32 bayt ve 11 bayt) kullanır (tx_num). Bu tx_num blok zincirindeki bir işlemin sırasını temsil eder ve kompakt bir tanımlayıcı olarak hizmet eder. Sistemler bir dosya tutar txids tarafından sipariş edildi tx_numhızlı bir şekilde txid geri alma. Ayrıca blok yüksekliklerini kümülatif işlem sayılarıyla eşleyen bir bellek içi dizi tutarak hızlı blok yüksekliği aramalarına olanak sağlarlar. Bu yaklaşım, artan depolama alanını (örneğin ElectrumX'in 21 GB'lık ek txid Electrs'in minimal depolama yöntemine kıyasla önemli ölçüde iyileştirilmiş sorgu performansı için arama). Bu tasarım, Fulcrum ve ElectrumX'in depolama ekonomisi yerine performansa öncelik vermesiyle, veritabanı mühendisliğinde depolama verimliliği ile sorgu hızı arasındaki dengeyi göstermektedir.