Výkonnost serveru

Aktualizováno: 1. února 2022

Sparrow Wallet se při správě transakčních dat spoléhá na protokol serveru Electrum.

Tento dokument poskytuje aktuální výkonnostní benchmarky pro různé implementace serveru Electrum s plným indexem na standardním hardwaru a na základě těchto zjištění diskutuje dva různé přístupy k implementaci.

Pozadí

Server Electrum funguje jako index adres bitcoinů a umožňuje uživatelům vyhledávat transakce spojené s danou adresou. Na rozdíl od referenční implementace Bitcoinu, která tuto funkci postrádá, servery Electrum tuto funkci nabízejí. Kompaktní blokové filtry sice mohou poskytovat podobné informace, nepodporují však transakce mempoolu a jsou méně efektivní.

Protokol serveru Electrum je nejrozšířenějším protokolem pro indexování adres bitcoinů. Tento benchmark se zaměřuje na úplné adresní indexy, které jsou klíčové pro ochranu soukromí, protože na serveru neukládají konkrétní údaje o peněžence. Pro optimální zabezpečení studeného úložiště by měly být všechny informace o peněžence obsaženy v souboru peněženky a po uzavření peněženky by měly být ze serveru odstraněny. Tento přístup vylučuje projekty jako BWT a EPS, které vyžadují ukládání adres peněženek na serveru.

MotivacePermalink

Tento referenční ukazatel vychází ze zprávy o výkonnosti společnosti Jameson Lopp z července 2020, avšak se dvěma klíčovými rozdíly:

  1. Místo serveru AWS používá Raspberry Pi 4, takže je vhodnější pro domácí uživatele.
  2. Používá aktuální sestavení projektů a po významných změnách je znovu testuje.

Díky těmto aktualizacím jsou benchmarky užitečné zejména pro uživatele Sparrow, kteří chtějí provozovat vlastní server Electrum na jednodeskovém počítači, a umožňují jim porovnat různé implementace a vybrat si tu, která nejlépe vyhovuje jejich potřebám. Výsledky poskytují praktické poznatky pro uživatele, kteří uvažují o vlastním hostování serveru Electrum v domácím prostředí.

Hardware

Tento benchmark používá hardware typický pro uživatele Sparrow, kteří dbají na soukromí: Raspberry Pi 4 (8GB model) s 64bitovým operačním systémem Ubuntu 21.10. Pro ukládání dat se používá 1TB externí USB SSD, kterému se dává přednost před HDD kvůli velké velikosti bitcoinového blockchainu a souvisejících indexů (přibližně 0,5 TB). Tato konfigurace odráží běžné konfigurace pro domácí uživatele a poskytuje relevantní údaje o výkonu pro ty, kteří zvažují vlastní hostování serveru Electrum na podobných sestavách jednodeskových počítačů.

Projekty

ElectrumX

ElectrumX, nástupce původního projektu serveru Electrum, byl přijat v roce 2017. Poté, co původní autor ukončil podporu blockchainu Bitcoin, vývojáři projektu Electrum vytvořili fork, který je nyní udržován na adrese https://github.com/spesmilo/electrumx.

Významnou výzvou u služby ElectrumX je počáteční vytváření indexu, které na testovacím hardwaru trvá přibližně týden. Uživatelé však mohou index sestavit na výkonnějším stroji a přenést jej na jednodeskový počítač. Klíčové body:

  • Aktuální velikost databáze: 75 GB
  • Vyžaduje txindex povolený v Bitcoin Core
  • Nejsou k dispozici žádné předkompilované binární soubory
  • Testovaná verze: ElectrumX 1.16

Index ElectrumX lze vytvořit na výkonnějším hardwaru a přenést, což nabízí flexibilitu uživatelům s omezenými výpočetními zdroji.

Electrs

Služba Electrs, která je určena spíše pro osobní použití než pro veřejné servery, má ve srovnání se službou ElectrumX nižší nároky na úložiště, ale vyšší využití procesoru. Je udržován na adrese https://github.com/romanz/electrs.

Klíčovou výhodou systému Electrs je rychlejší sestavení indexu, které na testovacím hardwaru trvá pouze 12-24 hodin. Díky této efektivitě se stal preferovanou volbou pro většinu předpřipravených balíčků uzlů. Klíčové body:

  • Aktuální velikost databáze: 32 GB
  • Nevyžaduje txindex na Bitcoin Core
  • Nejsou k dispozici žádné předkompilované binární soubory
  • Testovaná verze: Electrs 0.9.4

Výrazně kratší doba vytváření indexů a menší velikost databáze činí z Electrs atraktivní volbu pro osobní použití, zejména na hardwaru s omezenými zdroji.

Fulcrum

Fulcrum, moderní implementace v jazyce C++, nabízí vysoký výkon i přes větší nároky na diskový prostor. Udržovaná v https://github.com/cculianu/Fulcrum, je dosaženo rovnováhy mezi rychlostí indexování a provozním výkonem.

Indexování společnosti Fulcrum trvá na testovacím hardwaru 2-3 dny, což ji řadí mezi Electrs a ElectrumX, pokud jde o dobu sestavení. Po indexaci poskytuje výjimečný výkon. Klíčové body:

  • Aktuální velikost databáze: 102 GB
  • Vyžaduje txindex povolený v Bitcoin Core
  • Předkompilované binární soubory jsou k dispozici pro Linux (x86_64 a arm64) a Windows.
  • Testovaná verze: Fulcrum 1.6.0

Kombinace rozumné doby indexování a vynikajícího provozního výkonu činí z produktu Fulcrum přesvědčivou volbu, zejména pro uživatele, kteří mohou vyhovět jeho větším potřebám pro ukládání dat.

Electrs-esplora

Electrs-esplora, odnož systému Electrs, vytváří další indexy pro zvýšení výkonu podniku. Jeho vysoké datové nároky (přibližně 800 GB) jej však činí nevhodným pro testovací hardware. Klíčové body:

  • Extrémně velké nároky na úložiště (~800 GB)
  • Lze spustit s --lightmode příznak, který zmenší místo na disku na polovinu
  • I v úsporném režimu téměř vyčerpá 1TB disk v kombinaci s ~420GB blockchainem.

Rozsáhlé potřeby této implementace na úložiště přesahují typické konfigurace jednodeskových počítačů, takže je pro většinu domácích uživatelů nepraktická. Ačkoli nabízí výkonnostní výhody pro podnikové použití, jeho nároky na zdroje omezují jeho použitelnost v osobních nebo malých nasazeních.

addrindexrs

addrindexrs je další odnož systému Electrs, kterou backend Dojo používá pro načítání historických dat transakcí. Postrádá významné změny související s výkonem, které by ospravedlnily jeho zařazení jako samostatné implementace do tohoto srovnávacího testu. Tento fork si zachovává podobné vlastnosti jako původní projekt Electrs, takže je v tomto kontextu pro účely porovnání výkonu zbytečný.

Indexování

Výkonnost indexování se u těchto tří implementací výrazně liší:

ElectrumX: Nejpomalejší indexování (1 týden) kvůli jednovláknovému systému Python a pomalejšímu zpracování bloků. Jeho komplexní index však umožňuje škálovatelnější odezvy serveru bez častých dotazů na Bitcoin Core. Pro optimální výkon je zásadní 64bitový operační systém.

Volitelé: Nejrychlejší indexace (1 den), což je dáno menším, jednodušším indexem a optimalizovaným vyhledáváním a rozborem bloků. Tato rychlost má svou cenu: během provozu musí provádět reparse bloků, což může mít dopad na výkon u hlubších peněženek.

Fulcrum: Mírná doba indexace (2-3 dny), vytvoření o něco většího indexu než u ElectrumX, ale mnohem rychlejší. Jeho proces náročný na zdroje těží z nízkoúrovňové implementace jazyka. Na adrese . rychlá synchronizace může dále zvýšit rychlost indexování. Výsledný komplexní index vede k vynikajícímu provoznímu výkonu.

Každá implementace představuje kompromis mezi dobou indexování, velikostí indexu a provozní efektivitou, přičemž vyhovuje různým případům použití a hardwarovým možnostem.

Test

Tento benchmark vyhodnocuje dvě běžné zátěže serveru Sparrow pomocí velké peněženky (~3000 použitých adres):

  1. Počáteční načtení peněženky: Zaměřuje se na odběry adres, které umožňují Sparrow přijímat aktualizace pro transakce s adresami. Důležité je, že každý požadavek na odběr vrací hash všech ID transakcí a výšek bloků ovlivňujících danou adresu. Test měří čas potřebný k odběru všech adres peněženky.
  2. Obnovení peněženky: Simuluje načtení všech dat peněženky (transakcí a bloků) během ručního obnovení, které je nutné, pokud problémy s komunikací vedou ke špatným datům. Pro tento test jsou již zavedeny odběry adres.

Klíčové parametry testu:

  • Velká peněženka s ~3000 použitými adresami
  • Velikost stránky dávky 50 pro všechny servery
  • Měří dobu předplatného pro počáteční načtení
  • Měření doby načítání dat pro obnovení peněženky

Tento přístup poskytuje komplexní srovnání výkonu různých implementací serveru Electrum se zaměřením na reálné scénáře použití v Sparrow Wallet.

Test 1: Počáteční zatížení (přihlášení k odběru adres)

Test Studený start Běh 1 Běh 2 Běh 3
ElectrumX 52655 ms 40721 ms 54143 ms 49011 ms
Electrs 322386 ms 393303 ms 384036 ms 427722 ms
Fulcrum 2333 ms 1413 ms 1472 ms 1413 ms
  • Fulcrum: Nejrychlejší (průměr ~1660 ms)
  • ElectrumX: Středně těžký (avg ~49,133 ms)
  • Zvolení: Nejpomalejší (avg ~381,862 ms)

Fulcrum překonává ElectrumX 22x a Electrs ~300x při počátečním zatížení peněženky.

Test 2: Obnovení peněženky (načtení dat)

Test Studený start Běh 1 Běh 2 Běh 3
ElectrumX 114466 ms 66175 ms 80133 ms 75489 ms
Electrs 17562 ms 11621 ms 11219 ms 11521 ms
Fulcrum 14152 ms 7854 ms 7382 ms 7442 ms
  • Fulcrum: Nejrychlejší (avg ~9,208 ms)
  • Volitelé: Sekunda (prům ~12,981 ms)
  • ElectrumX: Nejpomalejší (avg ~84,066 ms)

Fulcrum je 8× rychlejší než ElectrumX a 1,5× rychlejší než Electrs při obnovování peněženky.

V obou testech vykazuje společnost Fulcrum konzistentně lepší výkonnost a vykazuje výrazné výhody při počátečním zatížení a udržuje si náskok při obnovování peněženky. ElectrumX si vede průměrně při načítání, ale má problémy s obnovováním. Electrs je sice pomalý při počátečním načítání, ale při obnovování vykazuje konkurenceschopný výkon.

Diskuse

Sparrow Wallet se při správě transakčních dat spoléhá na protokol serveru Electrum. Tento dokument porovnává výkonnost plně indexovaných implementací serveru Electrum na standardním hardwaru se zaměřením na Raspberry Pi 4 s 8 GB RAM a 1TB externím USB SSD. Zkoumá implementace ElectrumX, Electrs a Fulcrum.

ElectrumX, udržovaný na adrese https://github.com/spesmilo/electrumx, trvá sestavení 75GB indexu na testovacím hardwaru přibližně týden a vyžaduje, aby byl v jádře bitcoinu povolen txindex. Electrs, určený pro osobní použití https://github.com/romanz/electrs, vytvoří 32GB index za 12-24 hodin, aniž by vyžadoval txindex. Fulcrum https://github.com/cculianu/Fulcrum vytvoří index o velikosti 102 GB za 2-3 dny, vyžaduje txindex a nabízí předkompilované binární soubory.

Při testování byla použita velká peněženka (~3000 adres) pro měření počátečního načítání (odběry adres) a obnovování peněženky (načítání dat). Výsledky ukazují, že Fulcrum výrazně překonává ostatní, je 22x rychlejší než ElectrumX a ~300x rychlejší než Electrs při počátečním načítání a 8x rychlejší než ElectrumX a 1,5x rychlejší než Electrs při obnovování.

Rozdíl ve výkonu systémů Fulcrum a Electrs při počátečním načítání (1,4 sekundy oproti 6 minutám) vyplývá z jejich rozdílných přístupů k ukládání dat. Electrs ukládá minimální množství dat, což vyžaduje rozsáhlé načítání a analýzu bloků při každém načtení peněženky. U testovací peněženky to znamenalo opakované zpracování 3,5 GB bloků, což způsobilo vysoké zatížení procesoru a potenciální výpadky odezvy na jednodeskových počítačích. ElectrumX a Fulcrum udržují rozsáhlé indexy adres, což umožňuje efektivní vyhledávání dat. Tento přístup v kombinaci s transakčním indexem jádra Bitcoinu umožňuje vyšší výkon společnosti Fulcrum.

Implementace C++17 společnosti Fulcrum poskytuje konzistentní rychlost napříč platformami, zatímco architektura ElectrumX založená na Pythonu vykazuje nekonzistentní výkon a vyšší využití procesoru. Tato zjištění poukazují na kompromisy mezi velikostí indexů, rychlostí dotazů a využitím zdrojů v implementacích serverů Electrum, přičemž Fulcrum nabízí nejlepší rovnováhu pro většinu uživatelů.

Závěr

Tento benchmark ukazuje, že Fulcrum je optimální implementací serveru Electrum pro uživatele Sparrow Wallet.

I přes o něco delší počáteční dobu indexování ve srovnání s indexem Electrs nabízí komplexní index společnosti Fulcrum lepší škálovatelnost a výkon.

S rostoucí hloubkou peněženek a klesajícími náklady na úložiště převažují výhody systému Fulcrum v rychlosti dotazů, spolehlivosti a životnosti hardwaru nad jeho většími nároky na diskový prostor.

Zatímco Electrs může vyhovovat scénářům s velmi omezeným diskovým prostorem a malou hloubkou peněženky, Fulcrum se doporučuje jako ideální server pro Sparrow, který poskytuje nejlepší rovnováhu mezi výkonem a využitím prostředků pro většinu uživatelů.

Technická poznámka
Efektivní indexování adres na serverech Electrum zahrnuje strategické techniky ukládání dat. Fulcrum a ElectrumX používají skriptové hashovací klíče (32, resp. 11 bajtů), které mapují na čísla transakcí (tx_num). Tato stránka tx_num představuje pořadí transakce v blockchainu a slouží jako kompaktní identifikátor. Systémy udržují soubor txids objednané tx_num, což umožňuje rychlé txid vyhledávání. Uchovávají také pole v paměti mapující výšku bloku na kumulativní počet transakcí, což umožňuje rychlé vyhledávání výšky bloku. Tento přístup je výměnou za zvýšené úložiště (např. 21 GB navíc u ElectrumX pro txid lookup), čímž se výrazně zlepšil výkon dotazů ve srovnání s metodou minimálního ukládání Electrs. Tento návrh ilustruje rovnováhu mezi efektivitou ukládání a rychlostí dotazů v databázovém inženýrství, přičemž společnosti Fulcrum a ElectrumX dávají přednost výkonu před úsporností ukládání.