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 を使用する
- https://cloud.google.com/appengine/docs/standard/go/microservice-performance?hl=ja
- ここに載っていたのだが、いまいちどれを指すのか分からない
- https://cloud.google.com/storage/docs/json_api/v1/how-tos/batch
- これかな。
マイクロサービスのリクエストをトレースする
マイクロサービスベースのアプリケーションを構築すると、連続する Urlfetch の呼び出しによってオーバーヘッドが蓄積されていきます。そのような場合は、Cloud Trace を使用して実行中の呼び出しやオーバーヘッドの発生箇所を確認することができます。ここで重要なのは、Cloud Trace を使用すれば、独立したマイクロサービスが連続して呼び出される場合にもそれらを特定できることです。これにより、コードをリファクタリングして、それらのフェッチを並行して実行することができます。
- Cloud Traceを使用すると追跡が可能
- オーバーヘッドが分かるから便利
構成ファイル
以下の構成ファイルを使うと、アプリのすべてのサービスに適用されるオプション機能を制御できます。
基本的にapp.yamlでいけるけど、サービスをまたがった設定とかはここに書くようだ。
app.yaml 構成ファイル
リソースの設定
- tmpfsが使用出来るようだ
リソースの設定では、最大 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
とりあえず、今回はこれまで。 基本的な内容は押さえたはず。