さまざまな登録ユーザーの 1 日あたりの特定の数のリクエストに応答する Web サービスを構築しています。各ユーザーには毎日の割り当てがあるため、これらの制約を満たす必要があります。
サーバーを追加し、ラウンドロビン方式で負荷分散することにより、水平方向にスケーリングすることを計画しました。
分散カウンターを持つ分散データベースを 1 つ作成します。このデータベースは、毎日のカウントを報告するためにのみ使用されます。
サーバーは 1 秒あたり 2 ~ 3,000 のリクエストを処理します。そのため、クォータを超えないように、各リクエストを処理するときに使い果たされたクォータの最新のカウントが必要です。
リクエストを処理する際のレイテンシーを低くするために、各サーバーからのプロセス外呼び出しを防止したいと考えています。
私は、すべてのサーバー間でクォータを分割し、サーバーごとのクォータの制約をメモリ内で維持するという観点から考えてきました。しかし、サーバーの障害や再起動にどのように対処すればよいでしょうか?
各サーバーからネットワーク経由で別のデータベースにクエリを実行するなど、アウト プロセスで実行した方がよいでしょうか。私が観察したことは、この場合、レイテンシが大幅に増加することです。
私が正しい方向に進んでいるかどうかアドバイスをお願いします。