最初のパートでは、スポーツブックのハイレベルなアーキテクチャ、主要コンポーネント、重要な考慮事項、そしてスケーラブルなスポーツブックシステムを構築するためのベストプラクティスについて説明しました。詳しくはこちらをご覧ください:[ブログ前編へのリンク].
この後編では、スポーツブック・ソフトウェア・システムの各レイヤーに選択すべきテクノロジーについて、皆様の決断をサポートします。
以下は、スポーツブック・アプリケーション・アーキテクチャの各レイヤーに適用可能な様々な技術オプションのスナップショットです。私たちの経験に基づき、最も効果的なソリューションをまとめ、各レイヤーに適したオプションを選択するための最も重要な基準について説明します。
図: スポーツブック・アプリケーション・アーキテクチャの異なるレイヤーに適用可能な様々な 技術 オプション
注:ここではAWSのクラウドサービスを使用していますが、ソリューションがデプロイされる他の好みのクラウドベンダーの同等のサービスで代用することができます。
フロントエンド(ユーザー・エクスペリエンス層)
テクノロジーReact.js、Angular
アンギュラー
選ぶべき時大規模なスポーツブックのために、高いモジュール性と組み込み機能を備えたフルフレームワークが必要な場合
最適
- 複雑なビジネスロジックを持つエンタープライズレベルのアプリ
- 大規模モジュールプロジェクト
- 長期的なスケーラビリティのニーズ
主な強み
- 組み込みツール(RxJS、DIなど)を備えた包括的なフレームワーク
- 双方向のデータバインディング
- 強力なTypeScriptサポート
主な弱点
- 学習曲線が速い
- 小規模アプリのパフォーマンスオーバーヘッド
- 冗長なコード
リアクトJS
いつ選ぶか:
- パフォーマンス重視の動的UI
- ルーティング、APIコール、ステート管理など、さまざまな機能のために追加ライブラリとの統合が必要なライブラリと共存する準備ができている。
こんな時に最適
- リアルタイムのダイナミックUI
- パフォーマンスが重要なスポーツブック機能(ライブオッズなど)
- カスタム技術スタックとの柔軟な統合
主な強み
- 仮想DOMによる高いパフォーマンス
- 大規模なエコシステムと強力なコミュニティ
- コンポーネントの再利用性
- React Nativeでモバイルアプリを開発する場合、コードの再利用が可能。
主な弱点
- ルーティング、ステート管理、APIコールなどのための追加ライブラリが必要。
- ボイラープレート・コード
注:マイクロ・フロントエンド・アーキテクチャーが必要な場合は、最適な使用例に基づいて、上記の両方のテクノロジーを選択することができる。
バックエンド(APIレイヤー)
テクノロジーASP.NET Core、Java Spring Boot、Node.js
ASP.NET Core
いつ選ぶか
- パフォーマンス、同時実行性、スケーラビリティ、エンタープライズ・サポートが最優先
- 開発者はC#.NETに精通している
- 使用例リアルタイムオッズ/マーケット管理API、ユーザー管理APIなど。
Java Spring boot
選ぶべき時
- 非常に複雑なワークフローやトランザクションの多いバックエンドの実装が必要な場合
- 開発者がJavaのみに精通している
- 使用例ベット決済プロセス、決済統合など
Node.js
いつ選ぶか
- 軽量でありながらスケーラブルなAPIとリアルタイム機能、イベント駆動型の実装が必要な場合。
- CPUに負荷のかかるタスク(複雑な計算など)の実装は必要ない。
- 開発者がJavaScriptに精通している
- 使用例ゲームアップデートのリアルタイム通知、セッショントラッキング、チャットによるユーザー参加など。
* マイクロサービス・アーキテクチャを希望する場合、必要なスキルセットがあれば、最適なユースケースに基づいて最適なテクノロジーを選択することができます。
さらに、マイクロサービス・アーキテクチャでは、適切なメッセージ・ブローカーを選択することが不可欠だ。最良の選択肢はRabbitMQとKafkaの2つだ。以下はその選択に役立つガイドラインだ:
RabbitMQ
いつ選択するか
- シンプルでスマートなブローカーが必要
- 低レイテンシー、リアルタイム、またはマイクロサービス間の非同期通信が必要な場合
- ポイント・ツー・ポイント通信
- 将来的なアーキテクチャの進化はわからないが、現時点ではイベント・ドリブン・アーキテクチャが必要な場合
- ユースケースの例トランザクションワークフロー、顧客メッセージング、ベット結果と通知など。
最適
- リアルタイムメッセージング
- トランザクションシステム
主な強み
- リアルタイム処理のための低レイテンシー
- 高度なルーティングオプション(ファンアウト、トピック、ヘッダー)
- セットアップと管理が容易
- 幅広い言語とプロトコルのサポート
主な弱点
- Kafkaに比べ、高負荷時のスケーラビリティに限界がある。
- メッセージは消費後に削除される(保持期間が短い)
- メッセージ再生やイベントソーシングの組み込みサポートがない
カフカ
いつ選ぶべきか:
- 高スループットのライブイベント・ストリーミングを処理する必要がある場合
- メッセージの保持や再生が必要
- 1対多のパブ・サブ通信が必要
- 様々なソースからのリアルタイム分析またはログ集約を処理する必要がある。
- 順序保証が優先
- 分析のためのデータ保持に重点を置く
- 使用例ライブオッズやイベントのストリーミング、プレイヤーのアクティビティログとベット履歴処理、リアルタイム分析と不正検出など。
最適
- 高スループットのイベントストリーミング
- 分析パイプライン
- イベントソーシング
主な強み
- 高スループットでスケーラブルな分散アーキテクチャ
- リプレイ機能による耐久性のあるメッセージ保持
- ビッグデータツールとの強力な統合
- パーティション内のメッセージ順序を保証
主な弱点
- 小さなトランザクション・メッセージの待ち時間が長い
- セットアップやコンセプトが複雑なため、学習が大変
- RabbitMQのような高度なルーティングオプションがない
データレイヤー(ストレージ/データベース/キャッシュ)
テクノロジーMS SQL Server、PostgreSQL、MongoDB、S3、Redisなどのオブジェクトストレージ
キャッシュには複数の選択肢があるが、パフォーマンス、柔軟性、豊富な機能セットから、Redisがベストな選択であることは明らかだ。
RedisのBSDオープンソースライセンスの変更に関する懸念については、こちらの記事を参照してください。
データベースとオブジェクトストレージの選択については、以下のガイドラインに従ってください:
PostgreSQL DB
いつ選択するか
- トランザクションと分析ワークロード用のフリー&オープンソースRDBMS
- 使用例ベッティングトランザクション、プレイヤーアカウント管理、ベッティングトレンドレポート、規制目的の監査ログ
MS SQLサーバー
いつ選ぶべきか:
- マイクロソフトのエコシステム、強力なインメモリ処理、運用の手間が少ないマネージドソリューション、ライセンスコストが問題でない場合
- 使用例上記のPostgreSQLのようなすべてのRDBMSのユースケース
Mongo DB
いつ選ぶべきか:
- 非構造化または半構造化データを保存するNoSQL
- 使用例イベント、マーケット、その他の設定、ダイナミックプロモーションとボーナス
オブジェクトストレージ(S3またはその他のクラウドストレージ)
いつ選ぶか
- 非構造化データを保存し、より高速でスケーラブル、かつURLベースで簡単にアクセスする必要がある場合(メディアファイル、静的画像、設定ファイルなど
- 使用例プロモーションバナー、画像、動画、ライブストリーミングのメタデータ、メディアのサムネイルなど。
CI/CD & DevOps
CI/CDは、アプリケーションをビジネスニーズや業界トレンドに合致させ続けるために極めて重要です。DevOpsツールは、このプロセス全体を自動化し、市場投入までの時間を短縮するのに役立ちます。そのいくつかを図2に挙げ、それぞれを選択するタイミングについて詳しく説明する:
GitHubアクション
いつ選ぶか:
GitHubはすでにソースコード・リポジトリ管理ソリューションです。
GitLab CI/CD
いつ選ぶか
GitLabはすでにソースコードリポジトリ管理ソリューションです。
ジェンキンス
いつ選ぶべきか:
無料のオープンソースソリューションで、高度にカスタマイズ可能なパイプラインが必要。
モニタリングと観測可能性:
オープンソース
いつ選ぶべきか:
- 始めたばかりで、まだ観測可能性に重点を置いていない。
- 余分な労力と運用コストをかける覚悟がある
良い選択肢としては、以下のようなものがある:
- ELK (Elasticsearch, Logstash, Kibana) はログの管理と可視化のための素晴らしいオープンソースのソリューションだ。
- Prometheus + Grafana はメトリクス管理と可視化のための素晴らしい組み合わせだ。
- OpenTelemetryはさらに、分散トレーサビリティと観測可能性のためのオープンソースでCNCF公認のソリューションとして実装することができる。
COTS
いつ選ぶべきか
- ライセンスを調達する予算の有無
- エンタープライズグレードの観測可能な機能が必要
良い選択肢としては、以下のようなものがある:
Splunkは、業界全体で受け入れられている優れたログ管理ソリューションです。
NewRelic、Dynatrace、Datadogは、利用可能な最も優れたAPMと観測可能なソリューションのいくつかである。New Relicは100GB/月のデータインジェストで無料ティアを提供している(記事執筆時のデータ)。3つともいくつかのUSPがあるが、全体的な観測可能性が必要であれば、これらのいずれを選んでも間違いはないだろう。Amazon CloudWatchは、AWSクラウドインフラ上でホスティングされているソリューションであれば、間違いないだろう。
インフラとホスティング
スケーラビリティと長期的なコスト効率を確保するために、可能な限りクラウドネイティブの開発とホスティングを使用する。
さらに、環境固有の問題を排除しながら、より迅速でシームレスなデプロイを可能にするため、アプリケーションにはコンテナ化を好んで使用しています。
ホスティングオプションを選択する際のガイドラインを以下に示します:
コンテナ化
いつ選ぶべきか:
コンテナ化は、近代化された効率的なホスティングへの第一歩です。そのため、スケーラブルなマイクロサービス・アーキテクチャを目指し、Kubernetes、ECS(Elastic Container Service)、Azure Container Apps/App Serviceなどのプラットフォーム上でアプリケーションをホスティングし、CI/CDを最大限に活用するのであれば、コンテナ化は必須です。
Kubernetes (AWS-EKS/Azure-AKS)
いつ選択するか
- マイクロサービスによるクラウドネイティブ開発
- クラウドに依存しないために、ネイティブのEKSやAKSよりもKubernetesを選択する。この場合、Kubernetesの管理機能を備えたDevOpsのスキルセットを確保する必要がある。
AWS Elastic Beanstalk/Azure Appサービス
いつ選ぶべきか:
クラウド移行を始め、Lift & Shiftが必要な場合(アプリケーションフレームワークがサポートされている場合)、またはクラウドベンダーのオールラウンダーなマネージドホスティングサービスでKubernetesの複雑さを回避したい場合。
サーバーレス(AWS Lambda/Azure Functions)
いつ選ぶべきか
- 小規模だが頻度が少なく、予測不可能なワークロードで、リソースを大量に消費しない場合(画像のバッチ処理など)に選択する。
- I/Oの多い長時間タスクの場合は避ける。
仮想マシン(AWS-EC2/Azure VMs)
いつ選択するか
- クラウドへの移行で、ソフトウェア・ソリューションの変更をほとんど、あるいはまったく行わずにリフト&シフトを行う必要がある場合。
- セキュリティやコンプライアンス上の理由から、OSレベルでも分離が必要な場合
- レガシーなステートフル・アプリケーションをホストする必要がある
さらに、Terraform、Ansible、AWS CloudFormation(または同等のクラウド固有の代替手段)などのツールを使ってInfrastructure as Code(IaC)を使用する。しかし、私たちの望ましいアプローチは、クラウドにとらわれないことであり、TerraformやAnsibleを推奨する。最近のTerraformのオープンソースライセンスの変更に懸念がある場合は、Linux Foundationが支援するOpenTofuが代替となる。Terraformオープンソース版からフォークされている。
AIによるスポーツブックの未来
AIがどのようにiGamingを変革しているのか興味深い。従来のスポーツブックプラットフォームがルールベースのエンジン、手作業によるリスク管理、静的なユーザーエンゲージメントに依存していたのに対し、未来はAIを活用したインテリジェンスにある。
想像してみてください:
- オッズとオファーのパーソナライズ
- AIを活用した異常検知により、詐欺やID関連の問題をリアルタイムで検出する、
- AIチャットボットと予測的洞察による顧客体験の向上、
- ダイナミックにパーソナライズされたコンテンツで、より豊かで魅力的な体験を提供する、
- などなど。
次回は、AIがスポーツブックのエコシステムとアーキテクチャをどのように再構築し、これまでにない効率性、セキュリティ、ユーザーエンゲージメントを実現しているかを見ていきます。ゲームを再定義する洞察にご期待ください!