このプロジェクトについて
Filaは現在設計段階にあるメッセージブローカーです(まだ動作するコードはありません)。従来のFIFOブローカーに共通する問題に対処します。複数のテナントやワークロード種別が同じキューを共有する場合、単一のノイジーなプロデューサーが他のすべてを枯渇させてしまい、レート制限は通常コンシューマー側に押し付けられ、無駄な処理とレイテンシの増加を招きます。
Filaはスケジューリングの判断をブローカー自体に移します。主な機能は次のとおりです。
- **Deficit Round Robin(DRR)による公平なスケジューリング**: 各公平性キーは重みに基づいて配信帯域の比例配分を受け取り、テナントの枯渇を防ぎます。
- **コンシューマー宣言型スロットリング**: コンシューマーは購読時に名前付きのレート制限(例: サービス単位や顧客単位)を宣言します。ブローカーは宣言されたすべての制限内に配信が収まるまでメッセージを保持するため、コンシューマーは実際に処理できるメッセージだけを受け取ります。
- **Luaルールエンジン**: 任意の`on_enqueue`および`on_failure`フックにより、ペイロードから公平性キーを導出したり、再試行かデッドレターかを決定したりするなど、カスタムのスケジューリングポリシーを定義できます。
- **重複排除と順序付け**: どちらもデフォルトでは無効で、それぞれ冪等性キーと順序付けキーで設定できます。
- **再試行とデッドレターキュー**: 失敗した試行は設定可能な再試行ポリシー(デフォルトは指数バックオフ付き3回)をトリガーし、試行を使い切ったメッセージは再ドライブをサポートするキュー単位のDLQに移動します。
- **リース**: 配信されたメッセージは可視性タイムアウト付きでリースされ、期限切れのリースは失敗試行としてカウントされます。
- **ランタイム設定**: Luaフックから読み取り可能なライブのキー・バリューストアにより、再起動なしでポリシーを変更できます。
クライアントSDKはRustで書かれており、ACL権限を反映した3つのハンドル(producer、consumer、admin)を持つケイパビリティベースの権限モデルを採用しています。ワイヤプロトコルは手書きのバイナリプロトコル(gRPC不使用)で、バッチネイティブかつ単一接続上で多重化されます。クライアントはsans-ioアーキテクチャに従い、純粋な状態機械コアと言語固有のI/Oシェルを分離することで、将来の多言語SDKを可能にします。
CLI(`fila`)は同じSDK上の薄いクライアントで特権アクセスを持たず、キューの管理、クラスタ操作(ドレイン、移動、リバランス)、ランタイム設定、再ドライブ、認証/ACL管理をカバーします。
ストレージは追記専用ログとインメモリインデックスから始まり、ストレージトレイトの契約では、確認応答前の永続性、アトミックな変更グループ、順序付きレンジスキャンを重視しています。クラスタリングはキューごとのRaftグループを使用し、調整用のメタグループを備えます。
ライセンスはAGPLv3です。
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.