0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GAE/Java8試行(その0:「App Engineについて」)

Last updated at Posted at 2018-09-30

お題

GAE(Google App Engine)を理解するために、実際に自分でアプリ作って乗せてみる。
とりあえず、App Engineの特徴をまとめる。

動機

GAE、ドキュメントを読めば読むほど「Webアプリなら、とりあえずGAEに乗せれば、運用面も含め、十分、本番稼働させられるのでは?」と思えてくる。
GKE(k8s)も勉強中だけれども、gRPCでなくRESTでいいなら、GAEにする方が運用コストも断然楽なんじゃないかと思える。
ただ、チュートリアルを多少やったくらいだと、結局出来合いのものなので、つまづくところもなく、したがって実際に自分でWebアプリを作ってGAEにデプロイ、運用しようとした時にどれほど大変(ないし、楽)なのかがわからない。
なので、試してみることにした。

前提

App Engineについて

  • PaaSなので、決まった方式に沿って開発すると、あとの面倒(主にインフラ面)はGCP側で見てくれる。
  • デフォルトで「[プロジェクトID].appspot.com」のドメインでアクセスできる。(別途調達したドメインを用いることも可能)
  • オートスケールが早い(Javaで5秒、Goで40ミリ秒)

構造

+----------------------------------------------------------------------------------+
|[App Engine]                                                                      |
|                                                                                  |
| +-------------------------------------+  +-------------------------------------+ |
| |[Service-A]                          |  |[Service-B]                          | |
| |                                     |  |                                     | |
| | +---------------------------------+ |  | +---------------------------------+ | |
| | |[Version-1]                      | |  | |[Version-1]                      | | |
| | |                                 | |  | |                                 | | |
| | | +-------------+ +-------------+ | |  | | +-------------+ +-------------+ | | |
| | | |[Instance-a] | |[Instance-b] | | |  | | |[Instance-e] | |[Instance-f] | | | |
| | | |             | |             | | |  | | |             | |             | | | |
| | | +-------------+ +-------------+ | |  | | +-------------+ +-------------+ | | |
| | |                                 | |  | |                                 | | |
| | +---------------------------------+ |  | +---------------------------------+ | |
| |                                     |  |                                     | |
| | +---------------------------------+ |  | +---------------------------------+ | |
| | |[Version-2]                      | |  | |[Version-2]                      | | |
| | |                                 | |  | |                                 | | |
| | | +-------------+ +-------------+ | |  | | +-------------+ +-------------+ | | |
| | | |[Instance-c] | |[Instance-d] | | |  | | |[Instance-g] | |[Instance-h] | | | |
| | | |             | |             | | |  | | |             | |             | | | |
| | | +-------------+ +-------------+ | |  | | +-------------+ +-------------+ | | |
| | |                                 | |  | |                                 | | |
| | +---------------------------------+ |  | +---------------------------------+ | |
| |                                     |  |                                     | |
| +-------------------------------------|  +-------------------------------------+ |
|                                                                                  |
+----------------------------------------------------------------------------------+

App Engine

  • 1GCPプロジェクトに1つだけ存在する。

Service

  • 1 App Engineにつき、プログラミング言語別(Python, Java, Node.js, PHP, Go)に複数のServiceを持てる。
  • Service間の通信は、RESTによるやりとりや、DatastoreMemcacheタスクキューにより可能。
  • オートスケール、負荷分散、インスタンスタイプはService毎に独立して管理される。

Version

  • 1 Serviceにつき、複数のVersionを同時にデプロイできる。
  • 各Versionはパーセンテージでリクエストの振り分けができるため、下記が可能。
    • A/Bテスト
    • スモークテスト
    • Blue/Greenデプロイメント
    • カナリアリリース
    • デプロイの高速ロールバック

Instance

  • 1 Versionにつき、複数のInstanceがオートスケールする。

注意点

  • 一度作ると、リージョンの変更は不可
  • 1リクエストは60秒以内に処理する必要がある(タスクキューの場合は10分以内)
  • アプリがファイルを書き込めるパスは「/tmp」のみ

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?