統合レイヤー
Relay
Relay は、3forge と外部システムの境界に位置します。その役割は、ライブデータをファブリックに取り込むこと、そしてスケーラビリティとデータ処理のための特定のアーキテクチャパターンを実装することです。
ファブリックにおける役割
統合の境界で
Relay は、フィードハンドラーとアダプターを介して、リアルタイムフィード、メッセージングシステム、データベース、ファイル、ローカルアプリケーションに接続します。情報が届くと、Relay はそれを解析、検証、変換したうえで、1つ以上の Center へルーティングできます。この処理を統合の境界で行うことで、下流で実装すべきソース固有のロジックを減らせます。
Relay は、Center から外部リソースへの制御された経路も提供します。データベースへのクエリ発行、データのアップロード、ファイルやログへのアクセス、ローカルプロセスの起動、下流アプリケーションへのコマンド送信が可能です。
こうして Relay はファブリックの統合・トランスポート層となります。ソースの近くにあり、メッセージの内容を理解し、システムの他の部分が求める形式と方向でそれを届ける役割を担います。
Relay の主な用途は次のとおりです。
リアルタイムフィード
Center と Relay はいずれもデータベースに直接接続できます。Relay はさらにリアルタイムフィードへの接続を想定して設計されており、プロトコルを終端し、各メッセージを Center に届く前に解析、検証、正規化します。
スケーリングパターン
複数の Center への処理の分散、負荷分散、ウォームスタンバイへのストリーム複製、宛先の停止中のメッセージ保持は、いずれも Relay のルーティングルールに基づきます。以下のパターンは、この2つ目の用途を具体的に示したものです。
パターン例
Relay の7つの導入パターン
Relay の役割は単なるメッセージ転送にとどまりません。ルーティングルールにより、どのメッセージをどの Center に送るかを決め、選択したストリームを複数の宛先に複製し、定義した条件を満たさないメッセージを破棄できます。これにより、処理を複数の Center に分散し、得られた状態を後から統合する分散処理パターンが可能になります。
動的メッセージルーティングと Map Reduce
- ルールが各メッセージを振り分け、内容、負荷、カスタムロジックに応じて専用の処理 Center へ送信。設定はリアルタイムに変更可能
- 各 Center が自らの担当分を処理し、map-reduce 処理が結果を統合
保証付きメッセージング
- すべての重要な更新を永続化し、負荷や一時的なネットワーク状況にかかわらず確実に配信
- メッセージをログ先行書き込み(write-ahead log)に記録。オフラインだった Center も再接続後に取りこぼし分を再生可能
- 重複排除は行わない一方で、リアルタイムのトレーディング、リスク、コンプライアンスシステムが求める耐久性と継続性を確保
メッセージ変換とルーティング
- 転送中のメッセージを検査、変更、拡充、フィルタリング。カスタムコードは不要
- FIX をはじめとする金融プロトコルに対応。カウンターパーティごとに異なるフォーマットを正規化
- 機密フィールドのマスキングや内容に基づくルーティング
ルーティングルールに基づく負荷分散
- レプリケーションにより Center 間で負荷を分散。Relay のルーティングルールに基づく
- Center を増やすほど冗長性とスケーラビリティが向上
- マルチリージョン、グローバルなレプリケーション
データレプリケーション
- プライマリとウォームスタンバイの Center データベースを簡単な設定で構成
- スタンバイがプライマリの状態を監視し、障害時に処理を引き継ぎ
- スタンバイ側ですべてのデータをメモリにロード済み
マーケットデータの集約
- レイテンシに敏感な多数のソースを1つまたは複数の Center に集約
- 集約されたビューが優位性となる場面に。複数の執行市場にまたがる流動性など
- レベル2のマーケットデプスを構築
トレーディングデータの集約
- 多数のトレーディングデータソースを集約し、リアルタイムと履歴のクエリに対応
- 多数の顧客の注文板と、複数の市場からの約定
- アセットクラスをまたぐ注文板の集約
キャッシュ、永続化、処理
Relay はソースの近くに。状態は Center に。
ライブの状態に対するインメモリSQL、ペタバイト級のヒストリカルデータベース、複合イベント処理エンジン。そのすべてが同じガバナンスされたランタイムの中にあります。