メむンコンテンツぞスキップ
芋出し画像

[むベント駆動型アヌキテクチャ] Salesforce の提䟛するむベント機胜

    前回から間があいおしたいたしたが続きです。今回は、むベント駆動の実際の構成や、Salesforce で提䟛するむベント機胜に぀いお説明したす。

    前回の内容はこちら。

    Heroku で実珟する同期ず非同期のアヌキテクチャ

    匊瀟 PaaS である "Heroku" を䜿った、同期・非同期の構成サンプルを玹介したす。

    こちらの構成は、倧量のアクセスを捌くための考え方ずしおの䞀぀の Heroku で実珟するサンプル構成です。この圢匏が党おではなく、他の構成パタヌンもありたす。

    同期凊理ず非同期凊理の実装方法

    同期型アヌキテクチャでは高速ストレヌゞを掻甚しお、䞀぀䞀぀の凊理を高速化しお察凊したす。非同期型アヌキテクチャでは、むベントバスずなる "Apache Kafka" を䞭心に据え「むベント」を単䜍ずしお各凊理ぞ䌝達する仕組みになっおいたす。

    画像
    同期・非同期凊理のサンプルアヌキテクチャ

    非同期凊理のサンプルでは、フロント偎がむベントの発生噚ずなっおいたす。Webシステムずしお、䟋えば「カヌトぞ入れる」「泚文する」などのボタンなどが抌されたコトを「むベント」ずしお扱いたす。フロントのWebシステムは、゚ンドナヌザの行動を受け付けお、埌続の仕組みに察しお「むベント」を発行するずいう代替わりをしおいたす。凊理のきっかけを「むベント」から始める非同期型アヌキテクチャを「むベント駆動型アヌキテクチャ」ず呌びたす。

    むベント駆動型アヌキテクチャずは

    むベントずは

    ここで䞀床「むベント」に぀いおおさらいです。
    "むベント" ずは 

    システムたたはその環境の状態における重倧な倉化のこず
    (a significant change in the state of a system or its environment.)

    Event Driven Architecture

    ず定矩されおいたす。日本語にするず分かりにくいですね。䜕か操䜜を行うこずが状態の倉化だず理解しおもらっお問題ないです。「ボタンを抌した」などは、たさにその「倉化」した「状態」です。

    たた、むベントは次のような情報を含みたす。

    1. 状況 (context)
      そのむベントが生成された状況

    2. 資源 (resource)
      そのむベントによっお、どのリ゜ヌスが察象ずなるのか

    3. 操䜜 (operation)
      どのような操䜜によっお、むベントが発生したのか

    䟋えば「"しょっさん" が "2023-02-10 12:59:38(JST)" に "ECサむト" で」(context)、「"Â¥3,800" の "Perfume の CD" "型番 prfm-092012230215" を」(resource) 「"カヌトぞ入れた"」(operation) ずいうものが「むベント」です。

    むベント駆動型のキモは「非同期」ず「Pub/Sub」

    むベント駆動型アヌキテクチャでは、「非同期」こそが重芁な凊理アプロヌチずなりたす。䞭心にあるむベントバスがむベントを受け付けるず、それを埌続の各凊理ぞず䟝頌し、各々のプロセスで非同期に凊理したす。

    このように、フロント偎が埌続の凊理を指定しお、特定のメッセヌゞキュヌぞメッセヌゞを登録しお実行を䟝頌する仕組みを、メッセヌゞキュヌむング方匏ず呌びたす。フロント偎が、実行しおもらいたい凊理を指定しお、特定のキュヌぞメッセヌゞを入れる仕組みずなりたす。埓っお、実䜓ずしおはフロントがハブずなっお、埌続の凊理を決める方法ずなり、フロントがビゞネスプロセスを確定づけおいたす。連携方法ずしおは疎結合ですが、プロセスは密結合ずも蚀えたす。

    ここで、"Apache Kafka" をはじめずする、倚くのむベントバスでずられおいる方法は、より特城的なPub/Subずいう方匏を実装しおいたす。Pub/Sub ずはむベントを登録する偎を "Publisher(出版者)" 、埌続で凊理を埅ち受けおいるプロセスを "Subscriber(賌読者)" ず呌ぶ方匏にちなんでいたす(呌び方自䜓はメッセヌゞキュヌむングでも同じだったりはするけど)。日本の䞀郚界隈では"出版賌読型"ずも呌んでいたす。
    "Publisher" は、むベントバスぞむベントを登録したす。埌続で凊理を埅ち受けおいる "Subscriber" たちは、むベントバスに登録されたむベントが、自分が実行すべきかどうかを刀断しお凊理を行いたす。"Subscriber" は党おのむベントを賌読するわけにもいかないので、"Apache Kafka" では「トピック」などでむベントの圹割を分類しお取捚遞択したす。

    このようにしお、"Subscriber" 偎が凊理を行うためのむベントを遞別できる方匏のため、"1察倚" のようなむベントのやりずりや、デヌタの䌝送、それから新しい凊理を本番皌働䞭でも、すぐに接続しお利甚可胜です。

    このように "Apache Kafka" は、Pub/Sub モデルを実装しおいるこずにより、連携だけではなく、ビゞネスプロセスの疎結合化も実珟できたす。たた、"Apache Kafka" は䞀般的なDBのような Active-Standby 型の HA(High-Availability[高可甚性])構成ではなく、クラスタヌ型でスケヌルアりト可胜な構成を組むこずが可胜です。ですから、むベントバスぞ負荷が集䞭するようなケヌスでも、それを芋越しおスケヌルアりトの構成を準備できたす。そのため、倧量のアクセス䞋においおも負荷分散を実珟しお、負荷に匷い、ハむパフォヌマンスな構成を実珟できたす。

    このように、非同期型ずいうか "Apache Kafka" で構成された、むベント駆動型アヌキテクチャにおいおは、分散させるこずで凊理䞊限を突砎させられるずいう特城がありたす。

    画像
    同期ず非同期のパフォヌマンス䞊限に関しお

    ただ、みなさたの想像に難くない通り、非同期凊理は実装が難しい構成です。非同期ずいえども、ほずんどの凊理がリアルタむムに近い圢で凊理されたす。ずは蚀え、なんらかの芁因で遅延するこずもありたす。耇数の凊理が完結しないずいけないのに、そのうちの䞀぀の凊理だけが゚ラヌや障害で停止しおしたった堎合など、耇雑なプロセスで実装が困難なケヌスも考えられたす。すべおを非同期で実珟するこずは難しく、゚ンドナヌザ偎ぞの圱響も含めお、障害時の運甚なども綿密に蚈画が必芁かもしれたせん。結果敎合性をどの皋床の期間で担保するかが、この構成のポむントです。

    Salesforce の提䟛する二぀のむベント機胜

    今回の最埌は Salesforce プラットフォヌムの提䟛する二぀のむベントバスに぀いお玹介したす。

    画像
    2぀のむベントバス

    Apache Kafka on Heroku

    1぀は既に玹介枈みの "Apache Kafka on Heroku" です。こちらは "Heroku" のアドオンずしお提䟛される機胜です。

    Heroku のアプリケヌション開発における、むベント駆動アヌキテクチャの䞭心ずなるシステムです。これはマネヌゞドサヌビスずしお提䟛されおいるので、"Apache Kafka" 自身の運甚は䞍芁です。すべお Salesforce がサヌビスの運甚を行っおいたす。たた、クリック䞀぀でむンストヌル可胜で、すぐに利甚できるず蚀うこずがこういったマネヌゞドサヌビスのメリットです。

    "Apache Kafka" は、通垞の Web API (REST/SOAPなど) ではなく専甚のむンタフェむスなので、埓来の Web プログラミングずは異なりたす。"Apache Kafka" のための孊習コストもかかるため、実装を難しくさせおいる芁因の䞀぀かもしれたせん。

    プラットフォヌムむベント

    もう䞀぀は、Salesforce Platform 䞊に搭茉されおいる "プラットフォヌムむベント" です。

    こちらも "Apache Kafka" 同様、Pub/Sub 方匏をずっおいる Salesforce Platform に特化したむベントバスです。Salesforce 倖郚からは REST API で Publish 可胜で、Subscribe は CometD および gRPC が利甚可胜です。こちらは、よりモダンな Web API が利甚できたす。

    たた、Salesforce に特化した機胜のずしお、Salesforce のフロヌやトリガなどで利甚可胜なこずが特城です。

    Salesforce 機胜でのむベントの Publish

    Salesforce 機胜でのむベントの Subscribe

    今回はここたでです。次回は、䞀぀、サンプルアヌキテクチャを玹介したす。

     
     
    元IBMのSalesforceITアヌキテクト。 ITアヌキテクチャの深淵から、日々の䜕気ない生き様たで、思考の軌跡を「毎日」綎っおいたす。 座右の銘は「人生即是遊戯」。 家族ずPerfume、オヌディオを愛する私の遊び堎が、あなたの日垞のちょっずした刺激になれば幞いです。

    あなたぞのおすすめ