コンピューティングにおいて、イベントとは、システムが監視するように設計された、検出可能な事象または状態の変化のことです。例えば、ユーザー入力、ハードウェア割り込み、システム通知、データや条件の変化などが挙げられます。イベントハンドラに関連付けられると、イベントは応答をトリガーします。ハンドラは同期的に実行される場合と非同期的に実行される場合があります。同期的に実行される場合、イベントハンドラが処理を完了するまで実行スレッドはブロックされます。非同期的に実行される場合、イベントは後で処理される可能性があります。同期処理が実行をブロックするように見える場合でも、多くのシステムの基盤となるメカニズムは依然として非同期であり、イベントループによって管理されています。[ 1 ] [ 2 ]
イベントは、コールバック、メッセージオブジェクト、シグナル、割り込みなどのさまざまなメカニズムを通じて実装できますが、イベント自体は使用される実装メカニズムとは異なります。バブリング、キャプチャリング、pub/subなどのイベント伝播モデルは、システム内でイベントがどのように分散され、処理されるかを定義します。その他の重要な側面には、イベントループ、イベントキューイングと優先順位付け、イベントソーシング、複雑なイベント処理パターンなどがあります。これらのメカニズムは、イベント駆動型システムの柔軟性と拡張性に貢献します。[ 1 ] [ 2 ]
分散システムでは、イベントは事実または状態の変化(例:OrderPlaced)を表し、通常は複数のコンシューマーに非同期的にブロードキャストされ、疎結合とスケーラビリティを促進します。イベントは一般的に即時の応答を期待しませんが、確認メカニズムは、イベントパターン自体に内在するものではなく、インフラストラクチャ レベルで実装されることがよくあります(例:Kafka コミット オフセット、SNS 配信ステータス)。[ 3 ] [ 4 ]
対照的に、メッセージはより広い役割を果たし、コマンド(例: ProcessPayment)、イベント(例: PaymentProcessed)、およびドキュメント(例: DataPayload)を含みます。イベントとメッセージの両方は、テクノロジースタックと実装に応じて、少なくとも1回、最大1回、正確に1回など、さまざまな配信保証をサポートできます。ただし、正確に1回の配信は、真のインフラストラクチャレベルの正確に1回セマンティクスではなく、冪等性メカニズムによって実現されることがよくあります。[ 3 ] [ 4 ]
イベントとメッセージの両方の配信パターンには、パブリッシュ/サブスクライブ(1対多)とポイントツーポイント(1対1)があります。リクエスト/リプライは技術的には可能ですが、純粋なイベント駆動システムよりもメッセージングパターンに関連付けられることが多いです。イベントは状態伝播と疎結合通知に優れており、メッセージはコマンド実行、ワークフローオーケストレーション、明示的な調整に適しています。[ 3 ] [ 4 ]
現代のアーキテクチャでは、分散状態変化通知にはイベントを、特定のタイミング、順序、配信要件に基づくターゲットコマンド実行と構造化ワークフローにはメッセージを、両方のアプローチを組み合わせるのが一般的です。[ 3 ] [ 4 ]
分散システムでは、イベントの進化は、サービス間で一貫性のないイベントスキーマを管理したり、段階的なシステム更新中に互換性を確保したりするなど、課題をもたらします。イベント駆動型アーキテクチャ (EDA) におけるイベント進化戦略は、システムが中断なくイベントの変更を処理できるようにします。これらの戦略には、後方互換性と前方互換性を維持するために、セマンティック バージョニングやスキーマ進化などのイベントのバージョン管理が含まれます。アダプタは、古い形式と新しい形式の間でイベントを変換し、コンポーネント間で一貫した処理を保証します。これらの技術により、複雑な分散環境において、互換性と信頼性を維持しながらシステムを進化させることができます。[ 1 ]
コンピュータサイエンスにおいて、イベント(イベントセマフォとも呼ばれる)は、特定の条件が真になったことを待機中のプロセスに通知するために使用される同期メカニズムの一種である。
イベントは、ブール値の状態と以下の操作を持つ抽象データ型です。
イベントの実装方法によって、これらの操作のうち利用できるものが異なる場合があります。たとえば、Microsoft Windowsの実装では、待機(WaitForObject および関連関数)、設定(SetEvent)、クリア(ResetEvent)の操作が提供されます。イベント オブジェクトの作成時に指定できるオプションによって、SetEvent の動作が変更され、単一のスレッドのみが解放され、そのスレッドが解放された後に状態が自動的に false に戻されます。
リセット関数以外のイベント、つまり一度しか完了できないイベントは、フューチャーとして知られています。[ 5 ]一方、モニターは、完了シグナリングとミューテックスを組み合わせ、モニター内でプロデューサーとコンシューマーが同時に実行されないようにすることで、イベント+クリティカルセクションとなるため、より一般的です。
Java DOM Interface EventJavadocドキュメントjava.awt.eventJavaパッケージのJavadoc APIドキュメントjavax.swing.eventJavaパッケージのJavadoc APIドキュメント