LoginSignup
14
7

More than 5 years have passed since last update.

GAE/Go の go1.11(2nd-gen) ランタイムが今どんな感じか改めて試してみた

Posted at

GAE/Go 1.11 の次世代ランタイム(2nd-gen)がリリースされたタイミングで 早速GAE/Go go1.11の次世代ランタイム試してみた という記事を書きましたが、その後どんな感じになったか、既存の Go1.9 で実装されているアプリケーションが比較的容易に移行できそうかという観点で改めて触ってみました。

GAE/Go1.11 (2nd-gen) は 2019/01/10 の今日現在まだ Beta バージョンとなります。
また、近い将来、 Datastore も Firestore Datastore モードへの移行があるので、 Datastore 周りのパフォーマンスはこの限りではない可能性があります。
https://cloud.google.com/datastore/docs/upgrade-to-firestore

確認の観点

主に、 go1.9 (1st-gen) のランタイムで動いていたアプリケーションが大きな変更をせずとも、 appengine ライブラリを利用したまま go1.11 (2nd-gen) ランタイムで動作させ、運用に支障がない(ログがリクエストスコープでまとまる、 trace が出るなど基本的な)ことを確認しています。

  • ログ
    • リクエストスコープで 1st-gen と同様にまとまるか
  • Trace
    • Datastore へのアクセスの Trace が表示されるか
    • urlfetch を利用した外部サイトへのアクセスの際に Trace が表示されるか
  • TQ
    • delay package が利用できるか
  • パフォーマンス
    • 東京リージョンでのリクエスト応答時間
    • Datastore の応答時間 (appengine library)
    • Datastore の応答時間 (Cloud Datastore library)
    • 外部サイトへの接続パフォーマンス (urlfetch)
    • 外部サイトへの接続パフォーマンス (http.get)
    • デプロイ時間(ざっくり)

という感じです。

確認に利用したコードは こちら になります。

1. ログがリクエストスコープでまとまるか

コードは こちら です。

実行結果として、1st-gen と同様にログがまとまって表示されます。

スクリーンショット 2019-01-08 15.38.09.png

ログの出力はそのまま移行できそうです。

2. Datastore へのアクセスの Trace が表示されるか

コードは こちら になります。

Datastore への書き込みの場合

スクリーンショット 2019-01-08 15.58.21.png

Timeline 上に Put の Trace が問題なく表示されます。

Datastore の読み込みの場合

スクリーンショット 2019-01-08 16.34.31.png

同様に Timeline 上に Get の Trace が表示されます。

いずれも appengine パッケージを利用すればそのまま移行できそうです。

TQ の delay パッケージが利用できるか

問題ないはずですが一応確認。

コードは こちら になります。

スクリーンショット 2019-01-08 18.13.01.png

TQ を詰め込んだリクエストのログも、 TQ で起動されたリクエストのログも両方出力されているので、問題ないです。

ただし、 go1.9 のアプリケーションで詰んだタスクを go1.11 で実行しようとするとうまくいきませんでした。

東京リージョンでのリクエスト応答時間

リクエスト応答時間の確認には こちら のコードを利用しました。

内部的にはログを吐いているだけで何もしていません。

ざっくりですが、

項目 応答時間
ブラウザ上 35 msec 近辺
GAEのログ上 3-4msec 近辺

という感じで問題なさそうです。

Datastore 応答時間(Appengine ライブラリ)

確認に利用したコードは こちら です。

Datastore への書き込み

スクリーンショット 2019-01-09 15.31.53.png
スクリーンショット 2019-01-09 15.36.22.png

平均 22 msec ぐらい

Datastore からの読み込み

スクリーンショット 2019-01-09 15.40.59.png
スクリーンショット 2019-01-09 15.36.44.png

たぶん、平均 10 msec ぐらい

Datastore 応答時間(Cloud Datastore ライブラリ)

確認に利用したコードは こちら です。

Datastore への書き込み

スクリーンショット 2019-01-09 15.50.10.png

ちょっと遅いです。
たぶん、平均 100 msec ぐらい

Datastore からの読み込み

諸般の理由で行わず。w

外部サイトへの接続(urlfetch)

確認に利用したコードは こちら になります。

スクリーンショット 2019-01-10 14.39.09.png
スクリーンショット 2019-01-10 14.39.36.png

思ってたよりだいぶ速いのですが、
平均で 3 msec ぐらい

外部サイトへの接続(http.get)

確認に利用したコードは こちら です。

スクリーンショット 2019-01-10 14.53.25.png

trace はもちろんそのままでは出ません。
スクリーンショット 2019-01-10 14.54.00.png

こちらが
平均で 1.1 msec ぐらい。

デプロイ時間

だいたい 3分半 ぐらい(コード量殆ど無いアプリケーションで)

まとめ

  • ログがリクエストスコープでまとまらないのがいつの間にやら update されてまとまるようになっていた。
  • 前回の記事を書いた時点ではパフォーマンス怪しげだったが、ほぼ問題ないレベルになっていました。(Tokyo リージョン)
  • Cloud Build 経由のデプロイになるため、デプロイ時間はちょっと遅くなります。

ということで、GAE/Go 1.11 が GA になるタイミングでは 1.9 -> 1.11 移行をしても比較的問題がなさそうな雰囲気じゃないかなと思います。
Go1.11になることで、プロジェクトがgopath配下に置く必要がなくなるので(go mod利用)、CDなどは少しやりやすくなりそうです。

それでは。

14
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
7