文系プログラマによるTIPSブログ

文系プログラマ脳の私が開発現場で学んだ事やプログラミングのTIPSをまとめています。

GAE/Node.js Standard Environmentでスピンアップからテキストが返るまでの速度をゆる〜く確認する

appengineに待望のNode.js standard environmentが正式リリースされたので、早速計測してみました〜


f:id:treeapps:20170917230836p:plain

前回のあらすじ

www.bunkei-programmer.net

GAE/Javaは8になってもやはり初動が遅かったのだ。というかGAE/Java1.7とほとんど違いは無かったのだ。

www.bunkei-programmer.net

GAE/Goは(javaと比較すると)くっそ速かったのだ。

そしてGAE/Node.jsが出たので計測してみたのだ。

計測の仕方

前回のGAE/Java8の時と同様に、インスタンスを削除して、必ずスピンアップが発生する状態で計測します。
www.bunkei-programmer.net

環境

リージョン asia-northeast1
Runtime Node.js v8
Framework Express v4.16.3

計測に使用したソースコード

以下の公式サンプル(最小のhello world)を使用して計測しました。
github.com

javascriptは1ファイルで、以下のように非常に短いコードです。

'use strict';

// [START app]
const express = require('express');

const app = express();

app.get('/', (req, res) => {
  res.status(200).send('Hello, world!').end();
});

// Start the server
const PORT = process.env.PORT || 8080;
app.listen(PORT, () => {
  console.log(`App listening on port ${PORT}`);
  console.log('Press Ctrl+C to quit.');
});
// [END app]

スピンアップしてフレームワークを初期化してテキストが返るまでの速度

前回やったのと同じです。インスタンスが0のスピンダウンした状態からリクエストを受け、実際にフレームワークがテキストを返し終えるまでの時間を計測します。

計測1回目

f:id:treeapps:20180613230902p:plain

計測2回目

f:id:treeapps:20180613230915p:plain

計測3回目

f:id:treeapps:20180613230925p:plain

計測4回目

f:id:treeapps:20180613230935p:plain

計測5回目

f:id:treeapps:20180613230946p:plain

結果と平均値まとめ

1回目 2回目 3回目 4回目 5回目 平均値
0.809秒 0.572秒 0.539秒 0.755秒 0.583秒 0.6516秒

結果は平均 0.6516秒 となりました。

では今まで計測した、GAE/Gonalg + gin、GAE/Java7 + servletと比較してみましょう。

ランタイム 1回目 2回目 3回目 4回目 5回目 平均値
java8 + spark fw 5.16秒 5.33秒 5.58秒 5.07秒 5.24秒 5.276秒
java7 + servlet 3.65秒 3.40秒 3.82秒 3.78秒 3.94秒 3.718秒
go + gin 0.506秒 0.377秒 0.601秒 0.501秒 0.494秒 0.495秒
node.js + express 0.809秒 0.572秒 0.539秒 0.755秒 0.583秒 0.6516秒

golangが最速ではありますが、node.jsはgolangより0.2〜0.3秒程度遅いだけなので、十分なパフォーマンスが出ているように見えますね。

雑感

思ったよりGAE/Node.jsが高速で良かったです!

GAE/Node.jsは最近Googleが発表された軽量コンテナ環境のgVisorが使われているそうですが、特に遅い事もなく、非常に良い印象です。

www.publickey1.jp


現状私は以下の2サイトをGAEで運用していて、両サイトともGAE/Golangです。
www.tree-maps.com
www.string-utility.com

Golangなので、react・angularのSSRは捨てていました。しかし今回待望のNode.jsがリリースされたので、順次Node.jsに移行していこうと思っています。

平均0.2〜0.3秒程度遅くなるかもしれませんが、SSR可能になる事を考慮すると、その遅延は大した事ないかな?と想像しています。

いつ移行できるかまだ解りませんが、移行したら何らかの形で告知しようと思います!