Más contenido relacionado
La actualidad más candente (20)
Similar a GAE + Spannerで目指せ No (Uncomfortable) Ops (20)
GAE + Spannerで目指せ No (Uncomfortable) Ops
- 2. 2© Miniascape Co., Ltd. All Rights Reserved.
ななし
サーバーエンジニア
Twitter
@_nanasi880
スキル・経歴
● ソーシャルゲーム業界1年目
● 組み込み業界出身
● AWS 6ヶ月
● GCP 9ヶ月
● C/C++/Go/Java…
● 好きなGCPプロダクト : GAE
ささっと自己紹介
- 3. 3© Miniascape Co., Ltd. All Rights Reserved.
めた
サーバーエンジニア
Twitter
@wMETAw
スキル・経歴
● ソーシャルゲーム業界5年目
● AWS 1年6ヶ月
● GCP 9ヶ月
● Go PHP Ruby…
● 関西ゲーム勉強会、GGLT実行委員
● Google Cloud Certified
Associate Cloud Engineer
ささっと自己紹介
- 4. 4© Miniascape Co., Ltd. All Rights Reserved.
Miniascape株式会社
Happy Elementsの東京スタジオとして
2017年10月に設立
Make Another World
をスローガンに掲げ、新しいソーシャル
ゲームの遊びを目指しています。
2019年末に新作リリース予定!!
会社紹介
- 6. 6© Miniascape Co., Ltd. All Rights Reserved.
エンジニアは4人のみ採用予定
2人 : クライアント
2人 : サーバー (インフラ・クライアントお手伝い)
構築・運用コストをゼロにしたい
設立当初...
辛すぎるので
- 7. 7© Miniascape Co., Ltd. All Rights Reserved.
No "Uncomfortable" Ops
システム運用の"うれしくない"ことをなくそう!!
NoOps Meetup Tokyo#1より
目指せ
- 8. 8© Miniascape Co., Ltd. All Rights Reserved.
・インスタンスの起動が遅いとモヤモヤ
・ロールバック辛い問題
・突然のスパイク
・パッチリリースによりインスタンス再起動を強いられる
・DB分割問題(ヒットタイトルではRDBを60台水平分割)
運用でうれしくないこと
※水平分割の否定的発言ではなく、弊社にはDBスペシャリストも割り当てる人員もいないため...
- 9. 9© Miniascape Co., Ltd. All Rights Reserved.
・インスタンスの起動が遅い
➡︎ GAE/SE Goだとスピンアップ起動時間が約300ms
・ロールバック辛い問題
➡︎ バージョン切り替えはわずか数秒!
・パッチリリースによりインスタンス再起動を強いられる
➡︎ Live Migrationによりパッチ当て作業がない
・DB分割問題
➡︎ 分散DBであるDatastoreまたはSpannerを利用
・突然のスパイク
➡︎ 分散DBとスピンアップの速さから余裕でオートスケール
GCPで解決できるか
※GAE/SE Go (Google App Engine Standard Environment Golang)
※Live Migration ダウンタイム無しでホストのメンテナンスを実行する
- 11. 11© Miniascape Co., Ltd. All Rights Reserved.
GCPで提供されるPaaS (Platform as a Service)
Webアプリケーション作成に特化し
数行のyamlとアプリケーションソースをデプロイすれば即稼働
うれしいポイント
・HTTPSとURLの準備まで勝手にしてくれる
・BlueGreenデプロイメントサポート
・バージョン別にトラフィックの分配が可能
・バージョンの切り戻しが数秒で完了
Google App Engine
- 12. 12© Miniascape Co., Ltd. All Rights Reserved.
# Go言語を使用
runtime: go111
# 全てのリクエストをGoアプリに流す
handlers:
- url: /.*
script: auto
app.yaml (コンフィグ)
- 13. 13© Miniascape Co., Ltd. All Rights Reserved.
package main
import (
“fmt”
“net/http”
)
func main() {
http.HandleFunc(“/”, func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, “hello world”)
})
port := os.Getenv(“PORT”)
http.ListenAndServe(“:”+port, nil)
}
main.go
- 16. 16© Miniascape Co., Ltd. All Rights Reserved.
Datastoreとは
分散型NoSQLデータベース
負荷状況に応じてスケールする可用性と耐久性に優れつつ
RDBMSぽさもあり強整合性も備えるDB
さまざまな制約
・Entity GroupへのWriteは毎秒1~5回まで
・祖先クエリとKeyでのGetのみ強整合性
・TXは楽観的であり、25個のEntity Groupしか跨げない
※Datastoreについてはスライド最後の資料をどうぞ
- 17. 17© Miniascape Co., Ltd. All Rights Reserved.
Datastore期 構成
※対戦マッチングの仕様要件が多く
書き込み制限と複雑なクエリがあるため満せない
そのため、Spanner移行を前提とした構成
CloudSQLには
計画メンテが存在。
“うれしくない”
- 18. 18© Miniascape Co., Ltd. All Rights Reserved.
Cloud Spannerとの接続に使用するgRPC接続を長時間保持できず
HTTPリクエスト毎にコネクションを作成する必要があった
➡︎ SELECTするだけで3秒かかる
理由は長くなってしまうので気になる方は懇親会で
2019/3/20にGAされた第二世代ランタイムで解消済み
Google App Engineの(当時の)問題点
- 20. 20© Miniascape Co., Ltd. All Rights Reserved.
Spannerとは
・RDBMSの構造とNoSQLのスケーラビリティを両立した
データベース
・Primary Keyを用いてSpannerが自動で水平分割を行う
・ANSI 2011 SQLに対応しているので、使い慣れたSQL
で対話が可能
・スライド末尾に論文のリンクがあるのでそちらを参照
- 22. 22© Miniascape Co., Ltd. All Rights Reserved.
・計画ダウンタイムが無い
・1Write/EntityGroupのような厳しい制限が無い
・ノード数変更もオンデマンドで可能
・ボタン1つで高可用性(99.99%※)が手に入る
・IAMで制御できるのでID/パスワード管理が不要
・WebUIが使いやすく、クエリの実行計画も見やすい
Spanner嬉しいポイント
※SLA適用条件として、3ノード以上が必要
※Regionalインスタンスの場合
※Multi-Regionなら99.999%
- 25. 25© Miniascape Co., Ltd. All Rights Reserved.
・ローカルエミュレーターが無い
・Primary Keyの選定
・トランザクションとロック
・値段
(おそらく)Spannerで困るポイント
- 26. 26© Miniascape Co., Ltd. All Rights Reserved.
・諦めた
・素直にSpannerに接続するようにしている
・テーブル/Indexの作成込みで約8秒 ※参考ページ
・インスタンス起動も数秒~数十秒なのでむしろMySQLマ
シンより起動速くてストレスフリー
・SDKが提供されており、DB作成やドロップは簡単にで
きる
・ユニットテストが起動するたびに使い捨てのDBを作る
仕組みをCIに組み込んで運用中
ローカルエミュレーターが無い
- 27. 27© Miniascape Co., Ltd. All Rights Reserved.
・Primary Keyを使って分散するので
AutoIncrementのような連続する値はアンチパターン
・ベストプラクティスはUUIDを使用
・「Spanner ホットスポット」で検索
・外部サービスと連携しない限り
Primary KeyがUUIDで困った事が無い
・どうしても数値が使いたい場面はSHA256して使用
Primary Keyの選定
- 28. 28© Miniascape Co., Ltd. All Rights Reserved.
・トランザクションは2種類ある
・ReadOnlyとReadWrite
・ReadOnlyはブロックされない(MVCCによって実現)
・ReadWriteトランザクションは
楽観と悲観ロックの合わせ技のような挙動をする
・RWトランザクションでロックをとっても
Commitが走るまでは誰も排他ロックされない
SELECT ~ FOR UPDATE相当の操作は
明示的にはできない
トランザクションとロック
- 30. 30© Miniascape Co., Ltd. All Rights Reserved.
・DBのスペシャリストを探してきて採用するより
遥かに安くて低リスクと判断
・¥97,331.75/月では人は雇えない… ※GCP料金試算ページ
・開発環境は1インスタンス/1ノードを全環境でシェア
・各開発者単位でデータベースを分離し環境を分離
・夜間/休日等は自動でインスタンスをシャットダウン
値段
- 33. 33© Miniascape Co., Ltd. All Rights Reserved.
・Datastoreの概要
・Datastore/GO データ設計のコツDatastoreの概要と設計
- 34. 34© Miniascape Co., Ltd. All Rights Reserved.
・地理分散DBについて
・普通の人でもわかるPaxos
・Spanner: Google’s Globally Distributed Database
・GoogleのSpannerに関する論文の和訳
・Transaction Abort 探検記
・Cloud Spanner を使って様々な Anomaly に立ち向かう
・DMM INSIDE
・Google Cloud Spanner Deep Dive
・merpay infra talk cloud spanner
参考リンク