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

13d936e697fe0f4fa96f926d0a712f6c?s=47 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/

13d936e697fe0f4fa96f926d0a712f6c?s=128

Sansan

October 23, 2019
Tweet

Transcript

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

  2. Sansan Builders Box Agenda - 名刺の⾼精度なデータ化を⽀えるノウハウ - GCP サーバーレス サービス紹介

    - アーキテクチャ - メリット・注意点・課題
  3. ⽊⽥ 悠⼀郎(Yuichiro Kida) 2016年 3⽉ 早稲⽥⼤学 社会科学部 卒業 2016年 4⽉

    株式会社富⼠通ソーシアルサイエンスラボラトリ ⼊社 2017年 2⽉ 株式会社ジンジャーアップ ⼊社 システム開発会社に出向、Ruby on Rails で開発 2018年 2⽉ Sansan 株式会社 ⼊社 Eight のフロントエンド・サーバーサイド開発 2018年 6⽉ DSOC に異動 GEES(名刺のデータ化システム)の開発・運⽤ 新規プロダクト開発 DSOC Development Group エンジニア
  4. Sansan Builders Box Agenda - 名刺の⾼精度なデータ化を⽀えるノウハウ - GCP サーバーレス サービス紹介

    - アーキテクチャ - メリット・注意点・課題
  5. 法⼈向けクラウド名刺管理サービス 個⼈向け名刺アプリ

  6. None
  7. Sansan Builders Box 機械の⼒と⼈の⼒を組み合わせる ⾼精度なデータ化を⽀えるノウハウ

  8. Sansan Builders Box これにより、オペレーターは効率的に最終チェックを⾏うことが可能になります。 ミステイクディテクター 誤りの傾向を学習してミスの可能性を予測

  9. 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 ⾔語判定モデル ⽇本語名刺 英語名刺 中国語名刺 その他⾔語 韓国語名刺 名 刺
  10. Sansan Builders Box •項⽬判別の結果を学習 •単体モデルで項⽬矩形、項⽬名の推定 •精度 98 % 項⽬セグメンテーション ⽂字を読み取らずに、

    名刺のデザインから項⽬を⾒分ける
  11. Sansan Builders Box - ⼀つの項⽬に対する、複数のオペレータによる多重⼊⼒ - ⼊⼒内容に対する⽬視チェック - ⼊⼒ルールやトレーニング問題の作成 オペレーターによる⼊⼒

  12. Sansan Builders Box 本⽇は、⾼精度なデータ化ノウハウを活⽤した 「⾮定型⽂書のデータ化」に関する取り組みをご紹介 新たなデータ化サービスの検証 ※ 正式な新サービスの発表ではございません

  13. Sansan Builders Box Agenda - 名刺の⾼精度なデータ化を⽀えるノウハウ - GCP サーバーレス サービス紹介

    - アーキテクチャ - メリット・注意点・課題
  14. Sansan Builders Box - Google App Engine - Cloud Firestore

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

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

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

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

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

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

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

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

    - message-1 - message-2 - … - room-B - … Cloud Firestore の階層データ name: “開発ルーム” from: “太郎”, msg: “こんにちは!” from: “次郎”, msg: “Hello!” ← (ルート)コレクション ← ドキュメント ← rooms のサブコレクション ← ドキュメント Cloud Firestore
  23. 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
  24. Sansan Builders Box フルマネージドなタスクキューサービス - 処理を⾮同期で実⾏できる - HTTP Target タスク(beta)

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

    エラー通知 => Stackdriver Error Reporting - モニタリング => Stackdriver Monitoring Stackdriver Stackdriver
  26. Sansan Builders Box Agenda - 名刺の⾼精度なデータ化を⽀えるノウハウ - GCP サーバーレス サービス紹介

    - アーキテクチャ - メリット・注意点・課題
  27. Sansan Builders Box サービスの全体像 ⾮定型⽂書画像 データ化結果 ⼊⼒ / データ化 システム

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

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

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

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

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

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

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

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

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

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

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

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

    - Cloud Tasks の App Engine タスク ファイルアップロードで特定の処理を⾏う Cloud Storage Cloud Functions App Engine Cloud Tasks
  40. Sansan Builders Box ⾮定型⽂書画像とオペレーターの⼊⼒データのセットを学習 ⾃動化エンジン - Compute Engine 少しずつ⾃動化していく ※

    Web API として連携
  41. Sansan Builders Box - Google App Engine から Cloud Pub/Sub

    経由でログを送信 - Tableau で可視化 KPI 基盤 App Engine BigQuery Cloud Pub/Sub Cloud Dataflow
  42. Sansan Builders Box Agenda - 名刺の⾼精度なデータ化を⽀えるノウハウ - GCP サーバーレス サービス紹介

    - アーキテクチャ - メリット・注意点・課題
  43. GCP サーバーレス サービス導⼊のメリット

  44. Sansan Builders Box ① アプリケーションのコードに集中できる ② サーバー管理不要 ③ コスト最適化 メリット

  45. Sansan Builders Box - ⾮同期実⾏ - 定期実⾏ - デプロイ -

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

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

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

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

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

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

    - 管理画⾯からインスタンスのバージョンを変更できる トラフィック分割 - Traffic Splitting App Engine → 動作確認やテスト → A/Bテスト → ロールバック
  52. Sansan Builders Box - 負荷に応じてオートスケール - サーバーのプロビジョニングが不要 メリット②:サーバー管理不要 App Engine

    Cloud Firestore
  53. Sansan Builders Box - 基本使った分だけ課⾦ - インスタンスがゼロまでスケールインなど - Google App

    Engine / Standard Environment - Cloud Run コスト最適化
  54. Sansan Builders Box メリット(ふりかえり) ① アプリケーションのコードに集中できる ② サーバー管理不要 ③ コスト最適化

  55. Sansan Builders Box メリット(ふりかえり) ① アプリケーションのコードに集中できる ② サーバー管理不要 ③ コスト最適化

    限られたリソースでもスピード感を持って開発できる
  56. GCP サーバーレス サービス導⼊の注意点

  57. Sansan Builders Box ① Google App Engine 環境 ② App

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

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

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

    Cloud Run を使⽤することで、GAE/SE のような スケーラビリティを保ちつつ、Docker イメージを使った構成にできる GAE/FE を使う場⾯ - Google App Engine / Flexible Environment - App Engine
  61. 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
  62. Sansan Builders Box SQL ͷΑ͏ͳ COUNT ؔ਺͸ͳ͍ - ドキュメントをガバっと取ってきてカウントすることはできる -

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

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

  65. Sansan Builders Box ①:開発環境 ②:動作確認 ③:分析系クエリ ④:エラー通知 > これから整えていく 今後の課題

  66. Sansan Builders Box - Cloud Firestore は 1 プロジェクトに 1

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

    ごとに環境を⽴てる - Google App Engine は複数バージョンのインスタンスを 同時に動かすことができる 今後の課題 ②:動作確認
  68. Sansan Builders Box - SQL のように柔軟なクエリはない - BigQuery にデータをインポートする 今後の課題

    ③:分析系クエリ
  69. Sansan Builders Box - Stackdriver Error Reporting からの メール通知を Gmail

    のフィルタ機能で Slack に通知している - タイムラグがある - テキストをカスタマイズできない - Datadog への集約を検討 今後の課題 ④:エラー通知
  70. Sansan Builders Box GCP サーバーレス サービス - 限られたリソースでもスピード感を持って開発できる - フルマネージド、オートスケールの良さを享受できる⼀⽅で、

    制約やクセがある - メンバーが増えてくると、開発環境などの整備に⼯夫が必要 まとめ
  71. We are hiring!

  72. None