13. API
● 分析結果を API として各サービスに提供
○ 機械学習による予測の結果
○ レコメンデーション
● 基本的に Key に対する Value を返せば十分
○ リクエストのたびに予測はしない
14.
15. API
US Region
Our Service
Asia Region
アーキテクチャ
Cloud Load
Balancing
API
Container Engine
Asia
API
Container Engine
US
Cloud
Bigtable
API Data Loader
Worker
Compute Engine
Real-time Processing
Pipeline
Cloud Dataflow
16. API Data Loader
● API で提供するデータを Bigtable へ反映
○ S3 へのファイル配置イベントを SQS へ流す
○ Worker が Receive して Bigtable へ書き込む
17. API Data Loader の利用ケース
● 他チームの API 利用者
● 各種バッチ
● 最大数千万行の Bigtable への Put オペレーション
18. API サーバ
● Scalatra ベース
● GET のみ
○ リクエストパスに Key を含める
○ Key で Bigtable を引き Value を JSON で返す
29. 負荷試験
● 性能劣化, ボトルネックの確認
● 2つの GKE クラスタを作成
○ Loader と API
○ Preemptible VM を利用
● GKE クラスタ, k8s リソースの作成, 削除が軽快
○ CI にも組み込みやすい
30. Loader と API
● Locust で負荷試験シナリオを作成
● Job で Loader の Pod をデプロイ
○ Pod の再作成を防ぐ
■ locust … || exit 0
● Deployment で API の Pod をデプロイ
○ Service は type: LoadBalancer
31. 複数の負荷試験
● CI では同時に複数の負荷試験をしたい
○ API の Service の externalIPs は固定しない
○ 動的に API の IP アドレスを変更したい
● 変更可能にするため sed を挟む
■ cat job.yml | sed -e
“s/__IP__/${IP}/g” | kubectl
create -f -
50. Flatten 後の副入力あり ParDo 変換
● エラーが発生してパイプラインが実行されない
○ GetData failed: status: APPLICATION_ERROR(3):
Computation F64does not have state family S1 for
value read