GameWith Developer Blog

GameWith のエンジニア、デザイナーが技術について日々発信していきます。

Google オフィスで GCP ハンズオンを開催していただきました

こんにちは。エンジニア兼技術広報の @serima です。 GameWith では外部から講師をお招きして勉強会を行うということを定期的に行っています。

今回はなんと Google 様による GCP のハンズオン込みの勉強会でした。 GameWith のエンジニア陣が Google のオフィスに招待され、さらにランチまでご馳走になってしまうという展開になり、とてもありがたく、美味しい勉強会となりました。

同じビルにオフィスがあるため、すぐに到着できるだろうという目論見でしたが、思っていた入口から入れずタイムロスしてしまいました…申し訳ありません!

無事に合流し、早速会議室にご案内していただいたのですが、各所に遊び心が垣間見える素敵なオフィスでした。

Google Cloud Platform ガイダンス

まずは双方でご挨拶、簡単に自己紹介を済ませたあと、GCP の概要をご説明頂きました。

  • 開発者はインフラから解き放たれて、アプリケーションに集中できるようにする
  • 地球規模 (Planet Scale) のインフラを目指す
  • 2015 年頃から技術を公開して世界のエンジニアにイノベーションを起こしてもらうのを狙うようになった = Philosophyの 180 度変更
  • GCP のネットワークは AWS と大きく異なる
    • 自社でネットワークを持っているので、リージョンを跨いでの構築がしやすいのが AWS との違い
    • 後発のため、プライスリーダー戦略をとっているが、「個人開発者もエンタープライズも等しく Public Cloud を利用できるべき」という Philosophy でフラットに対応を行っている
  • プレウォーミング不要
  • 単一の IP Anycast で最適なリージョンに振り分けを行ってくれる
  • 全て自社の専用線を引いているため、遅くならない。YouTube は海外から配信している
  • GAE はデプロイからの立ち上がりが早い
    • Go はとにかく早い
    • 言語ごとの比較だと Go > Python, PHP >> Java
  • 他社事例
    • 導入するまではやり方に慣れるという意味で大変だったが、リリース後にインフラに関して何もしなくて良くなった
    • インフラのやり方を忘れてしまった by 中の人
  • ライブマイグレーション = 計画停止なし
    • IaaS の再起動祭りがなくなる
    • 切り替わりはあるが、ログを見ないと気づかないレベルで高速。
  • リザーブドインスタンスのようなものはあるが、インスタンス単位ではなくコアとメモリ単位で購入できる
    • x 年後に「このマシンじゃ非力で使えない」や「ビジネス要件的にそのときに必要なインスタンスタイプとマッチしない」ということがないように
    • マシンが利用状況に合ってないとアラートが出る(オーバースペックな場合など)
    • ユーザーから「これ出していいの?(Google さん損じゃない?)」と言われてしまう
  • 質問
    • ライブマイグレーションに関して、ハードウェア障害の時はどうなるか?
      • 計画停電と同様に、自動で対応されるが、計画停止時よりは長くなってしまう。

Google の内部で運用されていた環境をサービスという形で外に出していくという方針に切り替わったのはかなり大きいな、と感じました。 尋常ではないトラフィックをプラネットスケールで受けている実績が既にありますので、非常に安心感があります。 また、印象的だったのは、カスタマが何か能動的にアクションせずとも、請求時に自動で利用料金が割り引かれたり、オーバースペックだった場合にアラートを出してくれるなどの対応です。 リザーブドインスタンスなどの前払いでインスタンスタイプを予約する契約については、一定のリスクがあることについてこちらで言及しており、納得感があります。

午前の部はここで終了し、ランチにお誘いいただきました!

Break time

レストランに向かう途中のカフェスペースからの眺め。Google の次の渋谷オフィスが見えました!

Reserved のプレートに GameWith と入っており、おもてなし力の高さに感動しました…

いただきます!

弊社の開発チームやシステム構成、デプロイ体制をはじめ、Google 社での開発やオフィスについて、ざっくばらんにお話しました。 (カレーが美味しいという噂を耳にしたので頂いたのですが、本当に美味しかったです…!)

ランチのあとは、カフェスペースでコーヒーやお菓子をいただき、リラックスしたムードでハンズオン開始!

Google App Engine ハンズオン

シンプルな Python アプリケーションを各々構築し、App Engine を利用してインターネットに公開してみるという内容でした。

弊社のアーキテクチャにおいて、アプリケーションサーバのオートスケーリングをより最適化したいと常に考えており、折角の機会ということで GAE のスケーリングについて学びたいというリクエストをしておりました。

  • Google Cloud Shell
    • ブラウザから直接クラウドリソースにアクセスできるシェル
    • dashboard の右上のアイコンからログインできる
  • StackDriver
    • 監視、ログ、デバッグ、パフォーマンス、エラーレポート
  • リアルタイムデバッグ
    • 本番環境で stack trace を実現できる
  • バージョンコントロール
    • 任意のバージョンを 100% → 30%, 30%, 40% のような形で割合指定で露出できる
    • ファイアーウォール機能も最近つくようになった
      • ので、全世界に公開せず開発環境でバージョン切り替えて試したりもしやすくなった
      • この機能は以前から各方面から要望があったので、非常にホット
  • インスタンスのオートスケーリング
    • 完全オート、上限ありオート、マニュアルがある
    • automatic_scaling: 細かいトラフィックを大量にさばく
  • basic_scaling: 最大のインスタンス数を事前に設定
  • manual_scaling: 手動でインスタンスの数を決める
  • アクセスが落ち着いた後にどのくらいの速さでインスタンスを減らすかも設定で調整できる
    • 特に Go だと即時インスタンスが立ち上がるので、アクセスが少なくなったらすぐ台数を減らす設定にしておくとよい

エンドポイントに対して定期的に curl しながら、トラフィック分割設定で割合を切り替える瞬間の video です。

Hello World! が 100 %稼働している状態から、Hello Google! のバージョンを 30 %にしている場面。

Hello Google! が 30 %稼働している状態から、Hello Google! のバージョンを 100 %にしている場面。

GUI からワンクリックで、かつ瞬時に切り替わりを体感でき非常に興奮しました。ロールバックについても同様で、すぐに切り戻すことが可能です。

GUI から様々なことが簡単にでき、便利さを実感しました。 なかでも本番のコードに直接 Break point を設定して、ユーザが次にそこを通ったタイミングで stack trace を追えるというのは本当にすごいな…と思いました。

環境要因(主にデータ起因)で、なかなかローカル環境で再現が難しいバグなどもこれを使えれば特定がかなり容易にできるようになります。(現在は PHP は非対応とのことでした)

BigQuery のデモ

弊社ではすでに BigQuery を使用していますが、さらに使いこなしていきたいという思いから今回は事前にリクエストしていました。

  • Google は大量のデータがあったのでビッグデータは昔からやってた
  • Google が使ってよかったものが論文で外に出てオープンソースになったり GCP で提供されたりしてる
    • MapReduce + GFS => Apache Hadoop => Cloud DataProc
    • Dremel => Apache Drill => BigQuery
    • FlumeJava, MillWheel, Dataflow => Apache Beam / DataflowSDK => Cloud Dataflow
  • Dataflow = Apache Beam というプログラミングパラダイムのマネージドな実行環境
    • DataProc、AWS EMR と比較すると立ち上げが高速
  • データ分析系サービス一覧
    • BigQuery
    • DataProc
    • Dataflow
    • Datalab
    • Data Studio
    • Dataprep
  • BigQuery は DWH
  • fluentd から streaming insert で BigQuery に流せる
  • デモ
    • 生成したログを fluentd へ流して、BigQuery に streaming insert するデモ
    • ログ生成で使った gem パッケージ:
    • streaming insert したデータはリアルタイムで BigQuery の WebUI の preview には反映されない(少しラグがある)
    • streaming insert は有料なので、使い分けるのがベストプラクティス
      • 即時性を求められるデータ: streaming insert
      • 即時性を求められないデータ: 日次のバッチなどで対応
  • デモ 2
    • Dataprep
      • Dataflow の GUI コードビルダーのようなもの
      • 裏で使われる Dataflow に料金が発生し、Dataprep の使用自体は無料
      • 任意のデータソース(国が発行するフォーマットが揃っていない CSV など)を GUI で整形して BigQuery に流せる

Dataprep / Dataflow はとても革命的だな…と感じました。

今までだといったんデータソースをダウンロードしてきて、ローカルでデータを整形して再度 BigQuery に入れるということをしていましたが、その手間がゼロになると思うと胸熱です。

定形作業が一切不要になりますし、しかもそれが GUI で操作できるので、プログラマ以外の方にも使ってもらえるという点で、用途が一気に拡がりそうです。

デモをしていただいた後、社内のカフェにもご案内頂いたのですが、 レストランとはまた別の場所にあり、最早ここにないものはないのでは…と思いました。

自由にドリンクをオーダーして良いとのことで、弊社メンバー皆コーヒーを頂いてしまいました。ありがとうございます!

帰り際、Google カレンダーを模したリアルな Google カレンダーを頂いてしまいました!

非常に可愛く、早速愛用しています!

まとめ

Google の内部で培った知見を外部に公開し、社外でのイノベーションを狙っていくという Philosophy に感銘を受けました。 また、エンタープライズも個人開発者も等しく扱うというスタンスは、ある意味とても Google らしく、いちデベロッパとして好感でした。

「巨人の肩に乗る」というメタファがありますが、ユーザに対して真に価値を届けるために、ビジネスのコア以外を積極的にアウトソースしていく事は、限られたリソースを有効に活用する手段だと思います。

適切な箇所で GCP を利用することで、より早く、より良いサービスをユーザに提供することができるように、検討と実験を経てプロダクションで運用できるように推進していきたいと思います。

あらかじめリクエストしていた内容をハンズオンに盛り込んで頂いたことで、非常に身のある濃い時間となりました。 Google の皆様、本当にありがとうございました!