1 of 22

Google App Engine

今とこれから

@sinmetal

GCPUG Admin

Google Developers Expert

メルカリ / メルペイ ソリューションチーム

goo.gl/cWcDzQ

https://gcpug.jp

2 of 22

What is Google App Engine?

2

  • Web ApplicationのためのPaaS
  • GCP最古のサービス 2008/04/07 Relese By Wikipedia
  • Runtimeの追加や様々な機能追加を経て、今日に至る
  • 最初はDatastoreとセットで登場し、RDBサポートが無かったため、人を選ぶ感じのサービスだった
  • 後に、DatastoreはApp Engineから独立し、Cloud Datastoreとなったが、Regionを共有しているけど、まだセットになっている感じは残っている。

https://gcpug.jp

3 of 22

Google App Engineの特徴

3

  • 小さなInstance (Borg Container)をリクエスト数に合わせて増減させるのが得意
  • 逆に大きなInstanceを起動し続けることはできない
  • 1つの小さなリクエストを迅速にレスポンスを返すのを大量に行うWebの世界に最適化されたサービス
  • ステートレスで分散するアーキテクチャに最適化されているので、その世界から外れると死ぬ

https://gcpug.jp

4 of 22

2つのApp Engine

4

  • Standard
    • 特定のRuntimeに限定された環境
      • Python, Java, PHP, Go
  • Flex
    • Docker Baseの世界

https://gcpug.jp

5 of 22

2つのApp Engine

5

  • Standard
    • コードのみですべてを表現する
    • コード以外の世界はない
  • Flex
    • 用意されたRuntimeを利用 or Dockerによる自由な世界
    • Deploy, 起動に結構な時間がかかる
    • App Engine Flexについて

https://gcpug.jp

6 of 22

App Engine Standard for Go, Hello World

6

package main

import (

"fmt"

"net/http"

"google.golang.org/appengine"

"google.golang.org/appengine/log"

)

func init() {

http.HandleFunc("/hello", handler)

}

func handler(w http.ResponseWriter, r *http.Request) {

c := appengine.NewContext(r)

log.Infof(c, "Hello %s", "world")

fmt.Fprint(w, "Hello, world!")

}

https://gcpug.jp

7 of 22

App Engine Standard for Go, Hello World

7

application: gaegohandson # change here

version: 1

runtime: go

api_version: go1

handlers:

- url: /.*

script: _go_app

https://gcpug.jp

8 of 22

App Engine Flex for Go, Hello World

8

package main

import (

"fmt"

"log"

"net/http"

)

func main() {

http.HandleFunc("/", handle)

http.HandleFunc("/_ah/health", healthCheckHandler)

log.Print("Listening on port 8080")

log.Fatal(http.ListenAndServe(":8080", nil))

}

func handle(w http.ResponseWriter, r *http.Request) {

fmt.Fprint(w, "Hello world!")

}

func healthCheckHandler(w http.ResponseWriter, r *http.Request) {

fmt.Fprint(w, "ok")

}

https://gcpug.jp

9 of 22

App Engine Flex for Go, Hello World

9

runtime: go

env: flex

automatic_scaling:

min_num_instances: 1

max_num_instances: 15

cool_down_period_sec: 180

cpu_utilization:

target_utilization: 0.6

https://gcpug.jp

10 of 22

Google App Engine for Standard Architecture

10

Google Datacenter

App Engine Services

Google

Frontend

App Engine

Frontend

Static Server

Pending Request Queue

App Server

Datastore

Memcache

Task Queue

Search

URL Fetch

Socket

自分のDeployしたApplicationが動いている場所

https://gcpug.jp

11 of 22

Google App Engineの先進的な機能

11

  • Versioning
  • Traffic Splitting

https://gcpug.jp

12 of 22

Google App Engine for Standardの制約

12

  • Local DiskにWriteはできない
  • App Engine Instanceは外部と通信できない
    • URL Fetch
    • Socket API

https://gcpug.jp

13 of 22

Google App Engine for Standardの課題

13

  • App Engineしかいなかった世界と、GCPの後の世界との連携が少ない
    • App Engine Memcache, App Engine Search APIには、Compute Engine, Dataflowからアクセスできない
  • Webの世界の時代が変わった
    • App Engine登場時のWebはステートレスな世界がある程度あったが、現在はとてもリッチなApplicationを作るようになった。
    • HTTP/2, gRPCなどセッションを維持して使いまわす世界がやってきた

https://gcpug.jp

14 of 22

Google App Engine

Next Generation

sinmetalの妄想を含んでいます!

https://gcpug.jp

15 of 22

https://gcpug.jp

16 of 22

Google App Engine Enviroment

Standard

Flex

Standard

Next Generation

16

Host OS

Borg

Host OS

Borg

VM

Docker

Host OS

gVisor

Container

ここにBorgはいるかも

https://gcpug.jp

17 of 22

Google App Engine Standard Next Generation

  • 自由を求めたFlexは、間にVMを挟むことになってしまい、スピンアップに難があった
  • gVisorによって、VMを取っ払うことに成功している

17

https://gcpug.jp

18 of 22

Google App Engine Standard Next Generation

  • gVisorで提供されているRuntime
    • Java8
    • Node.js (6月ぐらいにβ予定)

18

https://gcpug.jp

19 of 22

Google App Engine Standard Next Generation

  • 自由な世界
    • ローカルファイルに書き込み可能
    • unsafeな機能も利用可能に
  • 高速なスピンアップタイム
    • 1secぐらいな雰囲気
  • 外の世界に自由にアクセス可能
    • URL Fetch, Socketを利用する必要はない

19

https://gcpug.jp

20 of 22

Google App Engine Standard Next Generation

  • GCPの機能との連携がしやすく
    • App Engine Memcache -> Cloud Memorystore
    • App Engine TaskQueue -> Cloud Tasks
    • App Engine Search -> ???

20

https://gcpug.jp

21 of 22

Standard Next Generation VS Flex

  • 自由で早いStndard NGに対して、Flexがどうするのかは分からない
    • Flexの対抗馬にはGKEやFunctionsも!?
    • Standard NGに吸収合併!?
    • Compute Engineのネットワークへの参加を担う!?
    • とりあえず、そのまま!?

21

https://gcpug.jp

22 of 22

Resource

22

https://gcpug.jp