Yandex zveřejnil zdrojový kód rámu uživatelské zobrazení, který vám umožňuje vytvářet vysoce zatížené aplikace C++, které pracují v asynchronním režimu. Rám byl testován na nahrávání na úrovni Yandex a používá se ve službách, jako jsou Yandex Go, Lavka, Delivery, Market a fintech projekty.
uživatelské zobrazení nejlépe se hodí pro vývoj aplikací s architekturou mikroslužeb. Zpočátku značkanebo byl vyvinut pro Yandex Taxi, s jeho pomocí se tým změnil z monolitické aplikace na architekturu, která umožňuje vyvíjet samostatné nezávislé komponenty (mikroslužby) a používat je v různých aplikacích.
Dnes oznamujeme vydání uživatelského rámce s otevřeným zdrojovým kódem pro vytváření aplikací s vysokou zátěží. Pro nás je to důležitý způsob, jak sdílet zkušenosti s vývojem mikroslužeb, které jsme nashromáždili. Zde je odkaz na úložiště GitHub se zdrojovým kódem, dokumentací, ukázkami, šablonou pro vytváření vlastních služeb (s konfigurací CI, sestavovacím a testovacím prostředím) a službou dynamické konfigurace. To vše je uvolněno pod licencí Apache 2.0.
Mikroslužby jsou autonomní, takže aplikace založená na takové architektuře se snadno aktualizuje a přidává do ní nové funkce. Proto lze mikroslužbu pro vyhledání řidiče pro objednávky Taxi použít pro podobný úkol, například najít kurýra pro plnění objednávek Yandex Delivery. Totéž lze provést s výpočtem času příjezdu řidiče nebo kurýra a mnoha dalšími úkony.
Rámec byl původně vytvořen s důrazem na spolehlivost a pohodlí, a uvnitř poskytuje vše, co potřebujete pro vývoj, diagnostiku, monitorování, ladění a experimentování. Uživatel například navrhuje, jak opravit chyby ve fázi sestavení, ví, jak pracovat s různými databázemi, měnit parametry za běhu atd.
Ohledně složení je zmíněno, že jsou zahrnuty ovladače pro asynchronní práci s DBMS (MongoDB, PostgreSQL, Redis, ClickHouse, MySQL), klienti a servery, které pracují asynchronně pro různé protokoly (HTTP, HTTPS, GRPC, TCP, UDP, TLS), nízkoúrovňová primitiva pro správu synchronizace a přístupu k funkcím systému a také komponenty na vysoké úrovni pro práci s mezipamětí, úlohami, distribuovanými zámky, trasováním, metrikami, statistikami a daty ve formátech JSON/YAML/BSON a navíc podporuje změnu konfigurace služby za běhu, bez jejího zastavení.
Co se týče nevýhod o monolitické architektuře jsou zmíněny následující:
- Konsolidace veškerého kódu v rámci monolitu. S velkou kódovou základnou může sestavení a testování trvat hodiny a nasazení může trvat celý den.
- Úzká interakce různých částí kódu. Musíte vynaložit hodně úsilí na kontroly kódu, aby se rozhraní k různým částem monolitu nestaly nepořádkem.
- Křehkost. Změna v jednom modulu může přerušit jiný modul.
- Rozmazané oblasti odpovědnosti. Během procesu vývoje se mnoho částí kódu zobecní, začnou je používat různé týmy, a to je dobře. Ale ve výsledku není jasné, kdo je zodpovědný za výsledný modul: první autoři; ti, kteří provedli nejvíce úprav; nebo ti, kteří nejaktivněji využívají modul v kódu.
Dříve Yandex převedl své další klíčové technologie ve formě otevřených projektů, například systém správy distribuovaných databází YDB, který je schopen zpracovat miliony požadavků za sekundu, a také knihovnu strojového učení CatBoost, kterou Yandex používá ve vyhledávání a další služby.
Konečně pro ty, kteří se o tom chtějí dozvědět víceUpozorňujeme, že Userver je aktuálně podporován pro Ubuntu, Debian, Fedora, Arch, Gentoo, systémy macOS, x86, x86_64, AArch64, architektury Arm, kompilátory GCC 8+ a Clang 9+, standardy C++17, C+++20, C ++23.
Uživatelský kód je napsán v C++ a Je otevřeno pod licencí Apache 2.0 a lze jej konzultovat z následující odkaz.