本文へスキップ
記事一覧

Sukarix 0.4.0 リリース:実運用の高負荷パイプラインのために作られた高スループットの Redis キュー

Ghazi Triki 著 · 6 分で読めます

この記事の内容

リリースのお知らせ

アトミックな Lua 実行、ネイティブなメンバーシップ重複排除、構造化された進捗テレメトリ、そして厳格な依存性注入。Sukarix がフレームワークの肥大化なしにエンタープライズ級の力をどのように提供しているのか、そしてリアルタイムの BigBlueButton Analytics パイプラインをどのように支えているのかをご紹介します。

ミッションクリティカルなバックエンドシステムやリアルタイムのストリーミングパイプラインを構築するとき、1 ミリ秒、1 メガバイトの RAM が重要になります。モダンな 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 / Web)極めて小さい(約 2~4 MB)大きい(約 15~35 MB)極めて小さい(約 2~3 MB)
ブートストラップとルーティングの速度1 ミリ秒未満で実行オーバーヘッドが大きい(複雑なミドルウェアスタック)1 ミリ秒未満で実行
パイプラインキューエンジンネイティブなアトミック Lua と重複排除汎用的なキュー抽象化(オーバーヘッドが大きい)なし(手動での実装)
エンタープライズ向けユーティリティ(マイグレーション、DI、ログ)同梱・設定済み同梱なし/断片的で組み立てが必要
依存関係グラフの複雑さ厳選された PSR パッケージで軽量深い依存関係が数十個最小限

Sukarix 0.4.0 の新機能:キューのアップデート

Sukarix 0.4.0 では Sukarix\Queue 名前空間が導入されました。マルチステージの非同期処理パイプラインに最適化された、専用設計の高スループット Redis FIFO キューアーキテクチャです。

アトミックな Lua 実行と自動重複排除

標準的な Redis のリストキューでは、ワーカーの障害時に競合状態や重複エントリが発生しがちです。Sukarix は、Redis の FIFO リストと、メンバーシップを追跡する補助のセットを組み合わせ、アトミックな Redis Lua スクリプトで実行することでこの問題を解決します。すでにキューに入っている項目をプッシュしても自動的に何も起こらず、処理の途中で終了したワーカーが状態を不整合な分断状態のまま残すことはありません。

独自の決まりを押し付けない、項目ごとの試行回数の追跡

Sukarix は、キューエンジンの内部で再試行やデッドレターの上限を固定的に強制するのではなく、Redis ハッシュによる項目ごとの試行カウンターを提供します。失敗したジョブをすぐに再試行するか、遅延させるか、レビューのために保留するか、デッドレターに送るかは、ビジネスドメインの側で完全に自由に決められます。

フェイルファストな初期化を備えた HasQueue トレイト

キューを利用するサービスは、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 のためのリアルタイム分析エンジンである RIADVICE の BigBlueButton Analytics プラットフォーム にあります。

大規模なバーチャル教室のインフラは、数百万件の同時発生イベントにわたって、膨大な量の細かなイベントデータを生み出します。WebRTC の音声/ビデオフィード、参加者の入室と退室、チャットメッセージ、投票でのやり取り、ホワイトボードの描画パス、スライドの切り替えなどです。ライブの授業に遅れることなくこのデータを確実に取り込むには、盤石なストリーミングパイプラインが必要です。

舞台裏では、Sukarix 0.4.0 の Redis キューが、重い生のイベントストリームを時系列データベースに保存される構造化データセットへと変換する流れを調整しており、ダッシュボードは Apache Superset を通じて提供されています。パイプラインは、次の点から直接恩恵を受けています。

  • 重複取り込みゼロ:サーバーが冗長な同期パルスを送信しても、メンバーシップの重複排除によりメトリクスの二重計上を防ぎます。
  • ワーカーの即時復旧:アトミックな Redis トランザクションにより、ワーカーの再起動やノードのスケーリングによってキューのインデックスが破損したり、会議のイベントが失われたりすることはありません。
  • 圧倒的なリソース効率:Sukarix の CLI ワーカーが消費する RAM はほかのフレームワークのごく一部であるため、数十のキューワーカーを軽量な仮想マシン上で余裕を持って同時に実行できます。
  • 高負荷下でのオブザーバビリティ:構造化された QueueProgressLogger により、ワーカーのスループット、バッチの完了状況、エラーの診断をログコレクターで即座に把握できます。

RIADVICE とともに BigBlueButton インフラを拡張

大学や組織のためのすぐに使える BigBlueButton Analytics のリアルタイムダッシュボード、高性能なデータ処理パイプラインのカスタム開発、大規模な BigBlueButton クラスターのためのアーキテクチャコンサルティングなど、RIADVICE がお手伝いします。

デモまたはご相談のご予約

Sukarix 0.4.0 へのアップグレード

Sukarix 0.4.0 は機能の追加のみで構成されており、既存のアプリケーションに対する破壊的な変更は一切ありません。PHP 8.4+ で Sukarix 0.3.x をお使いの場合は、Composer ですぐにアップグレードできます。

composer update sukarix/sukarix

リリースノートの全文は、Sukarix の GitHub Discussions でご確認ください。


タグ:Sukarix、PHP 8.5、PHP フレームワーク、Redis キュー、非同期処理、BigBlueButton、Learning Analytics、EdTech、リアルタイムデータパイプライン、RIADVICE、高性能 PHP、オープンソース

この記事を共有

  • WebSummoner のリリースを告知するビジュアル
    Open Source · 3 分で読めます

    WebSummoner 1.0:Selenoid、ふたたびこの世へ

    Docker 上で動く 7 つの最新ブラウザ、セッションごとに 1 つのコンテナ、音声付きの録画。2024 年 12 月にアーカイブされた Selenoid を WebSummoner がどう引き継ぎ、なぜ当社のホスティング基盤の中核で稼働しているのかをご紹介します。