Перейти до вмісту
Усі статті

Вийшов Sukarix 0.4.0: високопродуктивні черги Redis для реальних високонавантажених конвеєрів

автор: Ghazi Triki · 9 хв читання

У цій статті

Оголошення про випуск

Атомарне виконання Lua, вбудована дедуплікація за членством, структурована телеметрія прогресу та сувора ін’єкція залежностей. Дізнайтеся, як Sukarix дає корпоративну потужність без роздутого фреймворку і як він забезпечує роботу нашого конвеєра BigBlueButton Analytics у реальному часі.

Під час створення критично важливих серверних систем і потокових конвеєрів реального часу важить кожна мілісекунда й кожен мегабайт оперативної пам’яті. Сучасний PHP перетворився на потужну мову з типізацією та високою швидкодією, однак багато популярних PHP-фреймворків рухалися у протилежному напрямі: вони накопичили глибокі дерева успадкування, значні накладні витрати на рефлексію, роздуті графи залежностей і багатомегабайтне завантаження, яке душить довготривалі CLI-воркери.

У RIADVICE ми створюємо висококонкурентні архітектури для платформ віртуальних класів, аналітичних рушіїв реального часу та балансувальників навантаження високої доступності. Нам потрібен був фреймворк, який поєднує швидкість і простоту мікрофреймворків зі структурою корпоративного рівня, необхідною для складних корпоративних застосунків.

Цей фреймворк Sukarix. Сьогодні ми з гордістю оголошуємо про випуск Sukarix 0.4.0 з надійним рушієм черг на основі Redis, спеціально розробленим для багатоетапних конвеєрних навантажень.

Чому Sukarix? Народжений із реальних викликів робочого середовища

Sukarix не задумувався як академічна вправа. Він є прямим підсумком багаторічної інженерної роботи, перевіреної в бою в робочих середовищах з високим трафіком: обробка мільйонів подій телеметрії WebRTC, безперервні міграції баз даних і маршрутизація викликів API через високонавантажені зворотні проксі.

Побудований на надшвидкому ядрі Fat-Free Framework (F3), Sukarix зберігає блискавичну маршрутизацію та мінімальне споживання пам’яті F3, додаючи до них сучасні корпоративні основи:

  • Сучасна архітектура PHP 8.4+ і 8.5+: повна безпека типів, сувора типізація та чистий об’єктно орієнтований дизайн.
  • Ін’єкція залежностей (DI) та IoC без зайвого: динамічна ініціалізація процесорів на основі трейтів без вузьких місць рефлексії.
  • Інтегровані інструменти для робочого середовища: повноцінна інтеграція Monolog, налагодження з Tracy, міграції баз даних Phinx і набір для тестування Statera.
  • Стабільність замість постійних змін: оновлення потребують мінімальних змін, що захищає робочі навантаження від руйнівних переробок API.
Функція / показникSukarix 0.4.0Важкі фреймворки (Laravel / Symfony)Звичайні мікрофреймворки
Споживання пам’яті (CLI / веб)Наднизьке (~2-4 MB)Високе (~15-35 MB)Наднизьке (~2-3 MB)
Швидкість завантаження та маршрутизаціїВиконання менш ніж за мілісекундуВищі накладні витрати (складний стек middleware)Виконання менш ніж за мілісекунду
Рушій черг для конвеєрівВбудований атомарний Lua + дедуплікаціяЗагальна абстракція черг (високі накладні витрати)Відсутній (ручна реалізація)
Корпоративні утиліти (міграції, DI, журнали)Включено й попередньо налаштованоВключеноВідсутні / потрібне фрагментарне складання
Складність графа залежностейКомпактні, ретельно дібрані пакети PSRДесятки глибоких залежностейМінімальна

Що нового в Sukarix 0.4.0: оновлення черг

Sukarix 0.4.0 додає простір імен Sukarix\Queue: спеціально створену високопродуктивну архітектуру черг Redis FIFO, оптимізовану для багатоетапних конвеєрів асинхронної обробки.

Атомарне виконання Lua та автоматична дедуплікація

Стандартні черги на основі списків Redis схильні до станів гонитви або дублікатів під час збоїв воркерів. Sukarix розв’язує цю проблему, поєднуючи списки Redis FIFO із супутніми множинами для відстеження членства, які виконуються через атомарні скрипти Redis Lua. Додавання елемента, який уже стоїть у черзі, автоматично нічого не робить, а воркер, зупинений посеред операції, ніколи не залишить стан розщепленим і неузгодженим.

Облік спроб для кожного елемента без нав’язаних правил

Замість того щоб нав’язувати жорсткі обмеження на повторні спроби чи dead-letter усередині рушія черг, Sukarix надає лічильники спроб для кожного елемента в хешах Redis. Ваша бізнес-логіка зберігає повну свободу вирішувати, чи слід повторити невдале завдання негайно, відкласти його, залишити для перевірки або відправити в dead-letter.

Трейт HasQueue з ініціалізацією за принципом fail-fast

Сервіси-споживачі легко отримують можливості черг через трейт поведінки HasQueue. Якщо сервіс черг не зареєстровано в інжекторі, Sukarix під час запуску викидає зрозумілий \LogicException, запобігаючи важковловимим збоям через null-покажчики під час роботи в робочому середовищі.

Структурований QueueProgressLogger і журналювання в консоль CLI

Sukarix 0.4.0 додає структуроване, придатне для машинного розбору журналювання подій життєвого циклу черги (початок, прогрес пакетів, пропускна здатність і завершення). Корисне навантаження очищується (наприклад, записується як array[3]), що гарантує відсутність витоків чутливих даних клієнтів у системи журналювання. Крім того, LogWriter тепер підтримує необов’язкове кольорове журналювання в консоль для моніторингу CLI-воркерів у реальному часі.

Приклад коду: конвеєр воркера в дії

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

У робочому середовищі: конвеєр реального часу BigBlueButton Analytics

Як Sukarix 0.4.0 поводиться під реальним корпоративним навантаженням? Достатньо подивитися на платформу BigBlueButton Analytics від RIADVICE, наш аналітичний рушій реального часу для BigBlueButton.

Великі інфраструктури віртуальних класів генерують величезний обсяг детальних даних про події серед мільйонів одночасних подій: аудіо- та відеопотоки WebRTC, приєднання й вихід учасників, повідомлення в чаті, взаємодія з опитуваннями, траєкторії малювання на дошці, перемикання слайдів тощо. Щоб надійно приймати ці дані, не відстаючи від живих занять, потрібен надзвичайно стійкий потоковий конвеєр.

За лаштунками черги Redis у Sukarix 0.4.0 координують перетворення важких потоків сирих подій на структуровані набори даних, що зберігаються в базі даних часових рядів, а панелі відображаються через Apache Superset. Конвеєр безпосередньо виграє від:

  • Жодного дублювання під час прийому: дедуплікація за членством запобігає подвійному підрахунку метрик, коли сервери надсилають надлишкові синхронізаційні імпульси.
  • Миттєве відновлення воркерів: атомарні транзакції Redis гарантують, що перезапуски воркерів чи масштабування вузлів ніколи не пошкодять індекси черг і не призведуть до втрати подій зустрічей.
  • Величезна ефективність використання ресурсів: оскільки CLI-воркери Sukarix споживають лише частку оперативної пам’яті порівняно з альтернативними фреймворками, десятки одночасних воркерів черг комфортно працюють на невеликих віртуальних машинах.
  • Спостережуваність під високим навантаженням: структурований QueueProgressLogger дає миттєве уявлення про пропускну здатність воркерів, завершення пакетів і діагностику помилок безпосередньо в збирачах журналів.

Масштабуйте свою інфраструктуру BigBlueButton разом із RIADVICE

Чи потрібні вам готові панелі BigBlueButton Analytics реального часу для вашого університету чи організації, власні високопродуктивні конвеєри обробки даних або архітектурний консалтинг для великих кластерів BigBlueButton, RIADVICE готова допомогти.

Запланувати демонстрацію / консультацію

Оновлення до Sukarix 0.4.0

Sukarix 0.4.0 лише додає нові можливості й не містить жодних несумісних змін для наявних застосунків. Якщо ви використовуєте Sukarix 0.3.x на PHP 8.4+, ви можете оновитися негайно через Composer:

composer update sukarix/sukarix

Повні примітки до випуску дивіться в Sukarix Github Discussions.


Теги: Sukarix, PHP 8.5, PHP-фреймворк, черги Redis, асинхронна обробка, BigBlueButton, навчальна аналітика, EdTech, конвеєр даних реального часу, RIADVICE, високопродуктивний PHP, відкритий код.

Поділитися статтею

  • Загальнодоступна версія ZcaleRight 1.0.0
    BigBlueButton · 5 хв читання

    ZcaleRight 1.0.0: десять серверів працюють так само просто, як один

    ZcaleRight розміщує зустрічі BigBlueButton у робочому середовищі з 2019 року. Тепер він досягає версії 1.0.0 і стає загальнодоступним: усі 69 можливостей опубліковано відкрито, повний посібник усередині продукту, угода про рівень обслуговування і власний сайт.

  • Випуск WebSummoner
    Open Source · 8 хв читання

    WebSummoner 1.0: Selenoid, повернений до життя

    Сім актуальних браузерів у Docker, один контейнер на сесію, записи зі звуком: як WebSummoner продовжує Selenoid, архівований з грудня 2024 року, і чому він працює в самому ядрі нашої власної хостингової інфраструктури.