問題タブ [event-based-programming]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
apache - Apache Event MPM のパフォーマンスが悪いのはなぜですか?
Event MPM は Nginx とまったく同じ設計ではありませんが、キープアライブをより持続可能にし、静的ファイルの送信を高速化するように明確に設計されています。私の理解では、次の理由により、イベント MPM は少し間違った名前です。
- 接続はkqueue/epollに渡されますが、
- mod_gzip や mod_ssl などの特定の非常に重要なモジュールは、応答が完了するまでスレッドをブロック/消費します。
- これは大きなファイルでは問題になりますが、PHP で生成された HTML ドキュメントなどではおそらく問題になりません。
残念なことに、Apache は市場シェアを失い続けており、ほとんどのベンチマークはイベント MPM に悪影響を及ぼすものです。ベンチマークに欠陥がありますか、それともイベント MPM は実際に Nginx に対してあまり効果がありませんか? これらの制限があっても、通常のトラフィック (悪意のない) と小さなファイルの下では、Nginx とある程度競合するはずです。たとえば、低速接続で php-fpm を介して PHP で生成されたドキュメントを競合的に提供する必要があります。これは、ドキュメントが (ssl および gzip されている場合でも) バッファリングされ、非同期で送信されるためです。圧縮を使用するかどうかに関係なく、SSL 接続と非 SSL 接続の両方が、そのようなワークロードで Nginx と異なる意味で動作するべきではありません。
では、なぜさまざまなベンチマークで輝いていないのでしょうか? どうしたの?または、ベンチマークの何が問題になっていますか? それが実行できる権限へのアピールとして、主要なサイトはそれを使用していますか?
amazon-web-services - 複数のコンシューマーで Amazon SQS を使用する
複数のキューと複数のコンシューマーで Amazon SQS を使用するサービスベースのアプリケーションがあります。これを行っているのは、イベント ベースのアーキテクチャを実装し、すべてのサービスを切り離して、さまざまなサービスが他のシステムの状態の変化に反応できるようにするためです。例えば:
- 登録サービス:
- 新しいユーザーが登録すると、イベント 'registration-new' が発行されます。
- ユーザー サービス:
- ユーザーが更新されると、'user-updated' イベントを発行します。
- 検索サービス:
- キュー 'registration-new' から読み取り、検索でユーザーにインデックスを付けます。
- キュー「user-updated」から読み取り、検索中のユーザーを更新します。
- メトリクス サービス:
- 'registration-new' キューから読み取り、Mixpanel に送信します。
- 'user-updated' キューから読み取り、Mixpanel に送信します。
私はいくつかの問題を抱えています:
- ポーリングを行うと、メッセージを複数回受信できます。多くのシステムを冪等になるように設計できますが、一部のサービス (メトリクス サービスなど) ではそれがはるかに難しくなります。
- SQS のキューからメッセージを手動で削除する必要があります。すべてのサービスがメッセージを受信したときにメッセージの削除を処理する「メッセージ処理サービス」を実装することを考えました (各サービスは、メッセージを処理した後に「メッセージ確認」イベントを発行します)。
私の質問は次のとおりだと思います。メッセージが確実に配信および削除されるようにしながら、SQS の単一のキューに対して複数のコンシューマーを確保するには、どのパターンを使用すればよいでしょうか。ご協力ありがとうございました。
linux - epoll_waiting でないときに epoll イベントが監視されていますか
私はイベントベースのプログラミングにかなり慣れていません。私は、読み取り/書き込みの準備が整ったファイルのみを通知するように見えるepoll
's edge-modeを試しています (既に準備ができているか準備ができているかに関係なく、すべての準備ができているファイルを通知する level-mode とは対照的です)。
よくわからないのは、エッジモードでは、私がepoll_wait
ing していないときに発生する準備イベントが通知されるかどうかです。まだリアームされていないワンショット ファイルのイベントはどうなりますか?
なぜそれを求めているのかを説明するために、次のシナリオを考えてみましょう。
- 10 個のノンブロッキング ソケットが接続されている
- edge-mode + oneshot
epoll_ctl
で、ソケットの読み取り準備が整ったときに反応するように構成します。EPOLLET | EPOLLONESHOT | EPOLLIN
epoll_wait
何かが起こる (最大 10 件のイベントを報告)- Linux がプロセスを起動し、ソケット #1 と #2 の準備ができていることを報告します
- I
read
とプロセス データ ソケット #1 (までE_AGAIN
) - I
read
とプロセス データ ソケット #2 (までE_AGAIN
) - 私がそれをしている間、ソケットSはデータを受け取ります
- すべてのイベントを処理したので、トリガーされたファイルを
epoll_ctl
inEPOLL_CTL_MOD
モードでリアームします。 epoll_wait
私のループは次のイベントのバッチに戻ります
わかりました、それで、ソケットSの準備ができていることを最後にepoll_wait
常に通知しますか? Sが #1 の場合のイベント(つまり、再装備されていない) ?
messaging - 障害シナリオでイベント ベースのメッセージ駆動型マイクロサービス アーキテクチャで状態を復元する方法
マイクロサービス アーキテクチャのコンテキストでは、同期(おそらくRESTベース)メカニズム。
以下に示すように、そのコンテキストを使用して、非常に単純化された注文システムを想像してください。
および次のメッセージ フロー:
- 注文は何らかのソース (Web/モバイルなど) から行われます。
- 注文サービスは注文を受け付け、
CreateOrderEvent
- InventoryService は に反応し、
CreateOrderEvent
いくつかの在庫作業を行い、完了したら を発行しInventoryUpdatedEvent
ます。 - 次に、Invoice サービスは に反応し
InventoryUpdatedEvent
、請求書を送信して、EmailInvoiceEvent
すべてのサービスが稼働しており、喜んで注文を処理しています。誰もが満足しています。その後、Inventory サービスが何らかの理由でダウンします
イベントバス上のイベントが「ノンブロッキング」方式で流れていると仮定します。つまり、メッセージは中央のトピックに発行されており、サービスがそれから読み取られていない場合はキューに積み上げられません (私が伝えようとしているのはイベントバスです。イベントがバスで発行された場合、それはこの時点で使用されているメッセージング プラットフォーム/テクノロジは無視してください)。これは、Inventory サービスが 5 分間ダウンした場合、CreateOrderEvent
その間にイベント バスを通過する が「なくなった」か、Inventory サービスに表示されないことを意味します。それらのイベント。
私の質問は次のとおりです: 在庫サービス (およびシステム全体) は、どのようにして注文が取りこぼされたり処理されなかったりしないように状態を復元しますか?