雑なメモ書き

気楽にいきます

AppEngineをみてみる (2)

前回: https://hiroyukim.hatenablog.com/entry/2019/01/08/232702

とりあえず、今回も気になったところをメモ。

Capabilities Go API の概要

Capabilities API を使用すると、特定の API 機能の停止や予定されているダウンタイムをアプリケーションで検出できます。この API を使用すると、特定の機能を利用できないことを検出してバイパスできるので、アプリケーションのダウンタイムを短縮できます。capability パッケージの内容を確認するには、capability パッケージ リファレンスをご覧ください。

  • APIの機能停止の検出
  • ダウンタイムの検出
func handler(w http.ResponseWriter, r *http.Request) {
        ctx := appengine.NewContext(r)
        if !capability.Enabled(ctx, "datastore_v3", "*") {
                http.Error(w, "This service is currently unavailable.", 503)
                return
        }
        // do Datastore lookup ...
}
  • handler内部でサービスのダウンを検出出来るのはいいな

Google アナリティクスとの統合

App Engine にはアプリケーションのイベントのログのメカニズムがすでに用意されていますが、Google アナリティクスで特定のサーバー側イベントを追跡することに利点がある場合があります。次のような利点があります。

  • 履歴データ アナリティクス
  • 重要なイベントのトラッキング

サンプルコードにGoが見当たらないんだがいけるのかなこれ。

ウォームアップ リクエストを構成してパフォーマンスを改善する

  • 暖機運転がデフォルトでついてるのはすごい

アプリケーションでウォームアップ リクエストが有効化されていると、App Engine は新しいインスタンスがアプリケーションで必要になるタイミングを検知し、ウォームアップ リクエストを開始して新しいインスタンスを初期化しようとします。しかし、この検知がいつもうまくいくとは限りません。アプリでウォームアップ リクエストが有効化されていても読み込みリクエストが発生するケースがあります。たとえば、現在トラフィックを処理していないアプリに対する最初のリクエストは必ず読み込みリクエストであり、ウォームアップ リクエストとはなりません。

  • app.yamlに設定を足すだけでいける
inbound_services:
- warmup

handlers:
- url: /_ah/warmup
  script: _go_app
  login: admin

バッチ API を使用する

マイクロサービスのリクエストをトレースする

マイクロサービスベースのアプリケーションを構築すると、連続する Urlfetch の呼び出しによってオーバーヘッドが蓄積されていきます。そのような場合は、Cloud Trace を使用して実行中の呼び出しやオーバーヘッドの発生箇所を確認することができます。ここで重要なのは、Cloud Trace を使用すれば、独立したマイクロサービスが連続して呼び出される場合にもそれらを特定できることです。これにより、コードをリファクタリングして、それらのフェッチを並行して実行することができます。

  • Cloud Traceを使用すると追跡が可能
  • オーバーヘッドが分かるから便利

構成ファイル

以下の構成ファイルを使うと、アプリのすべてのサービスに適用されるオプション機能を制御できます。

基本的にapp.yamlでいけるけど、サービスをまたがった設定とかはここに書くようだ。

app.yaml 構成ファイル

リソースの設定

リソースの設定では、最大 8 ボリュームの tmpfs を指定することができます。tmpfs により、共有メモリを必要とするワークロードを有効化することができ、ファイル システム I/O を改善することができます。

resources:
  cpu: 2
  memory_gb: 2.3
  disk_size_gb: 10
  volumes:
  - name: ramdisk1
    volume_type: tmpfs
    size_gb: 0.5

とりあえず、今回はこれまで。 基本的な内容は押さえたはず。