BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Reactive SummitでMarketoのキャンペーンエンジンをスーパーチャージ

Reactive SummitでMarketoのキャンペーンエンジンをスーパーチャージ

ブックマーク

原文(投稿日:2018/10/24)へのリンク

Marketoはマーケティングオートメーションソフトウェアで、毎月20億件以上の顧客が定義したアクションを実行している。MarketoのエンジニアリングチームのApurva Pawar、Daniel Pugliese、Dennis Bronnikov、およびPei-Chiang Maは、Reactive SummitでシステムのコアをAkkaとリアクティブアプローチでどのように書き直したのかを説明した。AkkaはJVMのアクターモデルフレームワークである。

Marketoは、設定可能なルールに基づいて自動化されたタスクを実行するためにマーケティング担当者に使われている。いくつかのコンテキストを提供するために、基本的な概念は次のとおりである。

  • リード:顧客または潜在的な顧客
  • アクション:リードに対して実行される50以上の操作の1つ
  • (トリガー)キャンペーン:イベントリスナーで発生する1からNの顧客が定義したアクションのセット
  • タスク:顧客が定義した一連のアクション

キャンペーンエンジンは、リワークの中心にあるコンポーネントである。これは、イベントドリブンのフレームワークであり、リード上で実行されるアクションを引き起こす。レガシーシステムには、再設計するに至った、いくつかの欠点があった。

  • マルチスレッドを効率的に活用していない
  • 顧客のサブセットにしかリソースが共有されていない
  • 十分に活用されていないデータベースリソース
  • コンポーネントを独立してスケールアップするのが難しい

これらの欠点を修正するために、チームはプロジェクト目標を設定した。

  • 水平にスケールする
  • 自己修復によるフォールトトレランスの処理
  • 応答性の高いシステムを作成する
  • テナントに公正さと弾力を提供する
  • バックプレッシャーを処理する
  • 一度だけ実行を確実にする
  • 同じターゲットへのタスクの順序を保つ

バックプレッシャーは、プロデューサとコンシューマの間の調整を通じて処理される。永続的キューは、メッセージをバッファリングするために使用されるが、コンシューマが追いつくことができない場合にのみ使用される。これは、コンシューマとプロデューサの間のネゴシエーションによって実現される。メッセージは可能な限り直接プッシュされ、プロデューサの処理が間に合わない場合、永続キューから引き出される。このネゴシエーション手法により、書き込みを99.84%削減でき、1分あたり65,000から300に書き込みを削減できた。

公正さは、アクターデザインで達成される。テナントにより1つのトップレベルスーパーバイザーが作成され、テナントによるシステムリソースの分割をコントロールできる。これにより、より大きなテナントがシステムを独占し、小さなテナントのためにシステムを枯渇させるリスクが軽減される。

リソースの共有は、カスタムシャーディング割り当てによって最適化される。たとえば、データベース接続を頻繁に使用しているスレッドがある。同じノードに存在する同じデータベースの複数のシャードが、負荷の重い状態で接続プールを使い果たす可能性がある。シャードは、異なるノードに分散されるように割り当てられる。他のノードよりも多くのシャードを持つノードもあり、それはリソースの使用を最大限にするために許容される。

リライトの結果、いくつかのパフォーマンスが向上した。スループットは20倍向上した。さらに、CPUコア使用率を75%削減し、使用メモリを33%削減した。

チームは、フォールトトレランス、自己修復、軽量のランタイムフットプリント、高度な並列性、およびアクタードメイン駆動型設計といったソリューションの要点を列挙して結論付けている。また、パイプラインにある次の改良についても言及している。パイプラインでは、akkaストリームを統合し、実行可能な実行帯域幅制御を実装している。

 
 

Rate this Article

Adoption Stage
Style
 
 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

BT