Salt la conținut
Toate articolele

A fost lansat Sukarix 0.4.0: cozi Redis de mare debit, construite pentru pipeline-uri reale cu sarcină ridicată

de Ghazi Triki · 10 min de citit

În acest articol

Anunț de lansare

Execuție Lua atomică, deduplicare nativă prin apartenență, telemetrie structurată a progresului și injecție strictă de dependențe. Descoperiți cum oferă Sukarix puterea unei soluții enterprise fără balastul unui framework greoi și cum alimentează pipeline-ul nostru BigBlueButton Analytics în timp real.

Când construiți sisteme backend critice și pipeline-uri de streaming în timp real, fiecare milisecundă și fiecare megaoctet de RAM contează. Deși PHP-ul modern a devenit un limbaj puternic în materie de tipizare și viteză, multe framework-uri PHP populare au luat-o în direcția opusă: acumulează ierarhii de moștenire adânci, costuri mari de reflecție, grafuri de dependențe umflate și amprente de inițializare de mai mulți megaocteți, care sufocă workerii CLI de lungă durată.

La RIADVICE construim arhitecturi cu concurență ridicată pentru platforme de clasă virtuală, motoare de analiză în timp real și load balancere de înaltă disponibilitate. Aveam nevoie de un framework care să îmbine viteza și simplitatea micro-framework-urilor cu structura de nivel enterprise pe care o cer aplicațiile complexe pentru întreprinderi.

Acest framework este Sukarix. Astăzi suntem mândri să anunțăm lansarea Sukarix 0.4.0, care aduce un motor de cozi robust, bazat pe Redis, conceput special pentru sarcini de lucru în pipeline-uri cu mai multe etape.

De ce Sukarix? Născut din provocări reale de producție

Sukarix nu a fost conceput ca un exercițiu academic. Este rezultatul direct al anilor de inginerie verificată în medii de producție cu trafic mare: gestionarea a milioane de evenimente de telemetrie WebRTC, migrări continue de baze de date și rutarea apelurilor API prin reverse proxy-uri sub sarcină ridicată.

Construit peste nucleul ultrarapid Fat-Free Framework (F3), Sukarix păstrează rutarea fulgerătoare și amprenta minimă de memorie a F3, adăugând totodată elementele esențiale ale unei aplicații enterprise moderne:

  • Arhitectură modernă PHP 8.4+ și 8.5+: siguranță completă a tipurilor, tipizare strictă și un design orientat pe obiecte curat.
  • Injecție de dependențe (DI) și IoC fără balast: inițializare dinamică a procesoarelor pe bază de trait-uri, fără blocajele reflecției.
  • Instrumente de producție integrate: integrare de prim rang cu Monolog, depanare cu Tracy, migrări de baze de date cu Phinx și setul de testare Statera.
  • Stabilitate în locul schimbărilor continue: conceput astfel încât actualizările să necesite modificări minime, ferind sarcinile de producție de reproiectări ale API-ului care strică compatibilitatea.
Funcție / indicatorSukarix 0.4.0Framework-uri grele (Laravel / Symfony)Micro-framework-uri simple
Amprentă de memorie (CLI / web)Foarte redusă (~2-4 MB)Ridicată (~15-35 MB)Foarte redusă (~2-3 MB)
Viteza de inițializare și rutareExecuție sub o milisecundăCost mai mare (stivă complexă de middleware)Execuție sub o milisecundă
Motor de cozi pentru pipeline-uriLua atomic nativ + deduplicareAbstracție generică de cozi (cost ridicat)Inexistent (implementare manuală)
Utilitare enterprise (migrări, DI, jurnale)Incluse și preconfigurateIncluseLipsesc / trebuie asamblate din bucăți
Complexitatea grafului de dependențePachete PSR puține, atent selectateZeci de dependențe adânciMinimă

Ce aduce nou Sukarix 0.4.0: actualizarea cozilor

Sukarix 0.4.0 introduce spațiul de nume Sukarix\Queue, o arhitectură de cozi FIFO Redis de mare debit, construită special și optimizată pentru pipeline-uri de procesare asincronă cu mai multe etape.

Execuție Lua atomică și deduplicare automată

Cozile standard bazate pe liste Redis sunt expuse la condiții de concurență sau la intrări duplicate atunci când un worker cade. Sukarix rezolvă problema asociind listele FIFO Redis cu seturi de urmărire a apartenenței, gestionate prin scripturi Lua Redis atomice. Adăugarea unui element aflat deja în coadă nu are niciun efect, iar un worker oprit în mijlocul unei operații nu poate lăsa niciodată starea împărțită inconsecvent.

Urmărirea încercărilor pentru fiecare element, fără constrângeri impuse

În loc să impună în motorul de cozi limite rigide pentru reîncercări sau pentru coada de mesaje eșuate (dead-letter), Sukarix oferă contoare de încercări pentru fiecare element, în hash-uri Redis. Logica dumneavoastră de business rămâne complet liberă să decidă dacă o sarcină eșuată trebuie reîncercată imediat, amânată, pusă deoparte pentru analiză sau trimisă în dead-letter.

Trait-ul HasQueue cu inițializare fail-fast

Serviciile consumatoare își injectează ușor capabilitățile de coadă prin trait-ul de comportament HasQueue. Dacă serviciul de cozi nu este înregistrat în injector, Sukarix aruncă o excepție \LogicException clară la pornire, evitând căderi greu de depistat cauzate de pointeri nuli în producție.

QueueProgressLogger structurat și jurnalizare în consola CLI

Sukarix 0.4.0 adaugă jurnalizare structurată, ușor de procesat automat, pentru evenimentele din ciclul de viață al cozilor (pornire, progresul loturilor, debit și finalizare). Datele utile sunt igienizate (de exemplu, jurnalizate ca array[3]), pentru a garanta că nicio dată sensibilă a clienților nu ajunge în sistemele de jurnalizare. În plus, LogWriter oferă acum, opțional, jurnalizare colorată în consolă, pentru monitorizarea în timp real a workerilor CLI.

Exemplu de cod: pipeline-ul de workeri în acțiune

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()]);
            }
        }
    }
}

În producție: motorul pipeline-ului BigBlueButton Analytics în timp real

Cum se comportă Sukarix 0.4.0 sub o sarcină enterprise reală? Răspunsul este platforma BigBlueButton Analytics a RIADVICE, motorul nostru de analiză în timp real pentru BigBlueButton.

Infrastructurile de clasă virtuală la scară mare generează un volum enorm de date detaliate despre evenimente, de-a lungul a milioane de evenimente simultane: fluxuri audio/video WebRTC, intrări și ieșiri ale participanților, mesaje de chat, interacțiuni cu sondajele, trasee de desen pe tabla albă, schimbări de diapozitive și multe altele. Preluarea fiabilă a acestor date, fără a rămâne în urma claselor live, cere un pipeline de streaming solid ca stânca.

În culise, cozile Redis din Sukarix 0.4.0 coordonează transformarea fluxurilor mari de evenimente brute în seturi de date structurate, stocate într-o bază de date de serii temporale, cu tablouri de bord afișate prin Apache Superset. Pipeline-ul beneficiază direct de:

  • Zero preluări duplicate: deduplicarea prin apartenență împiedică numărarea dublă a indicatorilor atunci când serverele trimit impulsuri de sincronizare redundante.
  • Recuperarea instantanee a workerilor: tranzacțiile Redis atomice garantează că repornirea workerilor sau scalarea nodurilor nu corupe niciodată indecșii cozilor și nu pierde evenimente din întâlniri.
  • Eficiență masivă a resurselor: deoarece workerii CLI Sukarix consumă doar o fracțiune din RAM-ul cerut de framework-urile alternative, zeci de workeri de coadă rulează simultan fără probleme pe mașini virtuale modeste.
  • Observabilitate sub sarcină ridicată: QueueProgressLogger structurat oferă vizibilitate imediată asupra debitului workerilor, finalizării loturilor și diagnosticării erorilor, direct în colectoarele de jurnale.

Scalați-vă infrastructura BigBlueButton cu RIADVICE

Fie că aveți nevoie de tablouri de bord BigBlueButton Analytics în timp real, gata de utilizare, pentru universitatea sau organizația dumneavoastră, de pipeline-uri personalizate de procesare a datelor de înaltă performanță sau de consultanță de arhitectură pentru clustere BigBlueButton de mari dimensiuni, RIADVICE vă stă la dispoziție.

Programați o prezentare / o consultanță

Actualizarea la Sukarix 0.4.0

Sukarix 0.4.0 doar adaugă funcții și nu introduce nicio modificare incompatibilă pentru aplicațiile existente. Dacă rulați Sukarix 0.3.x pe PHP 8.4+, puteți face actualizarea imediat prin Composer:

composer update sukarix/sukarix

Consultați notele complete ale versiunii în Sukarix Github Discussions.


Etichete: Sukarix, PHP 8.5, framework PHP, cozi Redis, procesare asincronă, BigBlueButton, Learning Analytics, EdTech, pipeline de date în timp real, RIADVICE, PHP de înaltă performanță, open source.

Distribuiți acest articol

  • Disponibilitatea generală ZcaleRight 1.0.0
    BigBlueButton · 6 min de citit

    ZcaleRight 1.0.0: zece servere, administrate la fel de ușor ca unul

    ZcaleRight plasează sesiuni BigBlueButton în producție din 2019. Acum ajunge la versiunea 1.0.0, disponibilă pentru toți: toate cele 69 de funcționalități publicate deschis, un manual în interiorul produsului, un acord privind nivelul serviciilor în spatele lui și un site propriu.

  • Lansarea WebSummoner
    Open Source · 8 min de citit

    WebSummoner 1.0: Selenoid, readus la viață

    Șapte browsere actuale în Docker, un container pentru fiecare sesiune, înregistrări cu sunet: cum continuă WebSummoner proiectul Selenoid, arhivat din decembrie 2024, și de ce rulează în centrul propriei noastre infrastructuri de găzduire.