june 3, 2019 updated: web アプリ開発 gcp のサーバーレスで · firebase...

54
Updated: June 3, 2019 GCP のサーバーレスで Web アプリ開発

Upload: others

Post on 25-May-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

Updated: June 3, 2019

GCP のサーバーレスでWeb アプリ開発

Page 2: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

自己紹介

Kazuu (かずー) @kazshinohara

Google Cloud のカスタマーエンジニア。

デジタル系エンタープライズのお客様を担当。

得意分野はサーバーレスや DevOps など。

趣味は猫と写真と旅行。

Page 3: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

そもそもサーバーレスって?

No InfraManagement

Fully Managed Security

Pay only for usage

Page 4: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

GCP のサーバーレスはフルスタック

Compute

Data Analytics ML & AI

Database & Storage

Smart assistants &

chat

DevOps

Messaging

Page 5: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

Web アプリケーションを開発する際に考えること

1. コンピュート(アプリをどこで動かすか)

2. データベース

3. 非同期処理

4. 静的コンテンツ

5. コード管理・ビルド・デプロイ

6. モニタリング・ロギング・APM

Page 6: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

1. コンピュート

2. データベース

3. 非同期処理

4. 静的コンテンツ

5. コード管理・ビルド・デプロイ

6. モニタリング・ロギング・APM

Web アプリケーションを開発する際に考えること

Page 7: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

コンピュート

Page 8: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

GCP のサーバーレスコンピュート

App Engine

Apps

Cloud Functions

Functions

Cloud Run

Containers

NEW!

Page 9: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

https://cloud.google.com/serverless-options/?hl=en

サーバレスコンピュート公式使い分けチャート

Page 10: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

01Cloud Functions

Page 11: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

{}

イベントドリブンなサーバーレス コンピュート プラットフォーム

Cloud Functions

イベントドリブン

HTTPFirestorePub/SubCloud SchedulerCloud StorageFirebase

サーバーレス

サーバー管理なし

スケールアウトが高速

ゼロにまでスケールイン

パッチなどの更新なし

使った分だけ支払い

サポートランタイム

Node.js 6, 8, 10beta

Python 3.7Go 1.11, 1.12alpha

Java 8alpha

Page 12: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

Cloud Functions ユースケース例

①画像をアップロード

②関数をトリガー

③画像のラベリング

Cloud FunctionsCloud Storage Cloud Vision API

Page 13: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

使い所と気にすべき制約

使い所

Pub/Sub and/or Cloud Storage を使って

いる場合

ランタイム環境は管理したくない

データ処理 (ETL)

サービス間連携

気にすべき制約

関数レベルの粒度

イベント経由

ランタイム言語に縛り

Page 14: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

02App Engine

Page 15: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

高いスケーラビリティを持つサーバーレス Web アプリケーション

App Engine standard environment

管理が容易

サーバー管理なし

スケールアウトが高速

ゼロにまでスケールイン

パッチなどの更新なし

開発しやすい

アプリのコードに集中できる

バージョニング

トラフィックスプリット

サポートランタイム

Java

Python

Go

PHP

Node.js

Ruby alpha

{}

Page 16: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

App Engine ユースケース例

Back End AppApp Engine

Cloud Tasks

Front End AppApp Engine

In-memory cacheCloud Memorystore

Dynamic dataCloud Firestore

Page 17: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

スタンダード スタンダード 第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 のランタイム

Page 18: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

App Engine で実現できる柔軟なデプロイ

v1 v2 v1 v2 A B

example.com example.com example.com

一気に切り替え 最初は少数だけ 並行稼働

ブルーグリーンデプロイメント

カナリアリリース

A / B テスト

Page 19: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

使い所と気にすべき制約

使い所

HTTP/S request-response

ステートレスなアプリケーション

急激なトラフィック増に耐えないと

いけないアプリケーション

気にすべき制約

スタンダード

● Runtimes for Python, Java, PHP, Go, Node

● HTTP/S only

フレキシブル

● Docker の制約を継承

● トラフィックが少ないサイトには不向き

Page 20: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

03Cloud Run

Page 21: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

Knativeopen source building blocks for serverless on Kubernetes

Page 22: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

Cloud Run

高速なデプロイ

ステートレスなコンテナ

言語やライブラリの制約なし

数秒でデプロイし URL を付与

サーバーレス ネイティブ

管理するサーバーはなし

コードに集中

高速に 0 to N スケール

きっちり使った分だけお支払い

高いポータビリティ

どこでも同じ Developer Experience フルマネージでも GKE のクラスタ上でも

Knative の一貫した API の一貫性

ロックインの排除

Page 23: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

Cloud Run完全にサーバーレス

管理するクラスタ無し

使った分だけお支払い

Cloud Run on GKEGKE のクラスタ上でサーバーレス

体験

費用は GKE のクラスタに含まれ

2 つの Cloud Run

Page 24: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

Cloud Run ユースケース例

サービング用データ準備

データのロード

メッセージの処理

重複排除 デコード データ判別

メッセージの取得

Http Webhook

Push

Webとしてサービング

スケジュール

IoT devices

Page 25: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

使い所と気にすべき制約

使い所

ステートレス

HTTP/S request-response workloads

スパイクが多い、読めないなど

Specific なランタイム要件や依存性

気にすべき制約

コンテナを必ず使わないといけない

ビルドプロセスを決めないといけない

Page 26: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

データベース

Page 27: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

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 のマネージド データベースサービス

Page 28: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

https://cloud.google.com/storage-options/?hl=ja

Page 29: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

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 のマネージド データベースサービス

Page 30: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

01Cloud Firestore

Page 31: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

Cloud Firestore

● NoSQL データベース

● 強整合性

● 高い可用性

○ マルチリージョンで 99.999%

○ リージョナルで 99.99%

● 2 つのモード

○ ネイティブモード (Realtime)

○ Datastore モード

Page 32: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

Firebase SDK によるサポート

Firebase Auth

Security Rules

Cloud Functions

Firebase HostingApp + Client SDKs Cloud Firestore

Page 33: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

リアルタイムにデータを同期

データに変更があった時、リ

アルタイムに近い速度でデー

タを同期。マルチユーザー向

けのモバイルアプリに最適。

Page 34: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

Cloud Firestore のデータ構成

name: "Cloud Firestore について"description: "Cloud Firestore はフルマネージドな NoSQL データベースです"...

My First Note

name: "関連資料"description: "Cloud Firestore の関連資料"...

My Other Note

Page 35: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

iOS

Android

Web

Authentication3rd Party

Event Store

Writes

Real time updates

Custom API

Static content

Event Info retrieval

Writes

Cloud Firestore のユースケース例

Firebase Auth

Page 36: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

02Cloud SQL

Page 37: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

Cloud SQL

● フルマネージドのリレーショナルデータベース

● MySQL と PostgreSQL 、SQL Server(Alpha) をサ

ポート

● 高いパフォーマンス

○ 64 コア、400GB まで瞬時にアップグレード可能

● 高可用性構成で99.95%

Page 38: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

高可用性構成 ( PostgreSQL の場合)

• プライマリインスタンスとセカンダリインスタンスを異なるゾーンに配置

• リージョナル永続ディスクを使い全ての書き込みを同期、レプリケーション

• プライマリインスタンスが正常な状態でなくなると、セカンダリインスタンスが昇格

• フェイルオーバーはほぼ 60 秒以内に行われる

Page 39: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

Cloud SQL への接続

接続パス• パブリック IP

• インターネットを経由し、どこから

でもアクセス可能

• プライベート IP• Virtual Private Cloud (VPC) を

使いプライベートアクセス

認証• Whitelisting IP

• 接続を許可する IP のリストを作成

• 許可された SSL 証明書 • クライアントからの接続を許可する

SSL 証明書

• Cloud SQL プロキシ

• アプリからはローカル接続の認証

に見える。セキュアにインスタンス

にアクセス。

Page 40: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

03Cloud Spanner

Page 41: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

Cloud Spanner

● グローバルに分散され、強整合性を備えたデータ

ベース サービス

● リレーショナル データベースの構造と非リレーショナ

ル データベースの水平スケーラビリティを兼ね備え

Page 42: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

Cloud Spanner とは何か?

リレーショナルセマンティック

スキーマ、ACID トランザクション、SQL クエリ

水平スケール高可用性 99.999% SLA、

フルマネージドで水平スケーリング

+

Page 43: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

RDB と非 RDB、両方の特徴を持っている

Page 44: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

使い所

● リレーショナルなデータ

● 高いスケーラビリティが求めら

れるアプリケーション

● 高い可用性要件を持った

アプリケーション

気にすべき制約

● 既存 DB との互換性

(独自のテーブル設計が必要)

● リージョン間レプリケーションの

提供エリア

使い所と気にすべき制約

Page 45: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

非同期処理

Page 46: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

Cloud Tasks

信頼性の高いタスクのオフロード

フルマネージドのタスクキュー: 長時間の非同期タスクも確実にディスパッチ。インフラ管理

なし、使った分だけお支払い。

レート制御 と 再試行

必要なスループットに合わせてレート制御 や 再試行の設定が可能。

HTTP/S Auth (IAM) を使った柔軟なタスクルーティング

GCP 内外のサービスに対してセキュアにタスクをディスパッチ。

マイクロサービス間の非同期タスク向けキューイングシステム

Page 47: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

sendEmail function

New user signup 30-day

reminder30 days later

'schedule_time': '2019-05-11T00:00:00'

タスクをスケジュールして実行

Page 48: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

Dispatch

10 tasks/s

Dispatch

3 tasks/s

'max_dispatches_per_second': '3'

レートの制御

Page 49: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

'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

タスクの再試行

Page 50: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

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) ターゲット

Page 51: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

静的コンテンツ

Page 52: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

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 が設定される(エッジキャッシュされる)

Page 53: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

まとめ

● GCP のサーバーレスを活用することでインフラ管理のないモダンな

Web アプリケーション開発が可能

● コンピュートもデータベースも特徴的なサービスが複数ある、開発要件

に合わせて適材適所するのがオススメ

● モニタリング・ロギング、ビルド・デプロイなどのサービスもあるので、や

ろうと思えば GCP で開発・運用を完結することも

Page 54: June 3, 2019 Updated: Web アプリ開発 GCP のサーバーレスで · Firebase サーバーレス サーバー管理なし スケールアウトが高速 ゼロにまでスケールイン

Thank you