Přejít na obsah
Všechny články

Vychází Sukarix 0.4.0: vysoce propustné fronty v Redisu pro skutečně zatížené pipeline

autor: Ghazi Triki · 10 min čtení

V tomto článku

Oznámení o vydání

Atomické spouštění skriptů Lua, nativní deduplikace členství, strukturovaná telemetrie průběhu a striktní dependency injection. Zjistěte, jak Sukarix přináší podnikový výkon bez zbytečné zátěže frameworku a jak pohání náš real-time pipeline BigBlueButton Analytics.

Při budování kritických backendových systémů a streamovacích pipeline v reálném čase se počítá každá milisekunda a každý megabajt RAM. Moderní PHP se sice vyvinulo v jazyk se silným typováním a vysokou rychlostí, mnoho populárních PHP frameworků se ale vydalo opačným směrem: hromadí hluboké stromy dědičnosti, náročnou reflexi, nabobtnalé grafy závislostí a bootstrap o velikosti několika megabajtů, který dusí dlouho běžící CLI workery.

V RIADVICE budujeme architektury s vysokou souběžností pro platformy virtuálních tříd, analytické enginy v reálném čase a load balancery s vysokou dostupností. Potřebovali jsme framework, který spojí rychlost a jednoduchost mikroframeworků se strukturou podnikové úrovně, jakou vyžadují složité podnikové aplikace.

Tímto frameworkem je Sukarix. S hrdostí dnes oznamujeme vydání Sukarix 0.4.0, které přináší robustní engine front postavený na Redisu, navržený přímo pro vícestupňové pipeline.

Proč Sukarix? Zrodil se z reálných problémů v produkci

Sukarix nevznikl jako akademické cvičení. Je přímým výsledkem let inženýrské práce prověřené v produkčních prostředích s vysokým provozem: zpracování milionů telemetrických událostí WebRTC, průběžné migrace databází a směrování volání API přes vysoce zatížené reverzní proxy.

Sukarix stojí na ultrarychlém jádru Fat-Free Framework (F3), zachovává jeho bleskové směrování a minimální paměťovou stopu a přidává k němu moderní podnikové náležitosti:

  • Moderní architektura pro PHP 8.4+ a 8.5+: plná typová bezpečnost, striktní typování a čistý objektově orientovaný návrh.
  • Dependency injection (DI) a IoC bez zbytečné zátěže: dynamická inicializace procesorů založená na traitech, bez úzkých hrdel reflexe.
  • Integrované nástroje pro produkci: plnohodnotná integrace Monologu, ladění pomocí Tracy, migrace databází přes Phinx a testovací sada Statera.
  • Stabilita místo neustálých změn: navrženo tak, aby upgrady vyžadovaly minimum úprav a produkční provoz byl chráněn před nekompatibilními změnami API.
Funkce / metrikaSukarix 0.4.0Těžké frameworky (Laravel / Symfony)Holé mikroframeworky
Paměťová stopa (CLI / web)Velmi nízká (~2 až 4 MB)Vysoká (~15 až 35 MB)Velmi nízká (~2 až 3 MB)
Rychlost bootstrapu a směrováníPod jednu milisekunduVyšší režie (složitý middleware)Pod jednu milisekundu
Engine front pro pipelineNativní atomické Lua + deduplikaceObecná abstrakce front (vysoká režie)Žádný (ruční implementace)
Podnikové nástroje (migrace, DI, logy)Součástí a předkonfigurovanéSoučástíChybí / nutné skládat z částí
Složitost grafu závislostíŠtíhlé, pečlivě vybrané balíčky PSRDesítky hlubokých závislostíMinimální

Co je nového v Sukarix 0.4.0: aktualizace front

Sukarix 0.4.0 přináší jmenný prostor Sukarix\Queue, účelově navrženou architekturu vysoce propustných FIFO front v Redisu, optimalizovanou pro vícestupňové asynchronní zpracování.

Atomické spouštění Lua a automatická deduplikace

Běžné fronty nad seznamy v Redisu jsou náchylné k souběhům (race conditions) nebo duplicitním záznamům při selhání workerů. Sukarix to řeší tak, že FIFO seznamy v Redisu doplňuje doprovodnými množinami pro sledování členství, ovládanými atomickými skripty Lua v Redisu. Vložení položky, která už ve frontě je, automaticky nic nezmění, a worker ukončený uprostřed operace nikdy nemůže zanechat stav nekonzistentně rozdělený.

Počítání pokusů pro každou položku bez vnucených pravidel

Sukarix nevnucuje uvnitř enginu front pevná pravidla pro opakování nebo limity pro dead-letter. Místo toho poskytuje čítače pokusů pro každou položku v hashích Redisu. Vaše obchodní logika si tak zcela svobodně určí, zda se neúspěšná úloha zopakuje hned, odloží, odstaví ke kontrole, nebo přesune do dead-letter fronty.

Trait HasQueue s inicializací fail-fast

Služby, které fronty využívají, si jejich funkce snadno vloží pomocí traitu chování HasQueue. Pokud služba front není v injektoru zaregistrována, Sukarix při spuštění vyhodí srozumitelnou výjimku \LogicException a předejde tak záludným pádům na null pointer za běhu v produkci.

Strukturovaný QueueProgressLogger a logování do konzole CLI

Sukarix 0.4.0 přidává strukturované, strojově zpracovatelné logování událostí životního cyklu fronty (spuštění, průběh dávek, propustnost a dokončení). Obsah zpráv se sanitizuje (například se zaloguje jako array[3]), takže do logovacích systémů neunikají žádná citlivá data zákazníků. LogWriter navíc nově nabízí volitelné barevné logování do konzole pro sledování CLI workerů v reálném čase.

Ukázka kódu: pipeline workerů v praxi

PHP
// Worker implementation with HasQueue trait
namespace App\Workers;

use Sukarix\Behaviours\HasQueue;
use Sukarix\Behaviours\LogWriter;
use Sukarix\Core\Processor;

class EventIngestionWorker
{
    use HasQueue, LogWriter;

    public function __construct()
    {
        Processor::instance()->initialize($this);
    }

    public function consume(): void
    {
        while (null !== ($payload = $this->queueService->popFromQueue('queue.events.pending'))) {
            try {
                $this->processEvent($payload);
                $this->queueService->clearAttempts('queue.events.failed', $payload);
            } catch (\Throwable $e) {
                $attempts = $this->queueService->incrementAttempts('queue.events.failed', $payload);
                $this->logger->error('Failed processing item', ['attempts' => $attempts, 'error' => $e->getMessage()]);
            }
        }
    }
}

V produkci: pohání real-time pipeline BigBlueButton Analytics

Jak si Sukarix 0.4.0 vede pod skutečnou podnikovou zátěží? Stačí se podívat na platformu BigBlueButton Analytics od RIADVICE, náš analytický engine pro BigBlueButton pracující v reálném čase.

Rozsáhlé infrastruktury virtuálních tříd generují obrovský objem podrobných dat o událostech, a to napříč miliony souběžných událostí: zvukové a obrazové přenosy WebRTC, připojení a odchody účastníků, zprávy v chatu, interakce v anketách, tahy na tabuli, přechody mezi snímky a další. Spolehlivě přijímat tato data a nezaostávat přitom za živou výukou vyžaduje naprosto spolehlivý streamovací pipeline.

V pozadí koordinují fronty Redis v Sukarix 0.4.0 převod těžkých proudů surových událostí na strukturované datové sady uložené v databázi časových řad, s dashboardy zobrazovanými přes Apache Superset. Pipeline z toho přímo těží:

  • Žádný duplicitní příjem dat: deduplikace členství zabraňuje dvojímu započítání metrik, když servery posílají nadbytečné synchronizační pulzy.
  • Okamžité zotavení workerů: atomické transakce v Redisu zaručují, že restarty workerů ani škálování uzlů nikdy nepoškodí indexy front ani neztratí události ze schůzek.
  • Mimořádně úsporné využití prostředků: protože CLI workery Sukarix spotřebují jen zlomek RAM oproti jiným frameworkům, desítky souběžných workerů front pohodlně běží na skromných virtuálních strojích.
  • Pozorovatelnost při vysoké zátěži: strukturovaný QueueProgressLogger poskytuje okamžitý přehled o propustnosti workerů, dokončení dávek a diagnostice chyb přímo v kolektorech logů.

Škálujte svou infrastrukturu BigBlueButton s RIADVICE

Ať už pro svou univerzitu nebo organizaci potřebujete hotové real-time dashboardy BigBlueButton Analytics, vlastní vysoce výkonné pipeline pro zpracování dat, nebo konzultace k architektuře rozsáhlých clusterů BigBlueButton, RIADVICE je vám k dispozici.

Domluvte si předvedení nebo konzultaci

Upgrade na Sukarix 0.4.0

Sukarix 0.4.0 pouze přidává nové funkce a pro stávající aplikace nepřináší žádné nekompatibilní změny. Pokud provozujete Sukarix 0.3.x na PHP 8.4+, můžete okamžitě provést upgrade přes Composer:

composer update sukarix/sukarix

Úplné poznámky k vydání najdete v diskusích Sukarix na GitHubu.


Štítky: Sukarix, PHP 8.5, PHP framework, fronty v Redisu, asynchronní zpracování, BigBlueButton, analytika učení, EdTech, datový pipeline v reálném čase, RIADVICE, vysoce výkonné PHP, open source.

Sdílet tento článek