V této sérii, která se skládá ze tří částí, odhalíme technické úspěchy, které mohou významně zlepšit zpracování dat aplikací běžících na Internet Computer Protocol (ICP).
Tento upgrade je milníkem v mapě ICP a právě se šíří celou sítí. Stellarator je průlom v ukládání dat na blockchainu, což umožňuje každému subnetu mít více než 1 TB paměti a přináší příležitosti pro datově bohaté aplikace, které byly dříve omezeny kapacitou úložiště.
Tento pokrok umožnil vývojářům vytvářet složité aplikace, které vyžadují zpracování velkých objemů dat, což přináší nové úrovně praktického využití blockchainové technologie.
Bez dalšího zdržování se pojďme pustit do této série a podívat se, jak ICP nyní používá aktualizaci Stellarator k ukládání dat.
Trvalost dat na Internet Computer
Tento blogový příspěvek přehledně vysvětluje, jak fungují kopie na strojích Internet Computer, zejména se zaměřením na nedávné změny v ukládání na bázi logických sloučených stromů (LSMT), které zahrnují implementaci více replikovaného úložiště na subnetech Internet Computer a umožňují jim lépe zvládat těžké pracovní zátěže.
Internet Computer se skládá ze subnetů a virtuálních strojů, které provádějí stejné kopírování na 13-40 strojích kopie. Každá kopie je zodpovědná za zpracování všech zpráv zaslaných do kontejneru na tomto subnetu a uchovává všechna data kontejneru, takže všechny kopie mají úplný a stejný stav subnetu.
Vývojáři mohou nasazovat kontejnery na Internet Computer, které jsou podobné inteligentním smlouvám na jiných blockchainech, ale mohou provádět obecnější výpočty a ukládat o několik řádů více dat než inteligentní smlouvy na jiných řetězcích.
Data uložená v kontejneru potřebují nakonec být uložena na nějakém fyzickém hardwaru. Díky nedávno zavedené vrstvě úložiště založené na LSMT a mnoha dalším optimalizacím a vylepšením mohou subnety na Internet Computer ukládat až 1 TB dat kontejnerů.
Většina dat kontejneru je uložena buď v jeho haldové paměti (až 4 GB při zápisu), nebo ve stabilní paměti (až 500 GB při zápisu) a existují i další formy dat související s kontejnerem, jako je kód kontejneru, zprávy v letu a různé informace, jako jsou seznamy kontrolérů a zůstatky Cycles.
Vrstva úložiště ICP překlenula mezeru mezi ukládáním kontejnerů (například haldové a stabilní paměti) a úložným hardwarem podkladových kopií (například disky a RAM).
V rámci milníku Stellarator prošla vrstva úložiště rozsáhlým přepracováním a znovuimplementací, aby mohl ICP čelit budoucím výzvám škálovatelnosti a vyřešit nejdůležitější úzká místa staré vrstvy úložiště. Všechny související změny byly nedávno dokončeny a Internet Computer nyní funguje s novou implementací vrstvy úložiště po dobu několika měsíců.
Zbytek tohoto blogového příspěvku se zaměřuje na proces přepracování vrstvy úložiště na strukturu logických sloučených stromů, který má za cíl eliminovat úzká místa spojená se skladováním a přinést lepší zážitek uživatelům a vývojářům kontejnerů, kteří potřebují úložný prostor.
Pro uživatele ICP je nejvýznamnější, že tato práce nedávno umožnila zvýšení replikovaného stavu na jednom subnetu na 1 TB. Kromě toho přepracování umožnilo Internet Computer lépe zpracovávat kontejnery s velkým množstvím dat.
Kontrolní body
Obecně platí, že vrstva úložiště Internet Computer kombinuje trvalé úložiště na disku a dočasné úložiště v RAM. Klíčovým konceptem toho, jak Internet Computer ukládá svůj stav, je takzvaný kontrolní bod, který představuje logický časový bod, kdy je celý stav subnetu uložen na disku.
Kontrolní body se vytvářejí s deterministickým způsobem každých 500 bloků nebo každých několik minut, což znamená, že všechny kopie zapíší stejný kontrolní bod ve stejné výšce. Kontrolní body jsou uloženy jako adresářové struktury na discích každého uzlu kopie, jak je znázorněno na následujícím (silně zjednodušeném) příkladu:
V této struktuře je každý kontejner uložen ve své vlastní podsložce a každá složka kontejneru obsahuje samostatné soubory pro haldovou paměť, stabilní paměť a další informace (například zprávy v letu). Data jsou uložena na disk ve formě kontrolních bodů z různých důvodů.
1. Trvalost dat: Strojové kopie mohou kdykoli restartovat, v kódu kopií mohou být softwarové chyby nebo může dojít k selhání hardwaru, nebo může být problém s napájením datového centra. V takovém případě lze znovu načíst nejnovější kontrolní bod.
Všimněte si, že i když se kontrolní body vytvářejí pouze každých 500 kol, kopie mohou znovu vytvořit stav pro nekontrolní výšky. Kopie potřebují pouze nejnovější kontrolní bod a všechny konečné bloky mezi kontrolním bodem a nejnovějším stavem. Vzhledem k tomu, že veškerá exekuce je deterministická, mohou být tyto bloky přehrány a zajišťuje se, že znovu vytvořený stav je zcela shodný. Potřebné bloky mohou být uloženy odděleně od kontrolního bodu na disku nebo mohou být získány z jiných kopií.
2. Synchronizace: Všechny (kopírované) zprávy jsou prováděny všemi kopiemi, takže pro jakoukoli danou výšku h by měly mít všechny kopie stejný stav. Protokol brání rozporům tím, že nejprve hashuje stav a poté provádí prahový podpis vygenerovaného hashe. Takové prahové podpisy mohou být vytvořeny pouze tehdy, pokud alespoň ⅔ (přesněji 2f + 1) kopií souhlasí se stejným hashem, aby subnet mohl pokračovat v provozu.
Subnety Internet Computer však mohou mít velký stav, v době psaní tohoto článku je omezen na 1 TB. Udržet maximálně 2,5 bloku za sekundu (což je v současnosti nejrychlejší subnet na Internet Computer) je neproveditelné, pokud se hashují tolik dat po každém bloku, proto Internet Computer hashuje pouze vybrané části stavu pro nekontrolní výšky, například zahrnuje některé základní informace z každého kontejneru, nedávné odpovědi na vstupní zprávy a zprávy XNet odeslané na jiné subnety.
Pro kontrolní body protokol hashuje celý stav, aby získal datovou strukturu nazvanou seznam, který se vypočítá hashováním všech souborů v adresáři kontrolního bodu a obsahuje hashe všech jednotlivých souborů rozdělených na bloky o velikosti 1 MB. Na konci výpočtu seznamu se vypočítá kořenový hash seznamu, který pokrývá všechny jednotlivé hashe v seznamu a poté je subnet podroben prahovému podpisu. Výpočet seznamu může trvat desítky sekund, ale tento úkol se provádí pouze každých 500 bloků a provádí se současně s exekucí kontejnerů na pozadí.
3. Synchronizace stavu: Internet Computer umožňuje měnit topologii subnetu prostřednictvím návrhů NNS. Když se uzly kopií připojí k subnetu, mohou získat nejnovější kontrolní bod od jiných uzlů kopií. Připomeňme, že kontrolní bod je soubor souborů, a proto, po ověření jeho kořenového hash a prahového podpisu subnetu, může protokol pro synchronizaci stavu získávat soubory po blocích a zároveň porovnávat hash získaných bloků s hodnotami v seznamu. Pokud jsou všechny kontroly úspěšné, mohou kopie dospět k závěru, že získaný stav odpovídá dohodnutému stavu jednotlivých subnetů v okamžiku kontrolního bodu. Pokud se kopie zpozdí z jiných důvodů a rozdíl od zdravého stavu je příliš velký pro čisté přehrání bloků, také se spustí synchronizace stavu.
4. Maximální velikost stavu: V současnosti je maximální velikost stavu 1 TB a RAM strojů uzlů kopií je 512 GB, takže není možné načíst celý stav do RAM. Internet Computer používá RAM hlavně k uchování nejnovějších dat, která dosud nebyla trvale uložena, a ke cacheování dat pro zvýšení výkonu.
PageMap a nekontrolní výšky
Protože se kontrolní body vytvářejí pouze každých 500 bloků, ICP potřebuje pro nekontrolní výšky poskytnout různé úložné prostory. Základní myšlenka, kterou vrstva úložiště sleduje, je, že tato data se ukládají na disk ve formě kombinace posledního kontrolního bodu, a veškeré změny, které následují, se ukládají v RAM.
PageMap je implementace většiny obsahu stavu subnetu, přičemž drtivá většina stavu subnetu je stav kontejneru, zejména haldová a stabilní paměť kontejneru.
V současnosti může kontejner mít maximálně 4 GB haldové paměti, 500 GB stabilní paměti a celkový limit stavu subnetu je 1 TB, ale všechny tyto limity se v budoucnu mohou změnit. Obě paměti lze číst pomocí kopírovacích (aktualizací) a nekopírovacích (dotazů) volání kontejneru a mohou být měněny pomocí kopírovacích volání.
Datová struktura PageMap je navržena k dosažení efektivního čtení a zápisu do paměti a k podpoře efektivního zápisu kontrolních bodů. Jedním konkrétním cílem je zajistit, aby výkon nesouvisel s celkovou velikostí paměti. Všimněte si, že název PageMap pochází z toho, že všechny čtení a zápisy jsou prováděny s granularity 4 KB, což odpovídá velikosti stránek používané podkladovým operačním systémem.
PageMap ukládá stav ve dvou vrstvách, první vrstva se nazývá úložiště a obsahuje soubory z předchozího kontrolního bodu, které reprezentují stav předchozí výšky kontrolního bodu. Druhá vrstva, inkrementy stránek, reprezentuje všechny změny od tohoto kontrolního bodu a je uložena v RAM.
Při čtení z PageMap se vracená data získávají buď z inkrementů stránek, nebo se čtou z kontrolních souborů (pokud chybí). Zapisování do PageMap se provádí úpravou inkrementů stránek pomocí nových dat.
Životní cyklus kontrolních bodů
Hlavním úkolem vrstvy úložiště je zapisovat kontrolní body na disk a udržovat aktuální stav všech PageMap. Při zápisu nového kontrolního bodu se všechny stránkové inkrementy obnovují na disk, čímž se aktualizuje uložená část všech PageMap.
Aby bylo zajištěno, že všechna data budou uložena, musí kopie vždy uchovávat nejnovější kontrolní bod, který byl podroben prahovému podpisu, což znamená, že není možné jednoduše přepsat starý kontrolní bod, protože jakákoli taková úprava by změnila předchozí kontrolní bod před úplným zápisem nového kontrolního bodu, což přináší riziko ztráty dat. Náklady na zapsání celého kontrolního bodu na disk (až 1 TB) každých 500 kol by byly velmi vysoké. Naopak, vytvoření nového kontrolního bodu zahrnuje tři základní kroky:
Zkopírujte starý kontrolní bod do dočasného složky, nazvané tip;
Upravte tip, aby reprezentoval data nového kontrolního bodu;
Přejmenujte tip na novou složku kontrolního bodu (aby bylo možné atomicky vytvořit nový kontrolní bod).
Prvním krokem může být nejdražší krok, protože čím větší je stav, tím déle trvá zkopírování souborů a tím větší je kontrolní bod.
To je přesně to, kde hrají svou roli kontrolní body a formát souborů logické struktury sloučených stromů. Použitím LSMT je tento krok levný a neprodlouží se s velikostí stavu. Naopak, před redesignem vrstvy úložiště LSMT byl tento krok pomalý a nepředvídatelný.
Logická struktura sloučených stromů
Logická struktura sloučených stromů (LSMT) je široce používaná datová struktura, zejména v databázích. Na Internet Computer se používá jako základ pro ukládání části PageMaps. Jedním z konkrétních problémů, který může vyřešit, je zjednodušení kroku "kopírování" životního cyklu kontrolního bodu, protože všechny soubory jsou zapisovány pouze jednou a nikdy nejsou měněny.
Pomocí LSMT se logický stav mění zápisem dalších překryvných souborů. Chcete-li přečíst hodnotu stránky, algoritmus nejprve zkontroluje nejnovější překryvný soubor, zda tato stránka existuje. Pokud ano, přečte hodnotu stránky z tohoto překryvného souboru. Jinak zkontroluje další starší překryvný soubor. V implementaci používané na Internet Computer, pokud stránka neexistuje v žádném překryvném souboru, je přečtena jako nula.
Níže uvedený obrázek ukazuje sadu tří překryvných souborů, které reprezentují stav kontejneru, svislé šipky ukazují různé čtení dat a soubory, které konečně čtou data.
Životní cyklus kontrolních bodů LSMT je následující:
Zpevněte všechny soubory z předchozího kontrolního bodu do dočasného složky, nazvaného tip;
Zapište nový soubor zabírající všechny změny od posledního kontrolního bodu;
Přejmenujte tip na novou složku kontrolního bodu (pro atomické provedení).
Klíčem je, že každý překryvný soubor je zapisován pouze jednou a nikdy není modifikován, což znamená, že je bezpečné nastavit více kontrolních bodů na disku a sdílet některé soubory mezi nimi pomocí tvrdých odkazů. Všimněte si, že pokud se životní cyklus kontrolního bodu pokusí upravit jakýkoli soubor, tento stejný proces nebude fungovat. Pokud má soubor více tvrdých odkazů, úprava jakéhokoli z nich změní data ve všech tvrdých odkazech, což narušuje dříve ověřený kontrolní bod.
Logická struktura sloučených stromů může uchovávat více verzí stejného rozsahu dat, což vede k nákladům na úložiště, které jsou definovány jako poměr velikosti všech překryvných souborů k logické velikosti reprezentovaných dat. Kromě toho mohou být data rozdělena do více souborů.
Jak se zvyšují náklady na úložiště nebo počet překryvných souborů, implementace vrstvy úložiště plánuje provádět slučování. Slučování reorganizuje data tím, že vezme sadu překryvných souborů a nahradí je jediným souborem, který obsahuje pouze nejnovější verzi každého datového bodu. Slučování se plánuje pro PageMap s obzvlášť vysokými náklady na úložiště nebo počtem souborů a provádí se na pozadí, aby nezasahovalo do provádění zpráv kontejneru.
Dříve používaný design s Reflinks
Původní vrstva úložiště Internet Computer se nezakládala na LSMT, od doby vzniku Internet Computer v roce 2021 až do roku 2024 se vrstva úložiště silně spoléhá na opětovné propojení.
Opětovné propojení, někdy nazývané copy-on-write, je součástí operačního systému souvisejících s kopírováním souborů. Některé souborové systémy tuto operaci podporují. Kopie Internet Computer používají souborový systém XFS, který tuto operaci podporuje. Opětovné propojení se liší od běžného kopírování souborů tím, že nekopíruje celý obsah souboru. Místo toho si souborový systém pamatuje, která data jsou sdílena mezi původním a novým souborem. Rozdíl mezi opětovným propojením a tvrdými odkazy je také v tom, že oba soubory mohou být upraveny nezávisle na sobě.
Ve starém návrhu vrstvy úložiště fungoval životní cyklus kontrolních bodů takto:
Znovu propojte všechny soubory z předchozího kontrolního bodu do dočasného složky, nazvaného tip;
Upravte soubory v tipu podle všech změn od posledního kontrolního bodu;
Přejmenujte tip na novou složku kontrolního bodu.
Jednou z potenciálních výhod je, že PageMap bude reprezentován jedním souborem v kontrolním bodě, čímž se vyhne nákladům na úložiště. Je však nutné znovu propojit odpovídající soubory předchozího kontrolního bodu místo tvrdého odkazu.
Výhody LSMT oproti Reflinks
V zásadě opětovné propojení zajišťuje rychlost tvrdých odkazů a dostupnost kopírování. Bohužel, jak se zvyšují datové potřeby Internet Computer (ať už I/O propustnost nebo celkové množství dat), stává se opětovné propojení výkonovým úzkým místem z různých důvodů.
1. Pomalá rychlost opětovného propojení: Doba potřebná k opětovnému propojení souborů se může značně lišit. V některých případech může trvat pouze několik sekund, ale v experimentu jsme také pozorovali, že opětovné propojení 370 GB trvá až 10 hodin. V logice starých kontrolních bodů Internet Computer vedlo 10 hodinového kroku opětovného propojení k celkovému zpoždění subnetu o 10 hodin.
Fragmentace může způsobit špatnou rychlost opětovného propojení. Interně udržuje souborový systém XFS datovou strukturu, která mapuje jednotlivé části souborů na skutečné datové bloky na disku. Když se náklady na procházení těchto datových struktur stanou příliš vysokými, objevuje se fragmentace a dochází k pomalé rychlosti opětovného propojení.
Fragmentace může být obzvlášť vyvolána následujícími sekvencemi: velké množství zápisů do souboru, poté jeho opětovné propojení, velké množství zápisů do jednoho z kopií, opětovné propojení atd. Bohužel, s ohledem na pracovní postup kontrolních bodů na Internet Computer, velké množství používaných kontejnerů tuto činnost přesně vyvolává.
Na druhou stranu, tvrdé odkazy mají konzistentní výkon, který není ovlivněn žádnými fragmentačními problémy.
Před zavedením logické struktury sloučených stromů bylo implementováno mnoho nouzových řešení, mezi které patří ruční defragmentace souborů (čtením souboru a jeho přepsáním) a zapisování souborů do větších souvislých částí. Obě tyto metody vedou k vyššímu zápisovému rozšíření a stále mohou způsobit přerušení trvající až 30 minut.
2. Maximální velikost stavu: Kromě velmi dlouhých časů opětovného propojení způsobených přílišnou fragmentací, i při středním stupni fragmentace se doba opětovného propojení zvyšuje úměrně celkovému množství dat uložených na subnetu. V předchozí implementaci vrstvy úložiště byl Internet Computer omezen na maximálně 700 GB na subnet, což do značné míry záviselo na tom, kolik střední fragmentace dat lze opětovně propojit za 20-30 sekund.
Při použití tvrdých odkazů se čas kontrolního bodu neprodlouží stejným způsobem s velikostí dat, což eliminuje tento úzký bod.
3. Špatná vícevláknová výkonnost: Jedním z cílů logiky kontrolních bodů je co nejvíce se vyhnout synchronizačním operacím, protože během kontrolních bodů se zastaví exekuce kontejneru. Je přirozené zvážit, zda je možné provádět opětovné propojení na pozadí, zatímco exekuce pokračuje (i když pomalu). Bohužel zkušenosti ukazují, že není možné současně provádět opětovné propojení a číst soubory, a proto provádění opětovného propojení paralelně pouze zpomaluje exekuci.
V novém návrhu vrstvy úložiště probíhá opětovné propojení paralelně s prováděním, aniž by se vzájemně zpomalovalo.
4. Cache: Jak již bylo uvedeno, čtení dat z paměti kontejneru bude zároveň číst data z RAM a z kontrolních souborů. Opakované čtení stejného souboru obvykle nezpůsobí nutnost číst data z fyzického disku nebo SSD vícekrát. Naopak, tato data budou cacheována operačním systémem. Bohužel, opětovné propojení narušuje cache, protože nejprve dojde k opětovnému propojení souboru a poté se čte z nové kopie, což nevyužívá cache. Proto na Internet Computer vidíme po zápisu kontrolního bodu obrovské (a pomalé) vrcholy diskového čtení, protože všechna čtení se přepínají na nové soubory. Kromě toho explicitní výpočty (tj. výpočty hash všech kontrolních souborů k dosažení konsensu) také těží z lepší cache.
Naopak, při použití tvrdých odkazů zůstanou všechny cache uchovány, jakékoli nedávno čtené nebo zapsané údaje, i když k nim došlo během předchozích intervalů kontrolních bodů, budou stále cacheovány, což umožňuje rychlé vyhledání.
Výsledky
Vrstva úložiště LSMT byla nasazena na všechny subnety Internet Computer během několika týdnů ve druhém čtvrtletí roku 2024. Následující obrázek ukazuje metriky před a po upgradu kódu kopií, přičemž červená svislá čára označuje čas aktivace vrstvy LSMT.
První obrázek ukazuje čas kontrolního bodu subnetu w4rem, který hostí kontejner pro integraci s bitcoinem. Ve srovnání s mnoha jinými subnety mají kontejnery hostované na bitcoinovém subnetu jak haldovou, tak stabilní paměť s těžkými zápisovými pracovními zátěžemi, což znamená, že fragmentace je zde obzvlášť znepokojujícím problémem.
Z pohledu metrik se čas kontrolního bodu zkrátil z více než 20 sekund na pouhých 1-2 sekundy, což je hlavně důsledkem eliminace kroku opětovného propojení, který zabíral většinu času 20 sekund.
Pro uživatele bitcoinových kontejnerů je výhodou rychlejší odezva. Během kontrolního bodu subnet nezpracovává žádné aktualizační volání nebo kopírovací dotazy. Pokud uživatel odešle aktualizační volání nebo kopírovací dotaz do bitcoinového kontejneru na začátku kontrolního bodu, bude trvat alespoň 20 sekund, než obdrží odpověď. Použití vrstvy LSMT může tuto nekonzistentní dobu odezvy v podstatě eliminovat.
Druhý obrázek ukazuje míru dokončení subnetu k44fs. Míra dokončení nebo rychlost bloků je počet bloků generovaných subnetem za sekundu.
Internet Computer omezuje počet příkazů prováděných za kolo na přibližně hodnotu, která odpovídá objemu práce, kterou může dokončit za sekundu, aby se zajistilo, že míra dokončení zůstane nad 1 blokem za sekundu.
Před přechodem na LSMT vrstvu úložiště se míra dokončení pravidelně snižovala, což bylo přímo spojeno s kontrolními body. Kontrolní body ovlivňují míru dokončení ze dvou hlavních důvodů. Prvním důvodem je čas potřebný k vytvoření kontrolního bodu, během kterého se neprovádí žádné bloky. Po přechodu se tento vliv sníží, protože doba kontrolního bodu je obvykle mnohem kratší.
Druhým důvodem je, že chování cache vrstvy LSMT je lepší. Především krok opětovného propojení ve staré implementaci vrstvy úložiště vedl k selhání cache. Proto po kontrolním bodu jakýkoli kontejner, který čte z paměti, způsobí, že kopie musí načíst tato data z disku, což je o několik řádů pomalejší než stejné data uložené v cache paměti RAM. Nová vrstva úložiště LSMT tento problém nezná.
Jak ukazují metriky, pokles míry dokončení po upgradu se výrazně zmenšil, což je důsledkem rychlejšího samotného kontrolního bodu, již není nutné opětovné propojení a souborová cache již není neplatná.
To znamená rychlejší dobu odezvy a vyšší propustnost pro uživatele kontejnerů na tomto subnetu.
Závěr
Přepracování vrstvy úložiště Internet Computer kolem struktury dat logické sloučené stromy je důležitou investicí do škálovatelnosti a výkonu platformy. Umožňuje nejen některé paměťově náročné pracovní zátěže, ale také umožňuje Internet Computer poskytovat kontejnerům větší stav.
V kontextu umělé inteligence a provozování velkých jazykových modelů na blockchainu jsou kontejnery manipulující s velkými daty obzvlášť zajímavé, protože tyto kontejnery spoléhají na velké úložiště dat a zároveň i na vysokou propustnost I/O.
Kromě toho také zakládá základy pro budoucí vylepšení, například zmírněním těžké pracovní zátěže na kritické cestě lepším využitím souběžnosti, čímž se zrychluje odezva Internet Computer. Zkušenosti z původní vrstvy úložiště naznačují, že vyhnout se opětovnému propojení je pro dosažení tohoto cíle zásadní, což LSMT datová struktura dokáže.
Máte rádi tento článek? Sdílejte své myšlenky na kanálu DFINITY Developers X a zítra se připojte k našemu druhému dílu cesty Stellarator, kde se s Lucem Bläserem budeme zabývat zlepšením ortogonální trvalosti.
Obsah IC, o který se zajímáte
Technologický pokrok | Informace o projektu | Celosvětové akce
Sledujte kanál IC na Binance
Buďte informováni o nejnovějších zprávách