2017.05.23

ロードバランシングトリガーによる負荷分散について

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

みなさん、こんにちは。製品開発部の村田です。

2015年7月9日に開催させていただきました弊社主催のプライベートイベント「TerraSky Day 2015 -クラウドの先に何がある?-」では、たくさんのお客様にご参加いただきまして誠にありがとうございました。
(イベントレポートは こちら から。)
こちらのイベントのセッションにて、「SkyOnDemand」を利用したシステム間連携のテクニックをいくつかご紹介させていただきましたが、本日はその中から「ロードバランシングトリガーによる負荷分散」というテーマを取り上げてご紹介させていただきたいと思います。


SkyOnDemandの連携処理を起動するためのインターフェース

まず、SkyOnDemandの機能として、連携処理を外部から起動するためのインターフェースについてご紹介させていただきます。
SkyOnDemandでは、連携処理を起動するために「トリガー」という機能を備えており、連携処理の起動をスケジューリングするためのトリガーや外部からのアクセスをもとに連携処理を起動するトリガーなど様々なトリガー機能が用意されております。

今回はその中より、「外部からのアクセスをもとに」連携処理を起動する以下トリガーを例にあげて説明を進めさせていただきます。

トリガー名 説明
HTTPトリガー

HTTP(S)のリクエストを受けて連携処理を起動することができるトリガー。
例えば、Salesforceの画面上でボタンを押下した際、特定のURLに対してHTTP(S)リクエストを送信してSkyOnDemand側の連携処理を起動するなど。

Webサービストリガー

Webサービスクライアントからのメソッド実行要求を受けて連携処理を起動することができるトリガー。
例えば、SalesforceのApexコードからのコールアウトによる外部Webサービス実行により実行要求を送信し、SkyOnDemand側の連携処理を起動するなど。

これらのトリガー機能を利用することで、画面からもリアルタイムでの実行指示を行うことが可能となります。


HTTPトリガー・Webサービストリガーの利用例

HTTPトリガーやWebサービストリガーを活用した連携処理としていくつか利用例をご紹介いたします。

  1. マッシュアップ連携
    • Salesforceの画面よりボタン操作で実行し、外部システムのデータを検索し、検索結果を取得する。
      このケースの利用の背景には、以下のような要望があげられます。
      • Salesforce上で別システムのデータを閲覧したい。
      • 複数のアプリの画面をみるのは手間がかかる。
      • 見たいのは一部のデータのみ。
      • セキュリティの観点からデータは保存したくない。
      • Salesforceに保存するとストレージ容量を必要とする。
      • リアルタイムに最新のデータを見たい。
  2. 帳票出力連携
    • Salesforceの画面よりボタン操作で実行し、SalesforceのデータをExcelフォーマットやPDFフォームへ書き込み、ファイルを取得する。
      (または添付ファイルへ保存する)
  3. トランザクション連携
    • Salesforceの画面よりボタン操作で実行し、Salesforceのトランザクションデータを別システムへ受け渡す。
      たとえば、基幹システムへ即時反映させたい場合や、人の手を介してからの実行指示としたい場合などに利用されることがあります。


連携処理の実行イメージ

つぎに、これらのトリガー機能を利用した際、どのような動きとなるのかイメージをお伝えしたいと思います。

HTTPトリガー・Webサービストリガーの実行イメージ

例えば、Salesforceの画面上からのボタンアクションにて連携処理を起動したい場合、上記のような流れとなります。

  1. Salesforce画面にてボタンを押下
  2. SalesforceのApexコードの実装にて、SkyOnDemandに対しHTTPリクエストを送信
  3. SkyOnDemandのHTTPトリガーがリクエストを受けて、連携処理を起動
  4. SalesforceのApexコードでは、連携処理の結果をレスポンスとして受信

レスポンスに画面上に表示したいデータを返却するようにしたり、ファイルを返すようにすることで、利用例にあるような連携を構築できます。


実行指示の負荷について

上記のようなイメージで実現する連携処理ですが、この実行指示が同時に大量に送られるケースが想定される場合や、連携処理側で行う処理が負荷のかかる処理だった場合、SkyOnDemandの連携サーバへの負荷が懸念されます。
HTTPトリガーの場合の呼び出しイメージ


負荷に対しては、連携サーバのスケールアップによりメモリを増設してメモリ効率を良くすることで対処することも可能ですが、今回は、もう一つの方法でもある「負荷分散」が可能となる「ロードバランシングトリガー」という機能についてをご紹介させていただきます。
ロードバランシングトリガーにて負荷分散するイメージ


ロードバランシングトリガーとは

HTTPトリガーやWebサービストリガーの実行をスケールアウトするための機能です。
連携サーバを複数サーバ構築して当機能を利用することで、連携処理を負荷分散させることが可能となります。

当機能の設定画面は以下のイメージです。

  1. メニューの「ロードバランシング」を押下し、一覧画面より「新規」ボタンを押下します。
    ロードバランシングトリガー一覧画面

  2. 新規登録画面にて以下の項目を設定します。
    ロードバランシングトリガー設定画面

    • 「BASIC認証ID」、「BASIC認証パスワード」・・・リクエスト送信時にBasic認証による認証を行うため、IDとパスワードを入力します。
    • 「Authorizationヘッダー文字列」・・・上記ID,パスワードをもとに生成される文字列で、HTTPリクエストのヘッダーに指定する場合に使用します。
    • 「パス」・・・リクエスト送信先となるURLのパスを任意に指定することが可能です。
    • 「連携サーバー/対象サーバー・非対象サーバー」・・・リクエストの転送先サーバーを選択することが可能となります。複数サーバー選択することで負荷分散されます。


まとめ

スクラッチでの開発やオンプレミス版のEAIツールなどを利用して負荷分散の仕組みを構築しようとすると、コストが掛かることは簡単に想像がつきますね。
オンプレミス版のEAIツールを利用した場合の例をあげてみましょう。

  1. 連携用のサーバの追加(筐体、OS)およびセットアップ
  2. EAIツールのライセンス追加およびセットアップ
  3. 実行スクリプトなどの設定移行作業など
  4. ロードバランサーの導入
  5. ネットワーク構成の検討および設定
  6. 上記構築環境の管理(運用・監視・メンテナンス)

それに比較して、SkyOnDemandでは「連携サーバの追加」と「実行スクリプトなどの設定移行作業」は同様に掛かるものの、負荷分散の設定自体は容易に行えるようになっている点やロードバランサーの導入コストや運用管理面などを考えると、非常にメリットがある機能となっております。

ということで、負荷分散が必要となるシステム間連携を構築したい場合は、ぜひ弊社へご相談いただければ幸いです。

それでは、今回はこのへんで終わらせていただきます。次回もご期待ください!!

1 件

関連する記事