图片

V této třídílové sérii odhalíme technické úspěchy, které mohou výrazně zlepšit zpracování dat aplikací běžících na Internet Computer Protocol (ICP).

Tato aktualizace je milníkem Stellarator v plánu ICP a je nyní propagována po celé síti. Stellarator je průlom v oblasti trvalosti dat na řetězci, což významně zvyšuje škálovatelnost a zpracovatelskou kapacitu pro složité aplikace bohaté na data, které byly dříve omezeny systémovými limity.

Tento pokrok umožňuje vývojářům vytvářet složité aplikace vyžadující zpracování velkých objemů dat, což přináší nové úrovně užitečnosti blockchainové technologie.

V druhé části této série nás Luc Bläser seznámí s vylepšenou ortogonální trvalostí Motoko; pokud jste zmeškali první část o trvalosti dat, můžete ji najít zde.

Jednoduché, bezpečné, rychlé: Vylepšená ortogonální trvalost Motoko

Motoko zavedl vylepšenou ortogonální trvalost, což je jedinečná funkce navržená tak, aby zmírnila zátěž programátorů při práci se stabilní pamětí tím, že poskytuje jednoduchý, bezpečný a rychlý mechanismus aktualizace.

Motoko vždy dokáže automaticky zachovat stav programu během aktualizace, aniž by bylo potřeba jakýkoli další kód pro zajištění trvalosti; bohužel, předchozí implementace této funkce nebyla škálovatelná pro velká nebo hluboce vnořená data.

Tato funkce byla nyní výrazně posílena z hlediska bezpečnosti, výkonu a škálovatelnosti; klíčovou inovací je, že se vyhneme přenosu stavu do stabilní paměti tím, že jednoduše zachováme hlavní paměť namísto jejího vymazání.

Běhový systém nyní zajišťuje konzistenci dat při aktualizaci velmi efektivním způsobem, bez ohledu na velikost paměti; nakonec jsme přešli z 32 bitů na 64 bitů hlavní paměti, což povede k rozšíření na velké množství trvalých dat.

Pozadí

Aktualizace kontejneru představuje na Internet Computer výzvu, která obvykle zahrnuje značnou složitost, náklady a určité riziko ztráty dat; ačkoli hlavní paměť kontejneru (také známá jako paměť WebAssembly) je mezi transakcemi trvalá, v minulosti byla při aktualizaci vymazána, což byl docela umělý krok, protože paměť již na Internet Computer má záložní soubory.

Tento jev vyplývá z toho, že běžné programovací jazyky nebyly při návrhu zamýšleny s ohledem na trvalost: přeuspořádávají struktury paměti během překladu nebo běhu nekontrolovaným způsobem a nemohou jednoduše použít paměť starší verze k obnovení vykonávání upraveného programu.

Programátoři musí proto výslovně používat API pro stabilní paměť nebo speciální stabilní datové struktury k uchování dat během aktualizace, což je podobné tradičním počítačovým architekturám, které poskytují volatilní hlavní paměť a trvalé pomocné úložiště, ale to má za následek zvýšení složitosti vývoje software (myslete na mapovače objektů a databáze atd.).

Na rozdíl od toho, v Motoko máme plnou kontrolu nad kompilátorem a běhovým systémem, takže máme také plnou kontrolu nad rozložením paměti, což umožňuje podporu ortogonální trvalosti v Motoko, a to i během aktualizace.

Proto mohou programátoři Motoko snadno vyvíjet jakoukoli datovou strukturu (prvního řádu) v rámci standardních jazykových konceptů, aniž by museli používat explicitní stabilní paměť, specializované stabilní datové struktury nebo jiné abstrakce podobné databázím; běhový systém automaticky zachová potřebné objekty.

Dříve byl běhový systém Motoko schopen realizovat ortogonální trvalost tím, že serializoval a deserializoval trvalé objekty do stabilní paměti, což vedlo k vážným problémům se škálovatelností a výkonem, protože proces serializace/deserializace byl velmi nákladný a mohl dokonce překročit limit instrukcí, což nakonec bránilo aktualizaci; tyto nedostatky činily jeho použití nepraktickým pro větší aplikace, což je důvod, proč jsme přepracovali podporu ortogonální trvalosti v Motoko.

Změnou Internet Computer a běhového systému Motoko jsme dosáhli škálovatelných aktualizací, aniž bychom potřebovali nákladnou serializaci a deserializaci v pomocném prostoru stabilní paměti; místo toho jednoduše zachováváme trvalost hlavní paměti během aktualizace a zároveň rozšiřujeme adresní prostor ortogonální trvalosti na 64 bitů, aby bylo možné (v budoucnu) rozšířit na stejnou kapacitu, jakou poskytuje 64bitová stabilní paměť.

Vylepšená ortogonální trvalost

Naším cílem je zjednodušit vývoj softwaru na Internet Computer a zmírnit zátěž programátorů při práci se stabilní pamětí; proto byl Motoko optimalizován pro trvalost na Internet Computer, zatímco umožňuje jednoduché, bezpečné a rychlé aktualizace:

  • Jednoduché: prostřednictvím ortogonální trvalosti (stabilní proměnné v Motoko) bude jakákoliv přenositelná struktura prvního řádu automaticky trvalá během aktualizace, aniž by byla potřeba stabilní paměť nebo stabilní datové struktury.

  • Bezpečnost: Během aktualizace systém přísně kontroluje typovou kompatibilitu a podporuje různé změny dat pomocí implicitní migrace, jakákoli složitější migrace může být realizována pomocí vlastního kódu, což může zabránit jakémukoli poškození dat nebo nedorozumění na úrovni paměti.

  • Rychlost: Aktualizace se stala extrémně rychlou, protože hlavní paměť je při aktualizaci jednoduše zachována, aniž by bylo nutné ji kopírovat do stabilní paměti nebo ji z ní kopírovat; hlavní paměť byla rozšířena na 64 bitů, aby bylo možné ji v budoucnu rozšířit na stejnou velikost jako stabilní paměť.

Přehled návrhu

Jako předpoklad pro vylepšenou ortogonální trvalost byl rozšířen Internet Computer Protocol, aby podpořil uchování hlavní paměti napříč aktualizacemi a 64bitovou hlavní paměť založenou na návrhu WebAssembly Memory64.

Díky návrhu vlastního kompilátoru a běhového systému Motoko definuje neměnné rozložení paměti, ve kterém jsou všechny objekty přiděleny na dynamické haldě a dodávány s dostatečnými metadaty, které umožňují nové verzi programu bezpečně získat stav předchozí verze.

Z tohoto důvodu se pasivní datové segmenty WebAssembly ukázaly jako užitečné, protože umožňují odložení přidělení statických dat programu (např. textových řetězců) v běhovém systému bez nutnosti uchovávat statické adresní rozsahy.

Dokonce během procesu aktualizace zachováme stav inkrementálního garbage collectoru (GC), což znamená, že aktualizace může probíhat kdykoli, aniž by bylo nutné čekat na dokončení běhu GC.

Aby bylo zajištěno přísné zabezpečení paměti a typů, běhový systém uchovává typy aktuální verze programu a používá tyto informace k kontrole kompatibility paměti při pokusu o aktualizaci na novou verzi programu.

Protože tato kontrola závisí pouze na počtu typů a nikoli na počtu objektů, aktualizace probíhá extrémně rychle a lze ji rozšířit na libovolnou velikost paměti; některé migrace dat (např. přidání nebo odstranění stabilních proměnných, zvyšování typů, přidávání variantních možností atd.) budou automaticky podporovány, zatímco jakékoli složitější migrace lze programově provést manuálně, přičemž se stále chrání typová bezpečnost.

Motoko realizuje automatickou migraci dat ze staré tradiční trvalosti na vylepšenou ortogonální trvalost; aby umožnil zásadní změny v rozložení paměti, které by se mohly v budoucnu objevit (očekáváme, že k tomu dojde zřídka), zahrnuje Motoko také mechanismus pomocné trvalosti založený na serializaci do stabilní paměti a algoritmus pro replikaci grafu, jakož i neomezené deterministické časové úseky, které nejsou omezeny žádnými instrukčními limity Internet Computer Protocol.

Více podrobností o vylepšené ortogonální trvalosti, jejím návrhu, implementaci, scénářích migrace dat a hodnocení výkonu najdete v našem nedávno zveřejněném článku (Chytřejší aktualizace smluv pomocí ortogonální trvalosti).

Produkční propagace

Prvním krokem je, že vylepšená ortogonální trvalost může být použita jako volitelná funkce, která může být aktivována pomocí volby kompilátoru '--enhanced-orthogonal-persistence'; příslušné parametry mohou být specifikovány v 'dfx.json' takto:

图片

Motoko automaticky migruje ze staré 32bitové klasické trvalosti na vylepšenou ortogonální trvalost, ale mějte na paměti, že zpětný krok z EOP na 32bitovou klasickou trvalost není podporován.

V aktuální verzi, i když jsme přešli na 64 bitů, Internet Computer poskytuje pouze 4 GB hlavní paměti, což je pouze opatrné opatření první fáze; dodržujeme způsob vydávání, který se vyhýbá riziku - začínáme z malého a postupně zvyšujeme kapacitu.

Ve skutečnosti se očekává, že kvůli přechodu na 64 bitů a počátečnímu omezení 4 GB bude čisté využití paměti v počáteční fázi nižší než u 32 bitů (protože velikost ukazatele se zdvojnásobila); náklady na instrukce pro přístup k 64bitové paměti se také zvýšily, aby se opatrně pokryly náklady na hardware, což by se v budoucnu mohlo snížit.

Ale nejdůležitější je, že aktualizace se stanou velmi rychlými a již nedosáhnou limitů instrukcí Internet Computer, i když se maximální využití haldy (také s ohledem na to, že není již potřeba aktualizační háček).

Dalším krokem je shromáždit zpětnou vazbu a potenciálně zlepšit systém a rozšířit kapacitu paměti; plánujeme zavést vylepšenou ortogonální trvalost jako výchozí režim.

Závěr

Vylepšená ortogonální trvalost Motoko umožňuje vývojářům Internet Computer soustředit se na jejich základní aplikace, aniž by se museli obávat stabilní paměti.

To nejen umožňuje dosáhnout jednoduché a bezpečné trvalosti, ale také výrazně snižuje náklady na aktualizaci a přístup k datům na Internet Computer.

Zvýšená ortogonální trvalost může být dosažena pouze prostřednictvím vlastního kompilátoru a běhového systému, stejně jako máme nyní pro Motoko.

Další informace

Luc Bläser, Claudio Russo, Gabor Greif, Ryan Vandersmith a Jason Ibrahim, Chytřejší aktualizace smluv pomocí ortogonální trvalosti, VMIL 2024:

  • https://dl.acm.org/doi/10.1145/3689490.3690401

Příspěvek na fóru DFINITY - Beta testování vylepšené ortogonální trvalosti:

  • https://forum.dfinity.org/t/beta-testing-motoko-s-enhanced-orthogonal-persistence-eop/35787

Dokumentace - Vylepšená ortogonální trvalost Motoko:

  • https://internetcomputer.org/docs/current/motoko/main/canister-maintenance/orthogonal-persistence/enhanced

Dokumentace - Stabilní proměnné, aktualizace a migrace dat v Motoko:

  • https://internetcomputer.org/docs/current/motoko/main/canister-maintenance/upgrades

Jsme rádi, že jsme dostali vaši zpětnou vazbu, prosím, sdílejte své myšlenky na kanálu DFINITY Developers X nebo v repozitáři Motoko na GitHubu.

Zítra se připojte k naší cestě Stellarator, část 3, a zjistěte, jak zvýšit propustnost příchozích zpráv s Kamil Popielarz a Yvonne-Anne Pignolet.

图片

#Motoko #ICP #DFINITY

Obsah IC, který vás zajímá

Technologický pokrok | Informace o projektu | Globální akce

Sledujte kanál IC Binance

Zůstaňte informováni