目次


Node.js ランタイムに対する自動スケーリングの拡張機能

アプリケーションの弾性を向上させる

Comments

始めに

Auto-Scaling for Bluemix サービスの前のバージョンでは、Node.js アプリケーションに対してサポートされていたメトリックは「メモリー」のみでした。メモリー使用状況を現行のバージョンに取り込むことで、アプリケーションのヘルスを評価し、評価したアプリケーションに追加インスタンスが必要であるかどうかを判断できます。けれども場合によっては、さらに正確にアプリケーションのインスタンス数を制御しなければならないこともあります。

最近、Auto-Scaling サービスで Node.js ランタイムに対する機能強化がリリースされました。この機能強化によって、メトリックのタイプにヒープとスループットの 2 つが追加されています。Node.js 内で主要なメモリー・スキームを構成するのは、ヒープ、スタック、およびコード・セグメントです。このうち、オブジェクトを保管するヒープは、Node.js ガーベッジ・コレクション・メカニズムのオブジェクトであり、Node.js アプリケーションのヘルスを評価する上で重要となります。Web アプリケーションのヘルス状態は、アプリケーションが前回の時間枠内で処理したリクエストの数によって評価することもできます。アプリケーションが処理するリクエスト数が増えると、使用されるリソースが増えて、アプリケーションのヘルス状態が劣化する可能性が考えられます。

この記事では、Node.js アプリケーションを Auto-Scaling サービスの新しい拡張機能にどのようにして適用するのかを具体的に説明します。

アプリケーションを作成するために必要なもの

  • Bluemix アカウント
  • Node.js プログラミングの基礎知識。これには以下の事項も含まれます。
    • Node.js を使用して Web アプリケーションを作成するにはどのようにするのかについての知識
    • Node.js アプリケーションの「package.json」ファイルをビルドするにはどのようにするのかについての知識
  • HTML および JavaScript の知識
  • Node.js アプリケーションを Bluemix にアップロードできる開発環境 (Eclipse など)。
  • Apache JMeter の基礎知識
1

アプリケーションを準備する

アプリケーションを準備するには、以下の手順に従います。

  1. アプリケーションの package.json を更新します。
  2. 以下のコードを使用して、依存関係エントリーとして「bluemix-autoscaling-agent」を作成します。
    "bluemix-autoscaling-agent": "*"
  3. bluemix-autoscaling-agent は、npm からインストールできる Node.js モジュールです。アプリケーションを Auto-Scaling サービス・インスタンスにバインドした後は、このモジュールを使用して、アプリケーションのメトリックを収集して Auto-Scaling サービス・サーバーに送信することができます。
  4. 「スクリプト」内のヒープ制限を、Bluemix 上のアプリケーションに割り当てられているメモリーに応じて設定します。
    "start": "node --max-old-space-size=600 app.js"
  5. ヒープ使用量に応じてスケーリングをトリガーするには、「max-old-space-size」の値を設定する必要があります。この値が設定されていないと、アプリケーションの起動時に、Bluemix アプリケーション内で割り当てたメモリーの量に関係なくデフォルトの Node.js ヒープ制限として 1.4 GB が使用されます。これが原因で、自動スケーリングの決定が正しく行われない場合もあります。
    以下のコードは、更新後の package.json ファイルの内容です。
    {
    	"name": "nodejsdemoapp",
    	"version": "0.0.1",
    	"description": "A sample nodejs app for Bluemix",
    	"scripts": {
    		"start": "node --max-old-space-size=600 app.js"
    	},
    	"dependencies": {
    		"bluemix-autoscaling-agent": "*”
    	},
    	"repository": {},
    	"engines": {
    		"node": "0.12.x"
    	} 
        }
  6. JavaScript のエントリーに以下の行を追加して、アプリケーション内で Auto-Scaling Node.js エージェントが起動されるようにします。
    var agent = require('bluemix_autoscaling-agent');
  7. アプリケーションを Bluemix にプッシュし、「Add a Service or API (サービスまたは API の追加)」をクリックして、アプリケーションを Auto-Scaling サービス・インスタンスにバインドします。
  8. サービス・リストで「Auto-Scaling」をクリックします。
  9. 「Create (作成)」をクリックします。新しく作成された Auto-Scaling サービスが表示されます。Auto-Scaling サービスが、作成したアプリケーションにバインドされた状態になりました。
2

Auto-Scaling ポリシーを作成する

アプリケーションの準備が整ったので、次は、スケーリング・ルールをどのようにして作成するのかを説明します。

サポートされている 3 つのメトリック・タイプのうち、以下に示す画面内では例として「スループット」を使用しています。

メトリック・タイプ「スループット」を選択した画面のスクリーンショット
メトリック・タイプ「スループット」を選択した画面のスクリーンショット
3

アプリケーションにワークロードを適用してアプリケーションのリソース使用状況をモニターする

このチュートリアルでは、アプリケーションにワークロードを適用するために Apache JMeter を使用しました。JMeter によってワークロードが実行されるようになったら、Auto-Scaling ダッシュボードを開き、「Metrics Statistics (メトリック統計情報)」タブに切り替えます。

以下の図に示されているように、ワークロードが実行されているとスループットが増加します。

スループットが 1 秒あたり 50 リクエスト (上限しきい値) に達した状態が 120 秒間 (ベンチ期間) 続くと、以下の図に示されているように新しいインスタンスが作成されて、合計インスタンス数が 2 になります。

まとめ

この記事では、Node.js アプリケーションを Bluemix 上の Auto-Scaling に新しく導入された拡張機能と連動させるにはどのようにするのかを説明しました。これらの新機能は使いやすく、アプリケーションの弾性を向上させるのに役立ちます。IBM Auto-Scaling for Bluemix サービスを利用すれば、定義したポリシーに基づいてアプリケーションの CPU しきい値が自動的に増減されるようになるため、全体のコストも、時間と労力も節約できます。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=セキュリティ
ArticleID=1040463
ArticleTitle=Node.js ランタイムに対する自動スケーリングの拡張機能
publish-date=12082016