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

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

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. GCP サーバーレスサービス×少数チームで
    新たなデータ化サービスを⽴ち上げる

    View Slide

  2. Sansan Builders Box
    Agenda
    - 名刺の⾼精度なデータ化を⽀えるノウハウ
    - GCP サーバーレス サービス紹介
    - アーキテクチャ
    - メリット・注意点・課題

    View Slide

  3. ⽊⽥ 悠⼀郎(Yuichiro Kida)
    2016年 3⽉ 早稲⽥⼤学 社会科学部 卒業
    2016年 4⽉ 株式会社富⼠通ソーシアルサイエンスラボラトリ ⼊社
    2017年 2⽉ 株式会社ジンジャーアップ ⼊社
    システム開発会社に出向、Ruby on Rails で開発
    2018年 2⽉ Sansan 株式会社 ⼊社
    Eight のフロントエンド・サーバーサイド開発
    2018年 6⽉ DSOC に異動
    GEES(名刺のデータ化システム)の開発・運⽤
    新規プロダクト開発
    DSOC Development Group エンジニア

    View Slide

  4. Sansan Builders Box
    Agenda
    - 名刺の⾼精度なデータ化を⽀えるノウハウ
    - GCP サーバーレス サービス紹介
    - アーキテクチャ
    - メリット・注意点・課題

    View Slide

  5. 法⼈向けクラウド名刺管理サービス 個⼈向け名刺アプリ

    View Slide

  6. View Slide

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

    View Slide

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

    View Slide

  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
    ⾔語判定モデル
    ⽇本語名刺
    英語名刺
    中国語名刺
    その他⾔語
    韓国語名刺
    名 刺

    View Slide

  10. Sansan Builders Box
    •項⽬判別の結果を学習
    •単体モデルで項⽬矩形、項⽬名の推定
    •精度 98 %
    項⽬セグメンテーション
    ⽂字を読み取らずに、
    名刺のデザインから項⽬を⾒分ける

    View Slide

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

    View Slide

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

    View Slide

  13. Sansan Builders Box
    Agenda
    - 名刺の⾼精度なデータ化を⽀えるノウハウ
    - GCP サーバーレス サービス紹介
    - アーキテクチャ
    - メリット・注意点・課題

    View Slide

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

    View Slide

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

    View Slide

  16. Sansan Builders Box
    PaaS(Platform as a Service)
    - スケールアウト・デプロイが⾼速
    - インスタンスがゼロまでスケールイン
    - サポートランタイム
    - Java, Python, Go, PHP, Node.js, Ruby(beta)
    Google App Engine
    App Engine

    View Slide

  17. Sansan Builders Box
    サーバーレスなドキュメント指向 NoSQL データベース
    - アプリケーションの負荷に応じて⾃動的に⽔平スケーリング
    - 強整合性
    - ⾼い可⽤性
    - マルチリージョンで 99.999% 以上
    - リージョンで 99.99% 以上
    Cloud Firestore
    Cloud Firestore

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide

  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

    View Slide

  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

    View Slide

  24. Sansan Builders Box
    フルマネージドなタスクキューサービス
    - 処理を⾮同期で実⾏できる
    - HTTP Target タスク(beta)
    - App Engine タスク
    - 同時タスクの最⼤レートや最⼤数を設定できる
    Cloud Tasks
    Cloud Tasks

    View Slide

  25. Sansan Builders Box
    アプリケーション、インフラストラクチャのモニタリングと管理
    - ロギング => Stackdriver Logging
    - エラー通知 => Stackdriver Error Reporting
    - モニタリング => Stackdriver Monitoring
    Stackdriver
    Stackdriver

    View Slide

  26. Sansan Builders Box
    Agenda
    - 名刺の⾼精度なデータ化を⽀えるノウハウ
    - GCP サーバーレス サービス紹介
    - アーキテクチャ
    - メリット・注意点・課題

    View Slide

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

    View Slide

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

    View Slide

  29. Sansan Builders Box
    使⽤⾔語
    Cloud Functions
    Node.js
    バックエンド
    Node.js, TypeScript, Express
    ⾃動化エンジン
    C#
    フロントエンド
    React, Redux, TypeScript

    View Slide

  30. Sansan Builders Box
    1. 運⽤負荷を下げたい
    - 本質的な機能の開発に集中したい
    2. マルチクラウドを推進
    - GCP が導⼊しやすい状況にあった
    3. チャレンジ
    - 本気で使うことで、メリット・デメリットを把握することができる
    GCP サーバーレス サービス導⼊の背景

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  38. Sansan Builders Box
    オペレーターからの⼊⼒を受け付ける
    App Engine
    (Node.js)
    Cloud Tasks
    Cloud Firestore
    社内オペレーター App Engine
    (SPA アプリケーション)
    非同期処理

    View Slide

  39. Sansan Builders Box
    - Cloud Functions の Cloud Storage トリガー
    - Cloud Tasks の App Engine タスク
    ファイルアップロードで特定の処理を⾏う
    Cloud Storage Cloud Functions App Engine
    Cloud Tasks

    View Slide

  40. Sansan Builders Box
    ⾮定型⽂書画像とオペレーターの⼊⼒データのセットを学習
    ⾃動化エンジン - Compute Engine
    少しずつ⾃動化していく
    ※ Web API として連携

    View Slide

  41. Sansan Builders Box
    - Google App Engine から Cloud Pub/Sub 経由でログを送信
    - Tableau で可視化
    KPI 基盤
    App Engine BigQuery
    Cloud Pub/Sub Cloud Dataflow

    View Slide

  42. Sansan Builders Box
    Agenda
    - 名刺の⾼精度なデータ化を⽀えるノウハウ
    - GCP サーバーレス サービス紹介
    - アーキテクチャ
    - メリット・注意点・課題

    View Slide

  43. GCP サーバーレス サービス導⼊のメリット

    View Slide

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

    View Slide

  45. Sansan Builders Box
    - ⾮同期実⾏
    - 定期実⾏
    - デプロイ
    - IPアドレス制限
    - トラフィック分割
    メリット①:アプリケーションのコードに集中できる
    App Engine

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  52. Sansan Builders Box
    - 負荷に応じてオートスケール
    - サーバーのプロビジョニングが不要
    メリット②:サーバー管理不要
    App Engine Cloud Firestore

    View Slide

  53. Sansan Builders Box
    - 基本使った分だけ課⾦
    - インスタンスがゼロまでスケールインなど
    - Google App Engine / Standard Environment
    - Cloud Run
    コスト最適化

    View Slide

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

    View Slide

  55. Sansan Builders Box
    メリット(ふりかえり)
    ① アプリケーションのコードに集中できる
    ② サーバー管理不要
    ③ コスト最適化
    限られたリソースでもスピード感を持って開発できる

    View Slide

  56. GCP サーバーレス サービス導⼊の注意点

    View Slide

  57. Sansan Builders Box
    ① Google App Engine 環境
    ② App Engine ファイアウォール
    ③ Cloud Firestore のデータベース設計
    注意点

    View Slide

  58. Sansan Builders Box
    - スタンダード環境 or フレキシブル環境
    > 可能な限りスタンダード環境を使う
    - デプロイやスケーリングが⾼速
    - インスタンスがゼロまでスケールイン
    - 公式ドキュメント参照
    - https://cloud.google.com/appengine/docs/flexible/java/flexible-for-standard-users?hl=ja
    注意点①:Google App Engine 環境
    App Engine

    View Slide

  59. Sansan Builders Box
    GAEΠϯελϯεΛ VPC ωοτϫʔΫʹඥ෇͚͍ͨ࣌
    - AWS 上の社内サービスと VPN で接続したかったので、
    ⼀部 GAE/FE を使⽤
    - 現在は Serverless VPC Access を使えば、スタンダード環境から
    VPC リソースにアクセス可能
    > 東京リージョンに来たら乗り換えることを検討中
    GAE/FE を使う場⾯ - Google App Engine / Flexible Environment -
    App Engine

    View Slide

  60. Sansan Builders Box
    ಛఆͷϥΠϒϥϦΛ࢖͍͍ͨ࣌
    - 別サービスに切り出して Docker イメージを使⽤
    - 現在は Cloud Run を使⽤することで、GAE/SE のような
    スケーラビリティを保ちつつ、Docker イメージを使った構成にできる
    GAE/FE を使う場⾯ - Google App Engine / Flexible Environment -
    App Engine

    View Slide

  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

    View Slide

  62. Sansan Builders Box
    SQL ͷΑ͏ͳ COUNT ؔ਺͸ͳ͍
    - ドキュメントをガバっと取ってきてカウントすることはできる
    - 分散カウンタを使う
    - 制約:1 ドキュメントあたり 1 秒間に約 1 回しか更新できない
    - カウンタ⽤のドキュメントを複数⽤意して、ランダムにインクリメントする
    - 全ドキュメントを取得して合計を計算する
    - FieldValue.increment() を使う(v1.1.0 でリリース)
    - 要件によっては、Redis などでカウントするのもあり
    注意点③:Cloud Firestore のデータベース設計
    Cloud Firestore

    View Slide

  63. Sansan Builders Box
    1 : N ͷσʔλɿॻ͖ࠐΈ΍ಡΈࠐΈͷස౓Ͱ൑அ͢Δ
    - ⼀緒に扱うことが多い場合 => Array 型としてフィールドに持たせる
    - 1 ドキュメントあたり 1 秒間に約 1 回しか更新できない
    - 別々に扱うことが多い場合 => サブコレクションに持たせる
    - コレクションとサブコレクションにまたがったクエリはできない
    ※ バックエンドから使うかフロントエンドから使うかで、判断軸は異なるのではないか、と考えています
    Firestore で関連をどのように持つか
    Cloud Firestore

    View Slide

  64. 今後の課題

    View Slide

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

    View Slide

  66. Sansan Builders Box
    - Cloud Firestore は 1 プロジェクトに 1 つしか DB を作れない
    - 開発・⾃動テスト
    - Cloud Tasks は Push なので、ローカルに向けられない
    - 開発時は Cloud Tasks をモックするか
    今後の課題 ①:開発環境

    View Slide

  67. Sansan Builders Box
    - Heroku Review Apps のようなことをしたい
    - PR ごとに環境を⽴てる
    - Google App Engine は複数バージョンのインスタンスを
    同時に動かすことができる
    今後の課題 ②:動作確認

    View Slide

  68. Sansan Builders Box
    - SQL のように柔軟なクエリはない
    - BigQuery にデータをインポートする
    今後の課題 ③:分析系クエリ

    View Slide

  69. Sansan Builders Box
    - Stackdriver Error Reporting からの メール通知を
    Gmail のフィルタ機能で Slack に通知している
    - タイムラグがある
    - テキストをカスタマイズできない
    - Datadog への集約を検討
    今後の課題 ④:エラー通知

    View Slide

  70. Sansan Builders Box
    GCP サーバーレス サービス
    - 限られたリソースでもスピード感を持って開発できる
    - フルマネージド、オートスケールの良さを享受できる⼀⽅で、
    制約やクセがある
    - メンバーが増えてくると、開発環境などの整備に⼯夫が必要
    まとめ

    View Slide

  71. We are hiring!

    View Slide

  72. View Slide