june 3, 2019 updated: web アプリ開発 gcp のサーバーレスで · firebase...
TRANSCRIPT
Updated: June 3, 2019
GCP のサーバーレスでWeb アプリ開発
自己紹介
Kazuu (かずー) @kazshinohara
Google Cloud のカスタマーエンジニア。
デジタル系エンタープライズのお客様を担当。
得意分野はサーバーレスや DevOps など。
趣味は猫と写真と旅行。
そもそもサーバーレスって?
No InfraManagement
Fully Managed Security
Pay only for usage
GCP のサーバーレスはフルスタック
Compute
Data Analytics ML & AI
Database & Storage
Smart assistants &
chat
DevOps
Messaging
Web アプリケーションを開発する際に考えること
1. コンピュート(アプリをどこで動かすか)
2. データベース
3. 非同期処理
4. 静的コンテンツ
5. コード管理・ビルド・デプロイ
6. モニタリング・ロギング・APM
1. コンピュート
2. データベース
3. 非同期処理
4. 静的コンテンツ
5. コード管理・ビルド・デプロイ
6. モニタリング・ロギング・APM
Web アプリケーションを開発する際に考えること
コンピュート
GCP のサーバーレスコンピュート
App Engine
Apps
Cloud Functions
Functions
Cloud Run
Containers
NEW!
https://cloud.google.com/serverless-options/?hl=en
サーバレスコンピュート公式使い分けチャート
01Cloud Functions
{}
イベントドリブンなサーバーレス コンピュート プラットフォーム
Cloud Functions
イベントドリブン
HTTPFirestorePub/SubCloud SchedulerCloud StorageFirebase
サーバーレス
サーバー管理なし
スケールアウトが高速
ゼロにまでスケールイン
パッチなどの更新なし
使った分だけ支払い
サポートランタイム
Node.js 6, 8, 10beta
Python 3.7Go 1.11, 1.12alpha
Java 8alpha
Cloud Functions ユースケース例
①画像をアップロード
②関数をトリガー
③画像のラベリング
Cloud FunctionsCloud Storage Cloud Vision API
使い所と気にすべき制約
使い所
Pub/Sub and/or Cloud Storage を使って
いる場合
ランタイム環境は管理したくない
データ処理 (ETL)
サービス間連携
気にすべき制約
関数レベルの粒度
イベント経由
ランタイム言語に縛り
02App Engine
高いスケーラビリティを持つサーバーレス Web アプリケーション
App Engine standard environment
管理が容易
サーバー管理なし
スケールアウトが高速
ゼロにまでスケールイン
パッチなどの更新なし
開発しやすい
アプリのコードに集中できる
バージョニング
トラフィックスプリット
サポートランタイム
Java
Python
Go
PHP
Node.js
Ruby alpha
{}
App Engine ユースケース例
Back End AppApp Engine
Cloud Tasks
Front End AppApp Engine
In-memory cacheCloud Memorystore
Dynamic dataCloud Firestore
スタンダード スタンダード 第2世代 フレキシブル
Python 2.7Java 8
PHP 5.5Go 1.9 and Go 1.11
Python 3.7PHP 7.2Node.js
Go 1.12 (beta)Ruby (alpha)
Node.js, Ruby, Java, Python, Go, PHP, .NET
& カスタムコンテナイメージ
サンドボックス化されたプロセスとして動作 マネージドのVM上で動作
GAE 独自の API + GCP のAPI GCP の API を直接呼び出し
バイナリモジュールや使えるライブラリに制約がある
エクステンションやバイナリ、ライブラリなど自由に利用可能
App Engine のランタイム
App Engine で実現できる柔軟なデプロイ
v1 v2 v1 v2 A B
example.com example.com example.com
一気に切り替え 最初は少数だけ 並行稼働
ブルーグリーンデプロイメント
カナリアリリース
A / B テスト
使い所と気にすべき制約
使い所
HTTP/S request-response
ステートレスなアプリケーション
急激なトラフィック増に耐えないと
いけないアプリケーション
気にすべき制約
スタンダード
● Runtimes for Python, Java, PHP, Go, Node
● HTTP/S only
フレキシブル
● Docker の制約を継承
● トラフィックが少ないサイトには不向き
03Cloud Run
Knativeopen source building blocks for serverless on Kubernetes
Cloud Run
高速なデプロイ
ステートレスなコンテナ
言語やライブラリの制約なし
数秒でデプロイし URL を付与
サーバーレス ネイティブ
管理するサーバーはなし
コードに集中
高速に 0 to N スケール
きっちり使った分だけお支払い
高いポータビリティ
どこでも同じ Developer Experience フルマネージでも GKE のクラスタ上でも
Knative の一貫した API の一貫性
ロックインの排除
Cloud Run完全にサーバーレス
管理するクラスタ無し
使った分だけお支払い
Cloud Run on GKEGKE のクラスタ上でサーバーレス
体験
費用は GKE のクラスタに含まれ
る
2 つの Cloud Run
Cloud Run ユースケース例
サービング用データ準備
データのロード
メッセージの処理
重複排除 デコード データ判別
メッセージの取得
Http Webhook
Push
Webとしてサービング
スケジュール
IoT devices
使い所と気にすべき制約
使い所
ステートレス
HTTP/S request-response workloads
スパイクが多い、読めないなど
Specific なランタイム要件や依存性
気にすべき制約
コンテナを必ず使わないといけない
ビルドプロセスを決めないといけない
データベース
In-memory RelationalNon-relational
Cloud Firestore
Cloud Memorystore
Cloud Bigtable
Cloud SQL
Cloud Spanner
Managed Redis Serverless, scalable document store
Managed MySQL & PostgreSQL
Scalable relational database
Low latency, scalable wide column store
Data warehouse
BigQuery
Enterprise data warehouse
GCP のマネージド データベースサービス
https://cloud.google.com/storage-options/?hl=ja
In-memory RelationalNon-relational
Cloud Firestore
Cloud Memorystore
Cloud Bigtable
Cloud SQL
Cloud Spanner
Managed Redis Serverless, scalable document store
Managed MySQL & PostgreSQL
Scalable relational database
Low latency, scalable wide column store
Data warehouse
BigQuery
Enterprise data warehouse
GCP のマネージド データベースサービス
01Cloud Firestore
Cloud Firestore
● NoSQL データベース
● 強整合性
● 高い可用性
○ マルチリージョンで 99.999%
○ リージョナルで 99.99%
● 2 つのモード
○ ネイティブモード (Realtime)
○ Datastore モード
Firebase SDK によるサポート
Firebase Auth
Security Rules
Cloud Functions
Firebase HostingApp + Client SDKs Cloud Firestore
リアルタイムにデータを同期
データに変更があった時、リ
アルタイムに近い速度でデー
タを同期。マルチユーザー向
けのモバイルアプリに最適。
Cloud Firestore のデータ構成
name: "Cloud Firestore について"description: "Cloud Firestore はフルマネージドな NoSQL データベースです"...
My First Note
name: "関連資料"description: "Cloud Firestore の関連資料"...
My Other Note
iOS
Android
Web
Authentication3rd Party
Event Store
Writes
Real time updates
Custom API
Static content
Event Info retrieval
Writes
Cloud Firestore のユースケース例
Firebase Auth
02Cloud SQL
Cloud SQL
● フルマネージドのリレーショナルデータベース
● MySQL と PostgreSQL 、SQL Server(Alpha) をサ
ポート
● 高いパフォーマンス
○ 64 コア、400GB まで瞬時にアップグレード可能
● 高可用性構成で99.95%
高可用性構成 ( PostgreSQL の場合)
• プライマリインスタンスとセカンダリインスタンスを異なるゾーンに配置
• リージョナル永続ディスクを使い全ての書き込みを同期、レプリケーション
• プライマリインスタンスが正常な状態でなくなると、セカンダリインスタンスが昇格
• フェイルオーバーはほぼ 60 秒以内に行われる
Cloud SQL への接続
接続パス• パブリック IP
• インターネットを経由し、どこから
でもアクセス可能
• プライベート IP• Virtual Private Cloud (VPC) を
使いプライベートアクセス
認証• Whitelisting IP
• 接続を許可する IP のリストを作成
• 許可された SSL 証明書 • クライアントからの接続を許可する
SSL 証明書
• Cloud SQL プロキシ
• アプリからはローカル接続の認証
に見える。セキュアにインスタンス
にアクセス。
03Cloud Spanner
Cloud Spanner
● グローバルに分散され、強整合性を備えたデータ
ベース サービス
● リレーショナル データベースの構造と非リレーショナ
ル データベースの水平スケーラビリティを兼ね備え
る
Cloud Spanner とは何か?
リレーショナルセマンティック
スキーマ、ACID トランザクション、SQL クエリ
水平スケール高可用性 99.999% SLA、
フルマネージドで水平スケーリング
+
RDB と非 RDB、両方の特徴を持っている
使い所
● リレーショナルなデータ
● 高いスケーラビリティが求めら
れるアプリケーション
● 高い可用性要件を持った
アプリケーション
気にすべき制約
● 既存 DB との互換性
(独自のテーブル設計が必要)
● リージョン間レプリケーションの
提供エリア
使い所と気にすべき制約
非同期処理
Cloud Tasks
信頼性の高いタスクのオフロード
フルマネージドのタスクキュー: 長時間の非同期タスクも確実にディスパッチ。インフラ管理
なし、使った分だけお支払い。
レート制御 と 再試行
必要なスループットに合わせてレート制御 や 再試行の設定が可能。
HTTP/S Auth (IAM) を使った柔軟なタスクルーティング
GCP 内外のサービスに対してセキュアにタスクをディスパッチ。
マイクロサービス間の非同期タスク向けキューイングシステム
sendEmail function
New user signup 30-day
reminder30 days later
'schedule_time': '2019-05-11T00:00:00'
タスクをスケジュールして実行
Dispatch
10 tasks/s
Dispatch
3 tasks/s
'max_dispatches_per_second': '3'
レートの制御
'max_attempts': '3''min_backoff': '600' [wait 10 mins to retry]'max_retry_duration': '1800' [attempt for 30 mins]
Machine Learning model training service
Delay tolerant ML model training task ML model
training taskExecuted every
night
タスクの再試行
User submits async task request
User login service
Image Upload Service
Translation service
User profile service
Google Cloud Functions
GKE: Google Kubernetes Engine
On Prem Server
Cloud Run and Cloud Run on GKE
NEW! NEW!
OAuth/OIDC JWT
HTTP/S
HTTP/S Auth (IAM) ターゲット
静的コンテンツ
Cloud Storageを使った静的コンテンツ配信
Back End AppApp Engine
Cloud Tasks
Front End AppApp Engine
In-memory cacheCloud Memorystore
Dynamic dataCloud Firestore
Static filesCloud Storage
一般公開されたものはデフォルトで3600sec の Cache-Control が設定される(エッジキャッシュされる)
まとめ
● GCP のサーバーレスを活用することでインフラ管理のないモダンな
Web アプリケーション開発が可能
● コンピュートもデータベースも特徴的なサービスが複数ある、開発要件
に合わせて適材適所するのがオススメ
● モニタリング・ロギング、ビルド・デプロイなどのサービスもあるので、や
ろうと思えば GCP で開発・運用を完結することも
Thank you