目次
質問の内容
解決策
tl;医師
問題の説明
メッセージパッシング
十分長い説明です :)。私が何を言っているのかを理解するために、まったく同じシナリオを、異なる通信モデルで追跡してみましょう:
ホームページ バックエンド開発 Golang 別のリクエストを受信した後、HTTP リクエストに応答します。

別のリクエストを受信した後、HTTP リクエストに応答します。

Feb 09, 2024 pm 01:06 PM
データが失われた

收到另一个请求后提供 HTTP 请求的响应

php エディター イチゴ Web アプリケーションを開発するとき、多くの場合、HTTP リクエストを処理し、対応するレスポンスを提供する必要があります。リクエストを受け取った場合、リクエストの内容と目的に基づいて適切な応答を生成する必要があります。これには、データベースへのクエリ、フォーム データの処理、他の API の呼び出しなど、さまざまな操作が含まれる場合があります。この記事では、ユーザーにより良い対話とユーザー エクスペリエンスを提供するために、PHP で HTTP リクエストを処理し、対応するレスポンスを提供する方法を説明します。単純な静的 Web ページを構築する場合でも、複雑な Web アプリケーションを構築する場合でも、HTTP リクエストを処理し、応答を生成する方法を理解することが重要です。

質問の内容

私の使用例は、別のサーバーから別のリクエストを受信した後、HTTP リクエストに対する応答を提供することです。

  1. スケーラビリティを念頭に置きながら、可能な限り最善の方法でこれを実行したいと考えています。
  2. Golang 1.19 と Jin フレームワークを使用します。
  3. サーバーには複数のポッドがあるため、チャネルは機能しません。
  4. すべてのリクエストはタイムアウトになります。最初のリクエストは 60 秒後にタイムアウトになります。

私の現在の解決策は、各ポッドがキャッシュを常にチェックする共有キャッシュを使用することです。これは、キャッシュを 1 つずつチェックするのではなく、システムが完了した応答を定期的にチェックするチャネリングによってこれを最適化できると考えています。

他のプログラミング言語で実装する方法も知りたいです。

PS: これはデザインベースのクエリであり、私はここで報奨金を共有することである程度の評判があるので、ここで質問します。質問が不明瞭な場合は、自由に編集してください。

解決策

tl;医師

問題の説明

したがって、サーバー アプリケーションの名前が server_app であると仮定すると、たとえばポッドが 3 つあります:

リーリー

あなたの サービス は、"request a" という名前のリクエストを受信し、それを server_app_pod_a に渡すことを決定します。ここで、server_app_pod_a はリクエストを何らかのゲートウェイに転送し、クライアントの応答の処理を続行するために何らかの種類の notification を待ちます。ご存知のとおり、ゲートウェイが request b を実行するときに、サービスがそれを再び server_app_pod_a に渡すという保証はありません。これをやったとしても、アプリケーションの状態管理は困難になります。

メッセージパッシング

お気づきかと思いますが、前の段落では「通知」という単語を太字にしました。よく考えてみると、request "b" は、「There are notification for some ##」のように見えるからです。 # メッセージ 特定のリソースに対するリクエストの代わりに。したがって、私の最初の選択肢は、kafka のようなメッセージ キューです (ご存知のとおり、メッセージ キューはたくさんあります)。アイデアは、リクエストの一意のキーを計算するアルゴリズムを定義できれば、まったく同じポッドで結果を通知できるということです。こうすることで、状態管理がより簡単になり、同じポッドで通知を取得できる可能性が高くなります (もちろん、これはメッセージ キューの状態などの多くの要因によって異なります)。あなたの質問を見てください:

    スケーラビリティを念頭に置きながら、可能な限り最善の方法でこれを実行したいと考えています。
もちろん、これらのメッセージ キューを kafka のように使用して、メッセージ キューとアプリケーションのスケーリングを実現し、データ損失を減らすことができます。

    すべてのリクエストはタイムアウトになります。最初のリクエストは 60 秒後にタイムアウトになります。
コード ベースでタイムアウトを管理する方法によっては、コンテキストを使用することをお勧めします。

他のプログラミング言語で実装する方法も知りたいです。

メッセージ キューの使用は、ほぼすべてのプログラミング言語に当てはまる一般的な考え方ですが、言語のプログラミング パラダイムや言語固有のライブラリとツールによっては、この問題を解決する他の方法がある場合があります。たとえば、

scala では、akka (アクター モデル プログラミング パラダイムを提供する) という特定のツールを使用する場合、いわゆる akka-cluster-sharding ## を使用できます。 # この問題に対処します。アイデアは非常に単純です。自分の加入者の正確な位置とステータスを知っているある種のスーパーバイザが必要であることがわかっています。したがって、何らかのメッセージを受信すると、リクエストをどこに転送するか、どのアクターに転送するかを認識するだけです (これはアクター モデルのプログラミングについて話しています)。言い換えれば、同じマシン上かどうかに関係なく、クラスター上に生成された参加者間で状態を共有するために使用できます。しかし、個人的な好みとして、私は言語固有のコミュニケーションをとらず、将来問題を引き起こす可能性があるため、一般的な考え方に固執します。 要約

十分長い説明です :)。私が何を言っているのかを理解するために、まったく同じシナリオを、異なる通信モデルで追跡してみましょう:

  1. クライアントはリクエスト「a」を server_app サービスに送信します。
  2. サービスは、リクエストを処理するポッドの 1 つ (例: server_app_pod_b) を選択します。
  3. その後、ポッドはリクエストのキーを定義しようとして、それをリクエストとともにゲートウェイに渡し、そのキーを含むメッセージがキューに公開されるまで 待機します。
  4. ゲートウェイは本来の動作を実行し、キー
  5. を使用してメッセージ をメッセージ キューに送信します。
  6. まったく同じポッド
  7. serer_app_pod_b キーを含むメッセージを受信し、メッセージのデータを取得して、クライアントのリクエストの処理を続行します。
この問題を解決するには他の方法があるかもしれませんが、これが私が望むものです。お役に立てば幸いです!

以上が別のリクエストを受信した後、HTTP リクエストに応答します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C言語でCharを変換する方法 C言語でCharを変換する方法 Apr 03, 2025 pm 03:21 PM

C言語では、charタイプの変換は、キャスト:キャスト文字を使用することにより、別のタイプに直接変換できます。自動タイプ変換:あるタイプのデータが別のタイプの値に対応できる場合、コンパイラは自動的に変換します。

DebianでMongodbの高可用性を確保する方法 DebianでMongodbの高可用性を確保する方法 Apr 02, 2025 am 07:21 AM

この記事では、Debianシステムで非常に利用可能なMongoDBデータベースを構築する方法について説明します。データのセキュリティとサービスが引き続き動作し続けるようにするための複数の方法を探ります。キー戦略:レプリカセット:レプリカセット:レプリカセットを使用して、データの冗長性と自動フェールオーバーを実現します。マスターノードが失敗すると、レプリカセットが自動的に新しいマスターノードを選択して、サービスの継続的な可用性を確保します。データのバックアップと回復:MongoDumpコマンドを定期的に使用してデータベースをバックアップし、データ損失のリスクに対処するために効果的な回復戦略を策定します。監視とアラーム:監視ツール(プロメテウス、グラファナなど)を展開して、MongoDBの実行ステータスをリアルタイムで監視し、

推奨されるXMLフォーマットツール 推奨されるXMLフォーマットツール Apr 02, 2025 pm 09:03 PM

XMLフォーマットツールは、読みやすさと理解を向上させるために、ルールに従ってコードを入力できます。ツールを選択するときは、カスタマイズ機能、特別な状況の処理、パフォーマンス、使いやすさに注意してください。一般的に使用されるツールタイプには、オンラインツール、IDEプラグイン、コマンドラインツールが含まれます。

Laravel Multi-Tenant Extension Stancl/Tenancy:テナントデータベース接続のホストアドレスをカスタマイズする方法は? Laravel Multi-Tenant Extension Stancl/Tenancy:テナントデータベース接続のホストアドレスをカスタマイズする方法は? Apr 01, 2025 am 09:09 AM

Laravel Multi-Tenant拡張機能パッケージStancl/Tenancyのカスタムテナントデータベース接続Laravel Multi-Tenant ExtensionパッケージStancl/Tenancyを使用したマルチテナントアプリケーションを構築する際の...

マルチプロセスログを作成するときに、同時性が安全で効率的であることを確認する方法は? マルチプロセスログを作成するときに、同時性が安全で効率的であることを確認する方法は? Apr 02, 2025 pm 03:51 PM

マルチプロセスのログライティングの並行性セキュリティの問題を効率的に処理します。複数のプロセスが同じログファイルを同時に書き込みます。並行性が安全で効率的であることを確認する方法は?これは...

RedisキューとMySQLの安定性の比較:なぜRedisはデータ損失になりやすいのですか? RedisキューとMySQLの安定性の比較:なぜRedisはデータ損失になりやすいのですか? Apr 01, 2025 pm 02:24 PM

RedisキューとMySQLの安定性の比較:なぜRedisはデータ損失になりやすいのですか?開発環境では、php7.2とthinkphpフレームワークを使用して、私たちはしばしば協力の選択に直面しています...

RESTFUL APIデザイン:特定のツイートの下ですべてのコメントをエレガントに取得するにはどうすればよいですか? RESTFUL APIデザイン:特定のツイートの下ですべてのコメントをエレガントに取得するにはどうすればよいですか? Apr 01, 2025 am 08:12 AM

Restfulapiでのリソースのネストに関する議論Restfulapiを設計するとき、リソースの編成方法が重要です。この記事は、ツイートに関するコメントを取得することを目的としています...

See all articles