Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GCP サーバーレスサービス×少数チームで新たなデータ化サービスを立ち上げる / GCP se...

Sansan
October 23, 2019

GCP サーバーレスサービス×少数チームで新たなデータ化サービスを立ち上げる / GCP serverless new desitization system

■イベント
Sansan Builders Box 2019
https://jp.corp-sansan.com/sbb2019/

■登壇概要
タイトル:
GCP サーバーレスサービス×少数チームで新たなデータ化サービスを立ち上げる

登壇者:
DSOC Development Group 木田悠一郎

▼Sansan Builders Box
https://buildersbox.corp-sansan.com/

Sansan

October 23, 2019
Tweet

More Decks by Sansan

Other Decks in Technology

Transcript

  1. ⽊⽥ 悠⼀郎(Yuichiro Kida) 2016年 3⽉ 早稲⽥⼤学 社会科学部 卒業 2016年 4⽉

    株式会社富⼠通ソーシアルサイエンスラボラトリ ⼊社 2017年 2⽉ 株式会社ジンジャーアップ ⼊社 システム開発会社に出向、Ruby on Rails で開発 2018年 2⽉ Sansan 株式会社 ⼊社 Eight のフロントエンド・サーバーサイド開発 2018年 6⽉ DSOC に異動 GEES(名刺のデータ化システム)の開発・運⽤ 新規プロダクト開発 DSOC Development Group エンジニア
  2. Sansan Builders Box ⾔語処理判定 名刺画像から⾔語を判定 ◦4⾔語(⽇英中韓)に対応 ◦データ化フローの効率化 ◦オペレータへの振り分けの⾃動化 ◦精度 98

    % 参考資料:”Deep Residual Learning for Image Recognition” Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun https://arxiv.org/abs/1512.03385 ⾔語判定モデル ⽇本語名刺 英語名刺 中国語名刺 その他⾔語 韓国語名刺 名 刺
  3. Sansan Builders Box - Google App Engine - Cloud Firestore

    - Cloud Tasks - Stackdriver - Cloud Storage - Cloud Functions GCP サーバーレス サービスについて
  4. Sansan Builders Box - Google App Engine - Cloud Firestore

    - Cloud Tasks - Stackdriver - Cloud Storage ≒ AWS S3 - Cloud Functions ≒ AWS Labmda GCP サーバーレス サービスについて
  5. Sansan Builders Box PaaS(Platform as a Service) - スケールアウト・デプロイが⾼速 -

    インスタンスがゼロまでスケールイン - サポートランタイム - Java, Python, Go, PHP, Node.js, Ruby(beta) Google App Engine App Engine
  6. Sansan Builders Box サーバーレスなドキュメント指向 NoSQL データベース - アプリケーションの負荷に応じて⾃動的に⽔平スケーリング - 強整合性

    - ⾼い可⽤性 - マルチリージョンで 99.999% 以上 - リージョンで 99.99% 以上 Cloud Firestore Cloud Firestore
  7. Sansan Builders Box ྫʣͦΕͧΕͷνϟοτϧʔϜʹෳ਺ͷϝοηʔδ͕͋Δ - rooms - room-A - messages

    - message-1 - message-2 - … - room-B - … Cloud Firestore の階層データ name: “開発ルーム” from: “太郎”, msg: “こんにちは!” from: “次郎”, msg: “Hello!” Cloud Firestore
  8. Sansan Builders Box ྫʣͦΕͧΕͷνϟοτϧʔϜʹෳ਺ͷϝοηʔδ͕͋Δ - rooms - room-A - messages

    - message-1 - message-2 - … - room-B - … Cloud Firestore の階層データ name: “開発ルーム” from: “太郎”, msg: “こんにちは!” from: “次郎”, msg: “Hello!” ← (ルート)コレクション Cloud Firestore
  9. Sansan Builders Box ྫʣͦΕͧΕͷνϟοτϧʔϜʹෳ਺ͷϝοηʔδ͕͋Δ - rooms - room-A - messages

    - message-1 - message-2 - … - room-B - … Cloud Firestore の階層データ name: “開発ルーム” from: “太郎”, msg: “こんにちは!” from: “次郎”, msg: “Hello!” ← (ルート)コレクション ← ドキュメント Cloud Firestore
  10. Sansan Builders Box ྫʣͦΕͧΕͷνϟοτϧʔϜʹෳ਺ͷϝοηʔδ͕͋Δ - rooms - room-A - messages

    - message-1 - message-2 - … - room-B - … Cloud Firestore の階層データ name: “開発ルーム” from: “太郎”, msg: “こんにちは!” from: “次郎”, msg: “Hello!” ← (ルート)コレクション ← ドキュメント ← rooms のサブコレクション Cloud Firestore
  11. Sansan Builders Box ྫʣͦΕͧΕͷνϟοτϧʔϜʹෳ਺ͷϝοηʔδ͕͋Δ - rooms - room-A - messages

    - message-1 - message-2 - … - room-B - … Cloud Firestore の階層データ name: “開発ルーム” from: “太郎”, msg: “こんにちは!” from: “次郎”, msg: “Hello!” ← (ルート)コレクション ← ドキュメント ← rooms のサブコレクション ← ドキュメント Cloud Firestore
  12. Sansan Builders Box - Map - JavaScript のオブジェクト、Ruby のハッシュ、 Python

    の辞書型のような値を⼊れられる - Array - Boolean - Date and time - String - … 参考: https://firebase.google.com/docs/firestore/manage-data/data-types Cloud Firestore のデータ型 Cloud Firestore
  13. Sansan Builders Box フルマネージドなタスクキューサービス - 処理を⾮同期で実⾏できる - HTTP Target タスク(beta)

    - App Engine タスク - 同時タスクの最⼤レートや最⼤数を設定できる Cloud Tasks Cloud Tasks
  14. Sansan Builders Box アプリケーション、インフラストラクチャのモニタリングと管理 - ロギング => Stackdriver Logging -

    エラー通知 => Stackdriver Error Reporting - モニタリング => Stackdriver Monitoring Stackdriver Stackdriver
  15. Sansan Builders Box サービスの全体像 ⾮定型⽂書画像 データ化結果 ⼊⼒ / データ化 システム

    社内オペレーター ⾃動化エンジン ユーザー側 システム データ化 ⾮定型⽂書データ化システム アップロード
  16. Sansan Builders Box サービスの全体像 データ化結果 ⼊⼒ / データ化 システム 社内オペレーター

    ⾃動化エンジン ユーザー側 システム データ化 アップロード ⾮定型⽂書画像 ⾮定型⽂書データ化システム
  17. Sansan Builders Box 使⽤⾔語 Cloud Functions Node.js バックエンド Node.js, TypeScript,

    Express ⾃動化エンジン C# フロントエンド React, Redux, TypeScript
  18. Sansan Builders Box 1. 運⽤負荷を下げたい - 本質的な機能の開発に集中したい 2. マルチクラウドを推進 -

    GCP が導⼊しやすい状況にあった 3. チャレンジ - 本気で使うことで、メリット・デメリットを把握することができる GCP サーバーレス サービス導⼊の背景
  19. Sansan Builders Box アーキテクチャ KPI 基盤 ロギング / エラー通知 Stackdriver

    ユーザー側 システム BigQuery Cloud Pub/Sub 自動化エンジン Cloud Dataflow App Engine Cloud Functions Cloud Storage Cloud Firestore Compute Engine Cloud Tasks 入力 / データ化 システム
  20. Sansan Builders Box アーキテクチャ KPI 基盤 ロギング / エラー通知 Stackdriver

    ユーザー側 システム BigQuery Cloud Pub/Sub 自動化エンジン Cloud Dataflow App Engine Cloud Functions Cloud Storage Cloud Firestore Compute Engine Cloud Tasks 入力 / データ化 システム
  21. Sansan Builders Box アーキテクチャ KPI 基盤 ロギング / エラー通知 Stackdriver

    ユーザー側 システム BigQuery Cloud Pub/Sub 自動化エンジン Cloud Dataflow App Engine Cloud Functions Cloud Storage Cloud Firestore Compute Engine Cloud Tasks 入力 / データ化 システム
  22. Sansan Builders Box アーキテクチャ KPI 基盤 ロギング / エラー通知 Stackdriver

    ユーザー側 システム BigQuery Cloud Pub/Sub 自動化エンジン Cloud Dataflow App Engine Cloud Functions Cloud Storage Cloud Firestore Compute Engine Cloud Tasks 入力 / データ化 システム ファイル 連携
  23. Sansan Builders Box アーキテクチャ KPI 基盤 ロギング / エラー通知 Stackdriver

    ユーザー側 システム BigQuery Cloud Pub/Sub 自動化エンジン Cloud Dataflow App Engine Cloud Functions Cloud Storage Cloud Firestore Compute Engine Cloud Tasks 入力 / データ化 システム
  24. Sansan Builders Box アーキテクチャ KPI 基盤 ロギング / エラー通知 Stackdriver

    ユーザー側 システム BigQuery Cloud Pub/Sub 自動化エンジン Cloud Dataflow App Engine Cloud Functions Cloud Storage Cloud Firestore Compute Engine Cloud Tasks 入力 / データ化 システム
  25. Sansan Builders Box アーキテクチャ KPI 基盤 ロギング / エラー通知 Stackdriver

    ユーザー側 システム BigQuery Cloud Pub/Sub 自動化エンジン Cloud Dataflow App Engine Cloud Functions Cloud Storage Cloud Firestore Compute Engine Cloud Tasks 入力 / データ化 システム
  26. Sansan Builders Box オペレーターからの⼊⼒を受け付ける App Engine (Node.js) Cloud Tasks Cloud

    Firestore 社内オペレーター App Engine (SPA アプリケーション) 非同期処理
  27. Sansan Builders Box - Cloud Functions の Cloud Storage トリガー

    - Cloud Tasks の App Engine タスク ファイルアップロードで特定の処理を⾏う Cloud Storage Cloud Functions App Engine Cloud Tasks
  28. Sansan Builders Box - Google App Engine から Cloud Pub/Sub

    経由でログを送信 - Tableau で可視化 KPI 基盤 App Engine BigQuery Cloud Pub/Sub Cloud Dataflow
  29. Sansan Builders Box - ⾮同期実⾏ - 定期実⾏ - デプロイ -

    IPアドレス制限 - トラフィック分割 メリット①:アプリケーションのコードに集中できる App Engine
  30. Sansan Builders Box メリット①:アプリケーションのコードに集中できる Cloud Tasks App Engine Cron gcloud

    コマンド App Engine ファイア ウォール Traffic Splitting - ⾮同期実⾏ - 定期実⾏ - デプロイ - IPアドレス制限 - トラフィック分割 App Engine
  31. Sansan Builders Box メリット①:アプリケーションのコードに集中できる Cloud Tasks App Engine Cron gcloud

    コマンド App Engine ファイア ウォール Traffic Splitting - ⾮同期実⾏ - 定期実⾏ - デプロイ - IPアドレス制限 - トラフィック分割 App Engine
  32. Sansan Builders Box トラフィック分割 - Traffic Splitting App Engine -

    複数バージョンのインスタンスを同時に動かせる - IP アドレスや Cookie でトラフィックを分割できる - 管理画⾯からインスタンスのバージョンを変更できる
  33. Sansan Builders Box - 複数バージョンのインスタンスを同時に動かせる - IP アドレスや Cookie でトラフィックを分割できる

    - 管理画⾯からインスタンスのバージョンを変更できる トラフィック分割 - Traffic Splitting App Engine → 動作確認やテスト
  34. Sansan Builders Box - 複数バージョンのインスタンスを同時に動かせる - IP アドレスや Cookie でトラフィックを分割できる

    - 管理画⾯からインスタンスのバージョンを変更できる トラフィック分割 - Traffic Splitting App Engine → 動作確認やテスト → A/Bテスト
  35. Sansan Builders Box - 複数バージョンのインスタンスを同時に動かせる - IP アドレスや Cookie でトラフィックを分割できる

    - 管理画⾯からインスタンスのバージョンを変更できる トラフィック分割 - Traffic Splitting App Engine → 動作確認やテスト → A/Bテスト → ロールバック
  36. Sansan Builders Box ① Google App Engine 環境 ② App

    Engine ファイアウォール ③ Cloud Firestore のデータベース設計 注意点
  37. Sansan Builders Box - スタンダード環境 or フレキシブル環境 > 可能な限りスタンダード環境を使う -

    デプロイやスケーリングが⾼速 - インスタンスがゼロまでスケールイン - 公式ドキュメント参照 - https://cloud.google.com/appengine/docs/flexible/java/flexible-for-standard-users?hl=ja 注意点①:Google App Engine 環境 App Engine
  38. Sansan Builders Box GAEΠϯελϯεΛ VPC ωοτϫʔΫʹඥ෇͚͍ͨ࣌ - AWS 上の社内サービスと VPN

    で接続したかったので、 ⼀部 GAE/FE を使⽤ - 現在は Serverless VPC Access を使えば、スタンダード環境から VPC リソースにアクセス可能 > 東京リージョンに来たら乗り換えることを検討中 GAE/FE を使う場⾯ - Google App Engine / Flexible Environment - App Engine
  39. Sansan Builders Box ಛఆͷϥΠϒϥϦΛ࢖͍͍ͨ࣌ - 別サービスに切り出して Docker イメージを使⽤ - 現在は

    Cloud Run を使⽤することで、GAE/SE のような スケーラビリティを保ちつつ、Docker イメージを使った構成にできる GAE/FE を使う場⾯ - Google App Engine / Flexible Environment - App Engine
  40. Sansan Builders Box GCP サービス間の通信もブロックされることがある - Cloud Pub/Sub はグローバルなサービスであるため、 ホワイトリスト追加はできない

    - Cloud Tasks は内部的に URL フェッチ サービスを使っているため、 URL フェッチ サービスの IP アドレスを許可する 注意点②:App Engine ファイアウォール Cloud Storage Cloud Functions App Engine Cloud Tasks App Engine Cloud Pub/Sub Cloud Storage App Engine
  41. Sansan Builders Box SQL ͷΑ͏ͳ COUNT ؔ਺͸ͳ͍ - ドキュメントをガバっと取ってきてカウントすることはできる -

    分散カウンタを使う - 制約:1 ドキュメントあたり 1 秒間に約 1 回しか更新できない - カウンタ⽤のドキュメントを複数⽤意して、ランダムにインクリメントする - 全ドキュメントを取得して合計を計算する - FieldValue.increment() を使う(v1.1.0 でリリース) - 要件によっては、Redis などでカウントするのもあり 注意点③:Cloud Firestore のデータベース設計 Cloud Firestore
  42. Sansan Builders Box 1 : N ͷσʔλɿॻ͖ࠐΈ΍ಡΈࠐΈͷස౓Ͱ൑அ͢Δ - ⼀緒に扱うことが多い場合 =>

    Array 型としてフィールドに持たせる - 1 ドキュメントあたり 1 秒間に約 1 回しか更新できない - 別々に扱うことが多い場合 => サブコレクションに持たせる - コレクションとサブコレクションにまたがったクエリはできない ※ バックエンドから使うかフロントエンドから使うかで、判断軸は異なるのではないか、と考えています Firestore で関連をどのように持つか Cloud Firestore
  43. Sansan Builders Box - Cloud Firestore は 1 プロジェクトに 1

    つしか DB を作れない - 開発・⾃動テスト - Cloud Tasks は Push なので、ローカルに向けられない - 開発時は Cloud Tasks をモックするか 今後の課題 ①:開発環境
  44. Sansan Builders Box - Heroku Review Apps のようなことをしたい - PR

    ごとに環境を⽴てる - Google App Engine は複数バージョンのインスタンスを 同時に動かすことができる 今後の課題 ②:動作確認
  45. Sansan Builders Box - Stackdriver Error Reporting からの メール通知を Gmail

    のフィルタ機能で Slack に通知している - タイムラグがある - テキストをカスタマイズできない - Datadog への集約を検討 今後の課題 ④:エラー通知