$30 off During Our Annual Pro Sale. View Details »

Event Driven Architecture by Red Hat

Event Driven Architecture by Red Hat

Application Services Newsletter 2020/12月号
『今注目の「イベント駆動アーキテクチャ」を理解する! Red Hatの最新ソリューションを紹介』

Iot、AI、マシン、人など、様々なイベントソースからデータが大量に生成されるようになり、それをリアルタイムに処理する必要性からイベント駆動アーキテクチャに注目が集まっています。
ここではイベント駆動アーキテクチャの基本的なことからRed Hatが提供するApache Kafkaを含めたRed Hat Integrationをベースとしたソリューションについても紹介しています。

Taku Sugimoto

November 20, 2020
Tweet

More Decks by Taku Sugimoto

Other Decks in Technology

Transcript

  1. なぜイベント駆動アーキテクチャなのか? イベント駆動アーキテクチャ 4 Source:https://developers.redhat.com/topics/event-driven/ 現実の世界を反映 結合度を低減 現実の世界というのはイベント駆動になっています。日々 の生活において様々なイベントが生成され、システムはそ れに応答しています (人間の中枢神経系など

    )。 従来のRPCスタイルのサービスアーキテクチャでは、サー ビスは密結合となりがちです。アプリケーションの処理に 変更が発生した場合、ソースコードへの変更が必要となり ます。EDAでは、既存のイベントストリームを利用する サー ビスを追加することによって、新機能の追加が可能となり ます。 カプセル化 細かい粒度でのスケーリング サービスの開発チームが独立して開発できるようになること から、マイクロサービスの考え方が広まってきています。 EDAでは、サービスの設計担当者はイベントがどのように利 用されるかを意識する必要がなくなります。 イベントの量に応じて、サービスのスケールアップ /ダウンが 個別に可能です。 ほぼリアルタイムの遅延 顧客はますますリアルタイムに近いエクスペリエンスを求め ています。APIをポーリングする方式にはレスポンスの速さ と負荷に考慮すべきトレードオフがあります。 EDAでは、アプ リケーションは妥協することなくほぼリアルタイムに対応する ことが可能になります。
  2. イベントとは? 6 Source: https://developers.redhat.com/topics/event-driven/ クエリ コマンド 非同期型のRPC。 受信者が何をすべきかの指示を含み、 状態の変更が発生する場合がある。 イベント

    コマンドと似ているが、クエリは 結果を返す応答があることを想定。 ただし状態の変更は伴わない。 サービス間の処理において発生した ある特定エンティティの イミュータブルな状態と値。 イベント駆動アーキテクチャ
  3. イベントの利用パターンの分類 7 Source: https://developers.redhat.com/topics/event-driven/ 再送可能 イベントは登録済みのすべてのコンシュー マによって読み込まれるまで持続的に保存 される。従来型のストアアンドフォワード形 式のブローカ。 持続性

    イベントは指定された期間あるいはスト レージ容量まで持続的に保存される。 コンシューマはストリーム内を 前後に移動が可能。 揮発性 イベントはパブリッシュ時にオンライン状態 にあるすべてのコンシューマに伝播される 必要がある。永続化はされない。 イベント駆動アーキテクチャ
  4. Source: https://developers.redhat.com/topics/event-driven 適切な実現方式の選択方法 8 例 最適なパターン 可能なパターン 不適切なパターン キューイングやPub/Subなどの従来型のメッセージブローカ JMS

    2.0など、機能が豊富 メッセージブローカの例: Apache ActiveMQ Artemis 持続性イベント 揮発性イベント コマンド クエリ 再送可能イベント メッセージルーター 1:1 (anycast) / 1:many (multicast) ハイブリッドクラウドのための安全なメッセージング メッセージルーターの例: Apache Qpid Dispatch Router コマンド クエリ 揮発性イベント 持続性イベント 再送可能イベント Apache Kafkaのエンタープライズ向けディストリビューション Kubernetes/OpenShiftへの容易なデプロイ 例:StrimziをベースとしたKafka on Kubernetes 再送可能イベント 持続性イベント コマンド クエリ 揮発性イベント トランザクション /フィルターが必要な イベント Kubernetes/OpenShift上でスケーラブルな、セルフサービスのメッ セージング基盤 Self-managed または Third party-managed 例:EnMasse コマンド クエリ 揮発性イベント 持続性イベント 再送可能イベント イベント駆動アーキテクチャ
  5. リクエスト-リプライ型 vs イベント駆動 12 Source: イベント駆動アーキテクチャ 同期型 & 一時的 組み合わせの自由度が低い

    単純な方式 障害に対する耐性が低い RESTなどベストプラクティスが豊富 非同期 & 永続化 疎結合 組み合わせの自由度が高い 複雑な方式 障害に対する耐性が高い ベストプラクティスは発展途上
  6. イベントストリーミング ▸ 長期間の永続化, リプレイ, セマンティックなパーティ ショニング, パブリッシャとサブスクライバの数に非依 存、遅れてきたサブスクライバに対してリプレイ ▸ シェアードナッシングのデータ格納方式

    ▸ 大量のメッセージ処理時であっても順序を保持 トレードオフ ▸ 確認応答 (ack) が順序どおりに返される、リクエスト - レスポンスへの対応が不得手 ▸ 大量のデータフットプリントと高速なストレージへのア クセスが必要 ▸ 初期導入コストが高い メッセージング ▸ ストアアンドフォワード ▸ 単一のメッセージ交換 (トランザクション, 確認応答 (ack), エラー処理/DLQ*), P2P/競合コンシューマの サポート ▸ パブリッシャ/サブスクライバのサポート トレードオフ ▸ リプレイには非対応 ▸ 高速かつ高可用性のストレージが必要 ▸ 大量のメッセージ処理時に順序は保持しない 14 イベント駆動アーキテクチャ 従来のメッセージングとイベントストリーミングの比較 Source * DLQ: デッドレターキュー
  7. APAC Microservices Lines of Business Apps Regions システムとデータ中心の考え方 イベントは接続の必要性に応じて アドホックに設計される

    イベント中心の考え方 イベントは企業のあらゆるシステム間でやり取 りされるものとして位置づけられる Events Events Events Microservices Apps LOBs Regions 15 イベント駆動アーキテクチャについての考え方 イベント駆動アーキテクチャ Source Events
  8. ユースケースと利用法 イベント駆動アーキテクチャ 17 ユーザの行動追跡のパイプラインを リアルタイムなパブリッシュ/サブス クライブのデータフィードとして再構 築 Webサイトの行動追跡 メトリクス 分散アプリケーションの統計情報を集約

    し、運用に関する集約データフィードを 生成 ログ収集 ログファイルを可用性の高いストレージに集 約し、ログのアクティビティに対してリアルタ イムなアクセスが可能 ストリーム処理 刻々と発生するデータのストリームに 対し、アプリケーションがリアルタイム に反応し、データの変換や処理を行う ことが可能 イベントやデータ変更のストリームを キャプチャし、他のデータシステムにそ のイベントをフィード データインテグレーション Source: https://kafka.apache.org/uses
  9. Apache Kafka on OpenShift 21 ▸ Red Hat AMQ streamsに含まれるもの:

    ・ Apache Kafka, Connect, Zookeeper, MirrorMakerのコンテナイメージ ・ Apache Kafkaクラスタ、トピック、ユーザを管理/設定するための Kubernetes Operators ・ Kafka Consumer, Producer, Adminクライアント, Kafka Streams ▸ アップストリームのコミュニティ: Strimzi ・ 100%オープンソースのプロジェクト (Apache License 2.0) ・ Cloud Native Computing Foundation (CNCF)のプロジェクト イベント駆動アーキテクチャ Source
  10. • Kafka Core ◦ ブローカ ◦ Producer API, Consumer API,

    Admin API ◦ 管理用ツール • Kafka Connect • Kafka Streams API • Mirror Maker / Mirror Maker 2 • HTTPとKafkaのブリッジとなるREST Proxy • スキーマレジストリ Apache Kafkaのエコシステム 22 Streams API Producer API Consumer API 3rd party tools Mirror Maker Connect イベント駆動アーキテクチャ Source
  11. Kafka Connect + Kafka Streams API 23 Other System Other

    Systems Kafka Application Topic Topic Processing Processing Topic Topic Topic Topic Streams API Kafka Connect Kafka Connect Source Connector Sink Connector イベント駆動アーキテクチャ Source
  12. イベント管理バス 24 イベント駆動アーキテクチャ Source Event Capture Apache Kafka Kafka Streams

    API ソース システム Fuse / Kafka Connect Decision Manager Event Persistent Storage ターゲット システム Fuse / Kafka Connect Storage / Database Events
  13. エッジ 〜 1,000 データセンター (地域含む) 5 〜 100 ハイブリッド 2

    〜 5 マルチクラウド 2 〜 5 レガシーシステム データソース • AI & 機械学習 • 判断エンジン • プロセスの自動化 • インメモリ • アダプタ • データ処理 • サーバーレス • データ変換 • API管理 イベント駆動連携 データサービス 知的エージェント ストリームデータ基盤 (Kafka) & コンテナストレージ (Ceph) 顧客との接点 顧客に関連する コンテンツシステム 顧客体験に基づく ベストなアクション の導出 最適なチャネルを介して 顧客に価値のあるオファーを提案 25 メール Fax Web履歴 テキスト 情報 モバイル 音声 センサー 顧客イベント 行動データ Kubernetes Operator による運用自動化 カスタマーエンゲージメントハブ データを活用し、高度な顧客体験(UX)を実現するレッドハットのソリューション
  14. コンテナとクラウドネイティブアプリケーションの開発 Red Hat Integration 27 Source ▸ Debeziumによるチェンジ データキャプチャ API管理

    Events & Messaging Enterprise Integration Data Integration ▸ 多様なコネクタ ▸ マイクロサービスのオーケスト レーション ▸ データ変換 ▸ ローコードのiPaaS ▸ Camel Kによるサーバーレス ▸ JMS Message Broker ▸ 広域でのルーティング ▸ Apache Kafkaによるデー タストリーミング ▸ メッセージングのセルフ サービス化 ▸ API Manager ▸ API Gateway ▸ Istio Service Mesh Adapter ツールとメタデータ管理 ▸ Service Registry ▸ API Designer