Hlavní Takeaways

  • Binance's Ledger ukládá zůstatky a transakce na účtech a zároveň umožňuje službám provádět transakce.

  • Vytváří podmínky potřebné pro vysokou propustnost, dostupnost 24/7 a přesnost dat na bitové úrovni.

Role Binance Ledger v zákulisí z ní dělá jednu z nejdůležitějších technologií Binance. Zde se dozvíte, jak přesně funguje a jaké problémy řeší při provozu největší světové kryptoburzy.

Přemýšleli jste někdy, co přesně vede Binance? S potřebou zpracovávat miliony transakcí denně napříč masivní uživatelskou základnou stojí za to podívat se na to, co má Binance pod pokličkou.

Základem technických operací Binance je její Ledger. Hlavní kniha ukládá zůstatky a transakce účtů a zároveň umožňuje službám provádět transakce.

Binance má vysoké požadavky na hlavní knihu

Jak si dokážete představit, požadavky na Ledger jsou vysoké, aby vyhovoval masivní poptávce uživatelů. Existují tři hlavní body, které je třeba vzít v úvahu:

  • Vysoká propustnost se schopností velkého množství TPS (transakcí za sekundu) ve špičce.

  • Dostupnost 24/7 bez prostojů.

  • Přesnost dat na bitové úrovni, bez ztráty finančních prostředků nebo transakčních chyb.

Podívejme se na příklad základního záznamu v hlavní knize. Zde je běžná transakce, při které účet 1 převede 1 BTC na účet 2.

Zůstatek před transakcí:

ČÍSLO ÚČTU

AKTIVUM

ZŮSTATEK

1

BTC

10

2

BTC

0,1

stůl 1

Zůstatek po transakci:

ČÍSLO ÚČTU

AKTIVUM

ZŮSTATEK

1

BTC

9

2

BTC

1.1

tabulka-2

V této transakci existují dva příkazy:

  1. Účet 1    -1 BTC

  2. Účet 2 + 1 BTC

Po provedení transakce budou uloženy dva protokoly zůstatků pro audit a odsouhlasení.

ČÍSLO ÚČTU

AKTIVUM

DELTA

TX_ID

ČAS

100 001

BTC

-1

tx-001

2022-01-01  01:02:03

100 002

BTC

+1

tx-001

2022-01-01  01:02:03

tabulka-3

Standardní průmyslové řešení

Jedno standardní průmyslové řešení Ledger je založeno na relační databázi. Vraťme se k předchozímu příkladu, dva příkazy transakce lze přeložit do dvou příkazů SQL a provést je v databázové transakci (tabulka-4).

zahájit transakci;

AKTUALIZACE zůstatku_1 nastavit zůstatek = zůstatek - 1

WHERE account_id=1 a aktivum = ‚BTC‘ a zůstatek - 1 >= 0;

Pokud je ovlivněna 0 řádek, pak rollback;

AKTUALIZOVAT zůstatek_2 nastavený zůstatek = zůstatek + 1

WHERE account_id=2 a aktivum = ‚BTC‘ a zůstatek + 1 >= 0;

Pokud je ovlivněna 0 řádek, pak rollback;

spáchat;

tabulka-4

Výhody řešení

  1. Je to docela jednoduché na implementaci.

  2. Pro zlepšení výkonu je snadné použít běžné techniky ladění databáze, jako je rozdělení čtení/zápisu a sharding.

  3. Pro vývojáře není těžké zotavit se z převzetí služeb při selhání a také monitorovat a udržovat komerční databázi.

Nevýhody řešení

  1. TPS prudce klesne, když nastanou závodní podmínky kvůli uzamčení řad.

  2. Je těžké horizontálně škálovat pro zlepšení výkonu.

Problém horkého účtu

Bohužel pro Binance, výše uvedené průmyslové řešení nesplňuje její vysoké požadavky. Když dojde k transakci, musí obsahovat zámky řádků každého zúčastněného řádku. Zatímco některé účty mají relativně málo transakcí k řešení, existují samozřejmě vytížené účty s mnoha souběžnými transakcemi. V tomto případě může pouze jedna transakce podržet zámek řádku účtu.

Ostatní transakce pak nemohou dělat nic jiného, ​​než čekat na uvolnění zámku. Tuto situaci nazýváme horkým problémem s účtem a interní testy ukazují, že TPS v této situaci klesne nejméně 10krát. Tento problém můžete vidět v tabulce 5 níže.

Příklad horkého účtu:

Tx 1 (převod 1 BTC z účtu 1 na účet 2)

Tx 2 (převod 2 BTC z účtu 1 na účet 3)

zahájit transakci;

zahájit transakci;

AKTUALIZACE zůstatku nastaveného zůstatku = zůstatek - 1

WHERE account_id=1 a aktivum = ‚BTC‘ a zůstatek - 1 >= 0;

(řádek uzamčen: account_id=1 a aktivum = ‘BTC’)

Pokud je ovlivněna 0 řádek, pak rollback;

AKTUALIZACE zůstatku nastaveného zůstatku = zůstatek - 2

WHERE account_id=1 a aktivum = ‘BTC’

a zůstatek - 2 >= 0;

Pokud je ovlivněna 0 řádek, pak rollback;

AKTUALIZACE zůstatku nastaveného zůstatku = zůstatek + 1

WHERE account_id=2 a aktivum = ‚BTC‘ a zůstatek + 1 >= 0;

Pokud je ovlivněna 0 řádek, pak rollback;

počkat zámek

spáchat;

počkat zámek

získat zámek, provést

AKTUALIZACE zůstatku nastaveného zůstatku = zůstatek + 2

WHERE account_id=3 a aktivum = ‚BTC‘ a zůstatek + 1 >= 0;

Pokud je ovlivněna 0 řádek, pak rollback;

spáchat;

tabulka-5

Řešení Binance's Ledger

Jak vyřešíme problém s horkým účtem?

Jedním z možných řešení našeho problému je inovativní převod vícevláknového modelu do jednovláknového režimu. Vyhnete se tak problému se závodními podmínkami a v důsledku toho nedojde k problému s horkým účtem.

Nový model závitu

Komunikace založená na zprávách

Po implementaci našeho nového modelu vláken je třeba vyřešit problém s komunikací. Vrstva stavového stroje je jednovláknová, ale síťová vrstva je vícevláknová, jak tedy mezi nimi efektivně komunikovat?

Disruptor [1] je dalším krokem v hádance. Vytváří vysoce výkonnou frontu bez uzamčení na základě návrhu kruhové vyrovnávací paměti.

Vysoká dostupnost

Doposud jsme dosahovali vysokého výkonu pomocí in-memory modelu a místního úložiště RocksDB [2]. Ale opět nastává nová výzva. Nyní se musíme postarat o vysokou dostupnost dat.

Pro zajištění konzistence dat mezi uzly používáme Raft Consensus Algorithm [3]. To znamená, že počet záloh dat se rovná počtu přítomných nevedoucích uzlů. Algoritmus také zajišťuje, že systém bude stále fungovat s alespoň polovinou uzlů v pořádku, což pomáhá poskytovat vysokou dostupnost služeb.

Role domén Raft:

  • Vůdce. Leader zpracovává všechny požadavky klientů a replikuje operaci všem následovníkům.

  • Následovník. Následovníci následují vůdce pro všechny operace. Pokud vůdce neuspěje, bude novým vůdcem zvolen jeden z následovníků.

  • Student. Studenti jsou nehlasující sledující, kteří odesílají každý záznam o změně idempotentu/transakce do jiných služeb.

Role domény Raft

CQRS (oddělení odpovědnosti za příkazový dotaz)

Dalším klíčovým kritériem, které chceme zajistit, je vyšší výkon zápisu do Ledgeru a schopnost pro rozmanitější podmínky dotazů. K tomu potřebujeme vytvořit různé domény. Doména raft poskytuje efektivnější zápis na základě rocksdb+raft a doména zobrazení naslouchá zprávám domény raft a ukládá je do relační databáze pro externí dotazy. Můžeme také implementovat segregaci odpovědnosti za dotazy na příkazy na architektonické úrovni.

Architektura knihy

Celková architektura

Podmínky mezi Raft a Ledger:

Vor

účetní kniha

replikované stavové stroje

uzly účetní knihy

Stát

Zůstatek

příkaz

transakce

tabulka-6

Zobrazit role domény

  • Střed účetní knihy raftů

Konzumujte zprávu vytvořenou studentem a uložte data transakcí a zůstatků v MySQL pro účely dotazování.

Zpracování žádosti

Požadavek na transakci nejprve projde síťovou vrstvou, vrstvou hlavní knihy (obslužný program požadavku) a vrstvou raftu (synchronizace protokolu raftu). Poté se vrátí zpět do vrstvy účetní knihy (stavový stroj), síťové vrstvy (obslužný program odezvy) a nakonec vrátí odpověď klientovi.

Data jsou předávána přes frontu mezi dvěma vrstvami.

  1. Síťová vrstva – Deserializuje požadavek RPC a umístí jej do fronty požadavků.

  2. Ledger Layer – Získejte požadavek z fronty a připravte kontext. Poté zařadí metadata požadavku do fronty raftů.

  3. Raft Layer – Získejte metadata požadavku z fronty raftů a synchronizujte je mezi všemi sledujícími. Poté zařadí výsledek do fronty aplikací.

  4. Ledger Layer – Získejte data z aplikační fronty a aktualizujte stavový stroj. Poté zařadí výsledek do fronty odpovědí.

  5. Síťová vrstva – Získejte výsledek z fronty odpovědí a vytvořte a serializujte data odpovědí, než je vrátíte klientovi.

Zpracování žádosti

Obnova dat

Každý uzel Ledger spustí obecný snímek na základě časového období. Kromě toho také implementujeme konzistentní snímek. Každý uzel se spouští se stejným indexem záznamu raftu, aby bylo zajištěno, že stavový stroj bude přesně stejný, když každý uzel spustí snímek. Snímek bude poté nahrán do S3 pro ověření pomocí Checker a jako studená záloha.

Když se Ledger restartuje, přečte místní snímek a znovu sestaví stavový stroj. Poté přehraje místní deník raftu a synchronizuje nejnovější deník od vedoucího, dokud nedosáhne nejnovějšího indexu. Pokud místní snímek nebo deník raftu neexistuje, bude získán od vedoucího.

Snímek a zotavení

Tolerance katastrof

Pro zlepšení dostupnosti a odolnosti proti chybám jsou uzly Ledger nasazeny v různých zónách. Dokud je více než polovina uzlů v pořádku, data se neztratí a převzetí služeb při selhání bude dokončeno během jedné sekundy.

I když selže celý cluster, což je velmi nízká pravděpodobnost, stále můžeme cluster obnovit prostřednictvím konzistentního snímku uloženého v Amazon S3 a získat nejnovější ztracená data prostřednictvím systému navazujícího na tok dat.

Odolnost proti chybám

Výkon

V následující tabulce jsou uvedeny hardwarové specifikace pro test výkonu

Komponent

Typ instance

Šířka pásma sítě (Gbps)

Šířka pásma EBS (Gbps)

Typ úložiště EBS

Vedoucí / následovník

M6i.4xvelký

16c64g

Až do 12.5

Nad 10

2T GP3 * 3 IOPS6000  625 MB/s

Student

M6i.4xvelký

16c64g

Až do 12.5

Nad 10

2T GP3 * 3 IOPS6000  625 MB/s

Lavice

C5,4xvelký

16c32g

Nad 10

4,750

Pouze kořenový svazek

Interní testy dokazují, že 4-uzlový cluster (jeden vedoucí, dva následovníci a jeden žák) dokáže zpracovat více než 10 000 TPS. Podle návrhu cluster zpracovává všechny transakce jednu po druhé. Neexistuje vůbec žádný zámek a závodní stav. Takže ve scénáři horkého účtu je TPS stejně vysoká jako v normálních scénářích.

Hot účet TPS

Následující obrázek ukazuje latenci každé transakce. Většina transakcí mohla být dokončena do 10 ms. Pomalejší transakce mohly být dokončeny do 25 ms.

Latence ms

Napájení našich služeb pomocí Binance Ledger

Jak jste viděli, odpověď tradičního odvětví na problém horkých účtů neuspokojuje potřeby Binance a jejích zákazníků. Použitím přístupu navrženého speciálně pro infrastrukturu Binance jsme skončili s jednou z nejhladších dostupných zkušeností s výměnou a produktem. Jsme rádi, že se s vámi nyní můžeme podělit o naše zkušenosti a doufáme, že lépe pochopíte, co znamená, že služba jako Binance funguje.

Další informace o naší technologické infrastruktuře naleznete v následujícím článku:

  • (Binance Blog) Využití MLOps k vytvoření kompletního procesu strojového učení v reálném čase

  • (Binance Blog) Seznamte se s CTO: Rohit uvažuje o krypto, blockchainu, Web3 a jeho prvním měsíci na Binance

Reference

[1] Disruptor LMAX

[2] RocksDB

[3] Raft Consensus Algorithm