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

Preview:

Citation preview

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

Recommended