フルスタックエンジニア目指して

エンジニアリングのことはもちろん、全然関係無い話もします。

Google Cloud Next 2018 わいわい報告会 メモ

Google Cloud Next

次回開催

  • 2019/04/09 - 2019/04/11

Accident

出発一週間前にホテル取れてない - 社宅的なのが利用負荷だった・・・ - 名札トラブル - セッション入れてもらえない - 台風12号接近

What your company doing?

入管検査でやたらと詳しく聞かれたらしい笑

GCP Podcast

メルカリの方が出演!

今日の報告会の範囲外の発表を軽く紹介

  • GraphQLの話題ゼロ
  • Remote Build Execution
    • Bazelでのビルドをリモートで行う
    • キャッシュをチームで共有する
    • 同僚のビルド結果を使えるなど
    • とりあえずBazel使い始めよう
    • Cloud Buildとの違い
      • インスタンスを自分で用意できる(GCEインスタンス)
      • キャッシュが共有できる
  • Cloud Spanner
    • DML Queryがサポート
    • JDBC driver support
    • Query stats(実クエリの分析)
  • エミュレート
    • Roadmapにある
    • テスト用
  • future-proof your app
  • Firestore
    • Datastore mode
    • Datastore 完全コンパチ
    • Strong Concistency
    • Native mode
      • 既にあるやつ
  • Datastoreは死ぬ

    • Bigtableの時代が終わりSpannerの時代へ
  • GCP Marketplace - Kubernetes

    • Cloud Luncherとかあったあれ
    • Kubernetesのhelmみたいなもの
  • BigQuery
    • Query Clustered Tables
  • Cloud Search

    • G Suite外のデータも投げ込んで検索可
  • セッションはyoutubeに上がっているが、$1,000払う意味って?

    • Googleの人たちとディスカッションできる
    • Google以外にもデベロッパーとディスカッションできる
    • sinmetalさんは一切セッション聞いてない
      • I have one question, this!(PCで翻訳)
    • 中の人(ガチで作ってるエンジニアの人)

App & Infra Hot Topic

Merpay Solution Team

  • Microservice
    • Day 1 KeyNoteでIstioの話が出てくるぐらい
    • Day 1はメディア向けの発表が多いのに珍しい
  • Hybrid Cloud
    • 去年のNextでもHybridは結構言っていた
  • Serverless
    • Cloud Functionだけでなく, App Engine, Dataflow, BigQueryなど、かなり広い範囲をServerlessと呼んでいた
    • GCEを管理する必要がないサーバー群

What's Istio

  • Microserviceを管理するためのミドルウェア

    • アクセス制御
    • LoadBalancer
    • Error Budget管理
    • モニタリング
    • ...etc.
  • Managed Istio

  • Stackdriver for Istio
    • Istio用のダッシュボードが出現
  • Istio Metricsで収集したものをStackdriverの専用画面で見ることができる
  • Error Budgetやトラフィックを監視可能

Hybrid Cloud

  • GKE On-Prem
    • 今まではGCEを使っていたが、オンプレでGCPのエージェントを運用可能
    • AWSのEC2も使える
    • Istioに対してリクエストの割り振り先を、GKE or On-Premに差し替えて、音量を変えるーケストラがデモで展示されていた

Serverless

  • Cloud Function
    • GA
    • Python 3.7 Support(Goは来なかった)
    • Cloud SQL Direct Connect
  • GKE
    • KNative
      • GKE上にServerlessを構築できる

Cloud Function

  • Cloud SQL Direct Connector
    • Functionから直接Cloud SQLに接続できるようになった
    • Functionはスケールしやすいので、Connection Poolは1が良いよという話をしていた
  • Environment Variable
    • gcloudコマンドで環境変数が設定可能に
  • Security Controls
    • IAMベースの管理が可能
    • 中からのみ叩きたいものとかは隠していくことが可能
  • VPC
    • GCEのネットワークに参加できるようになった
      • App EngineのResourceもネットワークに参加できるようになる??
    • 中のマシン同士のネットワークはプライベートIPでの接続が可能
    • Cloud memorystoreがネットワーク内に立てることでセキュリティを担保
      • Cloud Functionをネットワーク内におけるようになったため、memorystoreに接続可能に?
  • Serverless Containers
    • Node.jsで書いたものをデプロイしていた
      • Runtime固定だった
    • Dockerイメージをぶっ込めるようになった(alpha)
    • 3Dモデルのレンダリング?をするタスクがデモで行われた
  • Google Cloud Build with GitHub
    • Google Cloud Container Builderがrename
    • GitHub appとして登場
    • Pull Requestへのフィードバックが公式でサポート
    • 個人的にはCircle CIでよくね?と思うんだが、どうなんだろ・・・

続きはGCPUGで

  • Database
    • Cloud Firestore
    • Cloud Datastore
      • Automatic Upgrade to Cloud Firestore
    • Cloud Bigtable
      • Key Visualizer
    • Cloud Spanner
      • DML
      • Query Stat
      • JDBC Support

Machine Learning

毎年機械学習系の話題が増えてきている。 初心者向けのセッションが多い。

現地に行くからには知りたいのは新しいサービス。

New Services

BigQuery ML

BigQueryのクエリ内でMLモデルの学習から予測まで行う。

  • 2日目keynoteで発表
  • 機械学習系の大切なことは大体2日目
    • 面白いセッションは距離の遠い会場が交互に・・・(片道10分)

モデルの作成と保存場所

  • BQの構文内でクエリ結果を学習データにモデルを作成
  • テーブルと同じノリでデータセットの下にモデルが作成される
  • もちろんモデルをクエリ内で呼び出して予測も。
CREATE MODEL `bqml_tutorial.sample_model` OPTIONS(model_type='logistic_reg') AS SELECT...
  • ロジスティック回帰と線形回帰のみ使える

実際のところ使えそうなのか

特定の条件下であれば結構有用かも

  • 特徴量の加工側を頑張る
  • 手法自体は線形のシンプルなもの
  • リアルタイムではなくバッチで予測を走らせる
  • 正則化とかのチューニングは意外と自由にできる
  • クエリで予測する
    • まとめて予測を走らせるケースに使えそう

機械学習のアプローチは大体2種類ある

  • データは加工しないが、モデルを複雑なもの
  • データの加工を頑張り、モデルを簡単にする

個人的なBigQuery MLへの要望

  • L1正則化があるならモデルの係数を見せてほしい
  • ダウンロードさせてほしい
    • TensorFlowのSavedModelが妥当?
    • 線形モデルなのでCSVでも表現できる
    • その気になれば係数を特定するクエリとか投げられるので強い要望ではない
  • 型ごとにデータをどう扱ってるか教えて

Auto ML

  • Auto ML Vision / Language / Translationがbetaに!
    • Language / Translationは新発表
  • 課金体系も同時に決定
    • PredictionはざっくりVision / NL / Translation APIの2倍くらい
    • 学習コストよりも予測時のほうに多く課金するビジネスモデル

Meetup

  • 時間帯ごとに各分野の人とお話できる
  • AutoMLとXGBoost for ML Engineやってるひととお話してきた
  • Auto MLのモデルダウンロードできるようにならん?
    • 今はWebAPIでしか叩けない
    • 時期は未定だが、いずれ可能にする予定
  • ダウンロードできないのはTensorFlowのグラフ構造を隠すため?
    • Yes(まだ詳細は秘密)
    • アルゴリズムが公開できない(今のところ)

Edge TPU

Sessions

Transforming Your Business with Cloud TPU

個人的に一番楽しいセッションだったが動画がない

  • TPU周りのちょっと新情報

KerasがTPUに対応する

in 1.10

Preemptible TPU

  • 実は1週間前くらいからあったらしい
  • 通常のTPUも含めみんな使える
  • ML Engineからいつの間にか使えるになっている
  • 機械学習の学習は別にマシン落ちても問題ないしお得
  • ちょっと前まではQuotaが0だったが、今見たら個人のアカウントでもQuotaがあった!

Pizza HutのMicroservice事例

Coreアーキテクチャ

  • Go
  • Kubernetes
  • GCP

マイクロサービスの原則

  • サービス間の依存が少ない
  • CI/CDを利用した自動デプロイ
    • サービス間の依存が多くなるとこれが難しくなってくる
  • サービスディスカバリを利用したサービス間通信

↑マイクロサービスの目的を達成するために必須な原則

サービス間の依存が少ない

  • 可能な限り小さい、意味を持つ業務機能を提供
    • 小さくすればするほど、強い依存を持ってしまいがち。可能な限り小さくしていても、単体で意味を持つ、っていうのが大事
  • データと業務機能をカプセル化し、提供する

通信

  • REST
  • gRPC

    • 利用者によってはサポートが難しい
  • REST: 外部通信

  • gRPC: 内部通信

ロードバランサがRESTをgRPCに変換

API管理の課題

Cloud Endpoints

  • 柔軟なセキュリティオプション
  • 外部提供するgRPCのエンドポイントをRest Server Container経由でRestAPIとして外部に提供

UseCase: Store Location Service

  • Datastoreに既存データをインポートする必要
  • Dataインポート用のJobをKubernetes上に建ててAPI経由で突っ込む

Kubernetesにも高い可用性が欲しい

Cloud Load Balancing(Ingress)

Stackdriverが便利

  • 分散システムでもリクエストトレーシングができる

APIの設計TIPS

  • 変更の難しさ: 既存のレガシーなソフトウェアは複雑
  • 統合の難しさ: それぞれのAPIが独自の仕様を持つ
    • RESTだったりJSONだったりgRPCだったり

解決方法

  • アプリケーションをまたがって統一されたAPI
  • 統一されたモデルの関係性
  • 実装過程からの開放

どのように実現するか

APIのスタイル

Entity-oriented

- REST
  • APIに統一感がある
  • DBのスキーマを学ぶのに似ている

Procedure Oriented

いわゆるRPC

/getAllDogs/getAllLeashedDogs/verifyLocation/....

  • プログラミングのライブラリを学ぶのに似ている
    • どういうメソッドがあって、何が返ってきて...
  • RESTほどAPIに統一感がある保証はない
    • 実装者に依存する

Entity-orientedが良さそう

  • HTTPがベースなので、HTTP Methodによる直感的な操作が可能
  • バージョンやクエリの概念がない

クエリの解決策

IDを返すんじゃなくて、URLを返せば良い

{
  "id": "/pet/12345,
  ...
  "owner": "https://.../owner/98765"
}

バージョンの種類

  1. Entity Versioning
    • エンティティのデータ構造が変わる
    • 新エンティティ、旧エンティティが存在する
  2. Format Versioning
    • フィールド名のリネーム
    • エンティティ自体は1種類しかない
  3. Historical Versioning
    • EntityとFormatを統合したバージョン
    • 特定バージョンへのundo, redoが可能

Format Versionによる失敗

id, ownerにバージョンを含めてしまう

{
  "id": "/v1/xxx/..."
}

かといってバージョンを取り除くと情報が損失。

{
  "version: xxxx,
  "id": "/v1/xxx/..."
}

バージョンを含めてやる

gRPC vs REST

  • gRPC
    • スループットが高い
  • REST
    • 将来的な変更に強い

Go Cloudの紹介

Goの話題がDay3のキーノートに!!

Go Cloud Project

セッションに参加してきました

Go Cloudとは

  • Open Cloud向けのGoのライブラリ群
  • Open CLoudとは
    • 特定のクラウドにベンダーロックインされていないこと

Open Cloudの何が難しいのか

  • 高レベルな視点では同じ部分がある
    • データベース、ストレージ、コンピューティング
  • 低レベルな視点ではかなり違う <= ここを吸収
    • 各クラウドのSDK

Kubernetes(k8s)を使うのはどうなのか

  • k8sが抽象化できるのはコンピューティングのところだけ
    • DatabaseはCloudSQL, ストレージはCloudStorageなどを選ぶことになる
    • ここをGo Cloudに置き換える

本当に可能なのか?

  • RDBに対するdatabase/sqlのようなもの
  • クラウド毎にドライバーを用意する
  • とても大変だがやる価値はある!

対応状況

  • Blob store
    • Cloud Storage, S#
  • プロジェクト単位で使えるキーバリューの値
    • GCP:Remote Configurator, AWS: Systems Manager
  • MySQLへの接続
    • Cloud SQL, AWS:RDS
  • リクエストログ
    • GCP:Stackdriver, AWS: X-Ray

デモ(GCSとS3へのファイルアップロード)

google/go-cloudのsamples/tutorialの実行

気になったこと

google/go-cloud/wire

DI作成するためのもの