nodeバックエンドサービスの確保の実現

2772 ワード

ことばを引く
現在のプロジェクトではnodeを使って、簡単なバックエンドサービスとして、ますます多くのオンライン業務のサービスを引き受けるにつれて、サービスの安定性が要求されます。プロセスが終了したら自動的に再起動する能力があります。
forever
foreverは簡単なコマンドラインツールであり、与えられたスクリプトが継続的に実行されることを保証します。foreverは完全にコマンドライン操作に基づいて、foreverプロセスの下で、nodeのサブルーチンを作成し、monitorを通じてnodeサブルーチンの実行状況を監視し、ファイルが更新されると、またはプロセスが中断され、foreverは自動的にnodeサーバを再起動し、アプリケーションが正常に実行されることを確保します。
foreverのプログラムを見てみましょう。主なプロセス制御に関するコードアドレス
startの方法

let child_process = require('child_process')
let spawn = child_process.spawn

Monitor.prototype.start = function (restart) {
 var self = this,
   child;

 child = this.trySpawn();

 ...
 return this;
};
Monitor.prototype.trySpawn = function () {
 var run = this.parser(this.command, this.args.slice()),
   stats;

 return spawn(run.command, run.args, this.spawnWith);
};

コアはnode appiの中のspawnを使って、サブルーチンを作成します。このサブルーチンは私たちが本当に必要とするnodeエンドサービスです。
オートレスター
父と子のプロセスの通信の核心は、保活のために、主に子プロセスを监视しています。つまり、守られているプロセスのexitイベントです。

 child.on('exit', function (code, signal) {
  var spinning = Date.now() - self.ctime < self.minUptime;
  child.removeListener('message', onMessage);
  self.emit('exit:code', code, signal);

  function letChildDie() {
   self.running = false;
   self.forceStop = false;
   self.emit('exit', self, spinning);
  }

  function restartChild() {
   self.forceRestart = false;
   process.nextTick(function () {
    self.start(true);
   });
  }

  self.times++;

  if (self.forceStop || (self.times >= self.max && !self.forceRestart)
   || (spinning && typeof self.spinSleepTime !== 'number') && !self.forceRestart) {
   letChildDie();
  }
  else if (spinning) {
   setTimeout(restartChild, self.spinSleepTime);
  }
  else {
   restartChild();
  }
 });

ロジックは簡単で、二つのシーンに分けて、一つはサブプロセスを再起動しないでほしいです。一つは突然終了した後の再起動です。ここではspinning値との判断、つまり終了後に再起動の時間間隔があります。
親子プロセス通信
メッセージイベントを傍受し、send方式でイベントを送ることで、親子のプロセス通信を外部の制御として実現することができます。ここで注意したいのですが、nodeバックエンドサービスの実行中に多くのログが出力されます。この時はサブプロセスにおいて、コンソール出力が表示されれば、オプティクス.stdio属性が使用できます。
締め括りをつける
生存を保つシーンが多いです。ここではforeverライブラリを使って処理できます。監視とログ機能を合わせて、オンライン環境の安定を保証します。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。