ポーカー サーバーを実装しようとしています。HTTP サーバーは、すべてのポーカー ハンドの状態を処理するバックエンド サーバーにデータ パケットを転送します。任意のハンドで、プレイヤーは 10 秒以内に行動します (ベット、フォールド、コール、レイズなど)。10 秒以内に応答がない場合、サーバーは自動的にフォールドします。10 秒が経過したことを確認するために、いつアクションを受信する必要があるかを示すイベント リストが維持されます。これは時間順に並べられた優先キューであり、現在プレイされている各ポーカー ハンドは優先キューにエントリがあります。
最後のアクションから次のアクションが http サーバーに到達するまでに 9.99 秒が経過するため、次のシナリオを検討してください。アクションがバックエンド サーバーに転送されるまでに余分な時間が経過するため、合計で 10.1 秒が経過します。バックエンド サーバーはハンド フォールドを宣言しますが、技術的には 9.99 秒後に http サーバーに到着したため、アクションを処理したいと思います。解決策の 1 つは、ハンドがフォールドしたことを宣言する前に、9.99 秒のタイムスタンプが付けられたアクションが来るかどうかを確認する前に、バックエンドに余分な時間待機させることです。しかし、それでは次のハンドのプレイヤーがアクションを起こすまでに時間がかかります。
私が望む目標は
- ハンドをフォールドする代わりに、9.99 秒で http サーバーに到達するアクションを処理します。
- 箇条書き 1 で述べた問題を「解決」するためにアイドル状態で待機しなければならないことに起因する遅延を積極的に最小限に抑えます。
さまざまなソリューションとは?分散システムの専門家にとって、さまざまなソリューションのトレードオフに関する既知の文献はありますか。分散システムの文献で受け入れられると考えられるさまざまなソリューションを知りたいです。さまざまなアドホック ソリューションだけではありません。