初めてのGCP
2019年2月20日
なんでGCP?
Google search engineの裏側で動いている環境がGCP(グローバルロードバランサー)でつかえる。 BigTableはWebサイトのHTMLソースとか、Gmail用のデータベースとして使われている。 つまりGoogleが自前で使っているような環境をみんなも使えちゃう。
- Google社内でどう使われているかを考えながら作ると面白いよ(論文集: research Google)
- 連載あるよ(googleを支えるテクノロジー)
- コミュニティ「GCPUG」
要件に応じて最適なアーキテクチャ、コンポーネントの組み合わせを判断できる力が必要。 自分のパート以外の「知識を持つ」という意味でのフルスタックが必要。なんでも一人でできる人ではない。
これまでIPを使いたかった理由は社内でアプリケーションを使いたいつくりたいから。 それがクラウド上で完結できる。しかもOSSで提供しているから、オンプレミスでも構築できる。
ネットワーク
日本は東京リージョンと将来的に大阪リージョンができる。 各地にエッジポイントがあって、そこからGoogleの高速ネットワークにはいる。
セキュリティ
セキュリティ担当が750人以上、物理的なセキュリティ担保もすごい。 結局Googleのサービスと同じ環境なので、Googleのサービスと同じレベルのセキュリティが担保できる。 下の動画はYoutubeに上がっているデータセンターツアーの動画。
事例
信頼できるベンダーが増えて来て、クラウド上にあげた方がセキュリティが高いと判断する会社が増えてきた。なんで?
Abema
Spotify
Box
Cloud Vision APIでアップロードした画像をカテゴリわけ。
ocado
自然言語処理APIでカスタマーサポートを効率化
Airbnb
機会翻訳で多言語対応
AUCNET
Cloud ML Engineで車の写真を送信することで自動で査定してくれる
基本知識
プロジェクト
一つのプロジェクトの中にリージョン・ゾーンが設定できる
IAM
- 誰が
- Googleアカウント
- サービスアカウント
- Googleグループ
- どのリソースに
- プロジェクトごと
- インスタンスごと
- バケットごと
アクセスできるかを管理する。
VPC
- 複数のリージョンにまたがって、Privateネットワークの構築が可能。
- 同じVPCであれば内部IPでアクセスが可能
コンピューティング関連の話
GCEとGAEとGKE 順に自由度が高くなるが、ユーザーによる管理工数が大きくなる
GCE
既存システムをクラウドに移行するのに最適 仮想マシンのスペックと動作させるOSを選択して作成するだけ
GAE
GCEのうえにアプリケーション実行基盤が入っている HTTP/HTTPSベースのアプリ開発に最適。ネイティブアプリのバックエンド開発に使われることが多い
GKE
コンテナベースの仮想環境。 コンテナのほうにOS、アプリケーション基盤を詰め込んでおいて、そのコンテナを実行できる基盤に持っていて動かす。 他のクラウドベンダーがコンテナに対応していればベンダーにロックインすることなくアプリケーションを移行できる。 コンテナオーケストレーションは、どのコンテナをどのサーバにあげるかなどを管理する。 1コンテナ1案件として考えるとわかりやすい。(システム要件が違う案件ごとに対応する) 確かにColdFusion案件は結構めんどかったので、コンテナ用意しておくと楽かもしれない。
Cloud FunctionsとApp Engineの違い
前者は一つの関数、後者はそのまとまり(というかアプリケーション全体) 前者の実行はイベントトリガー式。(ストレージにファイルが上がった時など)
GAEとGKEの違い
App Engineの裏側はボーグ(kubernetesの前身) App Engineにアップするとコンテナが勝手に作られてインスタンスが作られる GAEはGCPでしか使えないのでそれがだめならGKEでもいいかも。 ボーグがOSSとして作り直されているのが、kubernetes。 なので、ボーグにしかない機能もある。それを使いたいならGAEを使うしかない。
ストレージとデータベース
リレーショナルとNoSQLにサービスがそれぞれ複数あるのは、膨大なデータを扱うかどうかが一つの理由。
CloudSQL、CloudDataStoreがWebと小さめ(GB、大きくてTB) Cloud Spanner、Cloud BigTableが大きめ(PBとか) BigQueryはデータストアだけではなく、各データを分析する機能も持つ BigQuery x DataPortalでデータの可視化も可能
RDBMS
分散処理がにがて。 DB自体はVPC経由でプライベートにアクセするための、内部IPのみに制限することも可能。
Cloud Spannerはグローバルにインスタンスを増やすことでスケーリングができる。(時刻同期によって実現しているらしい。論文にて公開されている) データの実データはGoogleがもってるコロッサスに入っていて、DB自体はポインタを持っているだけなので、強整合性を維持できる 大量なIO、リアルタイムを素早くさばく必要があることが想定されるもの向き
機械学習
TensorFlowとCloud Machine Learning Engineは自分たちで機械学習モデルをつくる その他API系はすでにある機械学習モデルをつかってアプリケーションを作る その間にあるのが、Cloud Auto ML。Googleの機械学習モデルをベースにカスタマイズすることができる。
TensorFlowとCloud Machine Learning Engineの違いは学習させる環境、リソースが入っているかどうか。 TensorFlowはライブラリのみでOSS。 CMLEは学習環境を含む。
Auto MLでできること
- データの前処理(学習データを整形など)
- 学習モデルのデザイン、最適化
- 評価
- デプロイ
- アップデート
出来上がりAPIをベースとして、カスタマイズする。第一弾はCloud AutoML Vision。 カテゴリはベースのVision APIが返してくれるが、そのカテゴリのなんという名称なのかなどの固有名詞までを学習させたい場合などに使える。 人間ではぱっと見同じ見た目の物を学習させて判別させる。(二郎系ラーメンの店舗判別実績あるらしい)
Vision API
構成色、セーフサーチ機能。動画との関連付けはありかも。
メモ
- LambdaやCloud functionsを利用したマイクロサービスの公開
- 月一で細かいアプリ出す
- 最終的には組み合わせてあぷりけーしょんとして公開するとか
- video innteligenceでフレームの切り替わりを検出、JSでパートを検出しつつチャプターを動的に書き出してみる。
- GCPのAPIをフル活用して感情を分析してみた
- Speech x 自然言語処理
QWIKLABS bit.ly/2Gelgzs
調べる
- Hive/Hadoop
- Pub/Sub
- SLAとベータ版
- MQTP