GCP サーバーレスサービス×少数チームで新たなデータ化サービスを立ち上げる / GCP serverless new desitization system
by
Sansan
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
GCP サーバーレスサービス×少数チームで 新たなデータ化サービスを⽴ち上げる
Slide 2
Slide 2 text
Sansan Builders Box Agenda - 名刺の⾼精度なデータ化を⽀えるノウハウ - GCP サーバーレス サービス紹介 - アーキテクチャ - メリット・注意点・課題
Slide 3
Slide 3 text
⽊⽥ 悠⼀郎(Yuichiro Kida) 2016年 3⽉ 早稲⽥⼤学 社会科学部 卒業 2016年 4⽉ 株式会社富⼠通ソーシアルサイエンスラボラトリ ⼊社 2017年 2⽉ 株式会社ジンジャーアップ ⼊社 システム開発会社に出向、Ruby on Rails で開発 2018年 2⽉ Sansan 株式会社 ⼊社 Eight のフロントエンド・サーバーサイド開発 2018年 6⽉ DSOC に異動 GEES(名刺のデータ化システム)の開発・運⽤ 新規プロダクト開発 DSOC Development Group エンジニア
Slide 4
Slide 4 text
Sansan Builders Box Agenda - 名刺の⾼精度なデータ化を⽀えるノウハウ - GCP サーバーレス サービス紹介 - アーキテクチャ - メリット・注意点・課題
Slide 5
Slide 5 text
法⼈向けクラウド名刺管理サービス 個⼈向け名刺アプリ
Slide 6
Slide 6 text
No content
Slide 7
Slide 7 text
Sansan Builders Box 機械の⼒と⼈の⼒を組み合わせる ⾼精度なデータ化を⽀えるノウハウ
Slide 8
Slide 8 text
Sansan Builders Box これにより、オペレーターは効率的に最終チェックを⾏うことが可能になります。 ミステイクディテクター 誤りの傾向を学習してミスの可能性を予測
Slide 9
Slide 9 text
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 ⾔語判定モデル ⽇本語名刺 英語名刺 中国語名刺 その他⾔語 韓国語名刺 名 刺
Slide 10
Slide 10 text
Sansan Builders Box •項⽬判別の結果を学習 •単体モデルで項⽬矩形、項⽬名の推定 •精度 98 % 項⽬セグメンテーション ⽂字を読み取らずに、 名刺のデザインから項⽬を⾒分ける
Slide 11
Slide 11 text
Sansan Builders Box - ⼀つの項⽬に対する、複数のオペレータによる多重⼊⼒ - ⼊⼒内容に対する⽬視チェック - ⼊⼒ルールやトレーニング問題の作成 オペレーターによる⼊⼒
Slide 12
Slide 12 text
Sansan Builders Box 本⽇は、⾼精度なデータ化ノウハウを活⽤した 「⾮定型⽂書のデータ化」に関する取り組みをご紹介 新たなデータ化サービスの検証 ※ 正式な新サービスの発表ではございません
Slide 13
Slide 13 text
Sansan Builders Box Agenda - 名刺の⾼精度なデータ化を⽀えるノウハウ - GCP サーバーレス サービス紹介 - アーキテクチャ - メリット・注意点・課題
Slide 14
Slide 14 text
Sansan Builders Box - Google App Engine - Cloud Firestore - Cloud Tasks - Stackdriver - Cloud Storage - Cloud Functions GCP サーバーレス サービスについて
Slide 15
Slide 15 text
Sansan Builders Box - Google App Engine - Cloud Firestore - Cloud Tasks - Stackdriver - Cloud Storage ≒ AWS S3 - Cloud Functions ≒ AWS Labmda GCP サーバーレス サービスについて
Slide 16
Slide 16 text
Sansan Builders Box PaaS(Platform as a Service) - スケールアウト・デプロイが⾼速 - インスタンスがゼロまでスケールイン - サポートランタイム - Java, Python, Go, PHP, Node.js, Ruby(beta) Google App Engine App Engine
Slide 17
Slide 17 text
Sansan Builders Box サーバーレスなドキュメント指向 NoSQL データベース - アプリケーションの負荷に応じて⾃動的に⽔平スケーリング - 強整合性 - ⾼い可⽤性 - マルチリージョンで 99.999% 以上 - リージョンで 99.99% 以上 Cloud Firestore Cloud Firestore
Slide 18
Slide 18 text
Sansan Builders Box ྫʣͦΕͧΕͷνϟοτϧʔϜʹෳͷϝοηʔδ͕͋Δ - rooms - room-A - messages - message-1 - message-2 - … - room-B - … Cloud Firestore の階層データ name: “開発ルーム” from: “太郎”, msg: “こんにちは!” from: “次郎”, msg: “Hello!” Cloud Firestore
Slide 19
Slide 19 text
Sansan Builders Box ྫʣͦΕͧΕͷνϟοτϧʔϜʹෳͷϝοηʔδ͕͋Δ - rooms - room-A - messages - message-1 - message-2 - … - room-B - … Cloud Firestore の階層データ name: “開発ルーム” from: “太郎”, msg: “こんにちは!” from: “次郎”, msg: “Hello!” ← (ルート)コレクション Cloud Firestore
Slide 20
Slide 20 text
Sansan Builders Box ྫʣͦΕͧΕͷνϟοτϧʔϜʹෳͷϝοηʔδ͕͋Δ - rooms - room-A - messages - message-1 - message-2 - … - room-B - … Cloud Firestore の階層データ name: “開発ルーム” from: “太郎”, msg: “こんにちは!” from: “次郎”, msg: “Hello!” ← (ルート)コレクション ← ドキュメント Cloud Firestore
Slide 21
Slide 21 text
Sansan Builders Box ྫʣͦΕͧΕͷνϟοτϧʔϜʹෳͷϝοηʔδ͕͋Δ - rooms - room-A - messages - message-1 - message-2 - … - room-B - … Cloud Firestore の階層データ name: “開発ルーム” from: “太郎”, msg: “こんにちは!” from: “次郎”, msg: “Hello!” ← (ルート)コレクション ← ドキュメント ← rooms のサブコレクション Cloud Firestore
Slide 22
Slide 22 text
Sansan Builders Box ྫʣͦΕͧΕͷνϟοτϧʔϜʹෳͷϝοηʔδ͕͋Δ - rooms - room-A - messages - message-1 - message-2 - … - room-B - … Cloud Firestore の階層データ name: “開発ルーム” from: “太郎”, msg: “こんにちは!” from: “次郎”, msg: “Hello!” ← (ルート)コレクション ← ドキュメント ← rooms のサブコレクション ← ドキュメント Cloud Firestore
Slide 23
Slide 23 text
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
Slide 24
Slide 24 text
Sansan Builders Box フルマネージドなタスクキューサービス - 処理を⾮同期で実⾏できる - HTTP Target タスク(beta) - App Engine タスク - 同時タスクの最⼤レートや最⼤数を設定できる Cloud Tasks Cloud Tasks
Slide 25
Slide 25 text
Sansan Builders Box アプリケーション、インフラストラクチャのモニタリングと管理 - ロギング => Stackdriver Logging - エラー通知 => Stackdriver Error Reporting - モニタリング => Stackdriver Monitoring Stackdriver Stackdriver
Slide 26
Slide 26 text
Sansan Builders Box Agenda - 名刺の⾼精度なデータ化を⽀えるノウハウ - GCP サーバーレス サービス紹介 - アーキテクチャ - メリット・注意点・課題
Slide 27
Slide 27 text
Sansan Builders Box サービスの全体像 ⾮定型⽂書画像 データ化結果 ⼊⼒ / データ化 システム 社内オペレーター ⾃動化エンジン ユーザー側 システム データ化 ⾮定型⽂書データ化システム アップロード
Slide 28
Slide 28 text
Sansan Builders Box サービスの全体像 データ化結果 ⼊⼒ / データ化 システム 社内オペレーター ⾃動化エンジン ユーザー側 システム データ化 アップロード ⾮定型⽂書画像 ⾮定型⽂書データ化システム
Slide 29
Slide 29 text
Sansan Builders Box 使⽤⾔語 Cloud Functions Node.js バックエンド Node.js, TypeScript, Express ⾃動化エンジン C# フロントエンド React, Redux, TypeScript
Slide 30
Slide 30 text
Sansan Builders Box 1. 運⽤負荷を下げたい - 本質的な機能の開発に集中したい 2. マルチクラウドを推進 - GCP が導⼊しやすい状況にあった 3. チャレンジ - 本気で使うことで、メリット・デメリットを把握することができる GCP サーバーレス サービス導⼊の背景
Slide 31
Slide 31 text
Sansan Builders Box アーキテクチャ KPI 基盤 ロギング / エラー通知 Stackdriver ユーザー側 システム BigQuery Cloud Pub/Sub 自動化エンジン Cloud Dataflow App Engine Cloud Functions Cloud Storage Cloud Firestore Compute Engine Cloud Tasks 入力 / データ化 システム
Slide 32
Slide 32 text
Sansan Builders Box アーキテクチャ KPI 基盤 ロギング / エラー通知 Stackdriver ユーザー側 システム BigQuery Cloud Pub/Sub 自動化エンジン Cloud Dataflow App Engine Cloud Functions Cloud Storage Cloud Firestore Compute Engine Cloud Tasks 入力 / データ化 システム
Slide 33
Slide 33 text
Sansan Builders Box アーキテクチャ KPI 基盤 ロギング / エラー通知 Stackdriver ユーザー側 システム BigQuery Cloud Pub/Sub 自動化エンジン Cloud Dataflow App Engine Cloud Functions Cloud Storage Cloud Firestore Compute Engine Cloud Tasks 入力 / データ化 システム
Slide 34
Slide 34 text
Sansan Builders Box アーキテクチャ KPI 基盤 ロギング / エラー通知 Stackdriver ユーザー側 システム BigQuery Cloud Pub/Sub 自動化エンジン Cloud Dataflow App Engine Cloud Functions Cloud Storage Cloud Firestore Compute Engine Cloud Tasks 入力 / データ化 システム ファイル 連携
Slide 35
Slide 35 text
Sansan Builders Box アーキテクチャ KPI 基盤 ロギング / エラー通知 Stackdriver ユーザー側 システム BigQuery Cloud Pub/Sub 自動化エンジン Cloud Dataflow App Engine Cloud Functions Cloud Storage Cloud Firestore Compute Engine Cloud Tasks 入力 / データ化 システム
Slide 36
Slide 36 text
Sansan Builders Box アーキテクチャ KPI 基盤 ロギング / エラー通知 Stackdriver ユーザー側 システム BigQuery Cloud Pub/Sub 自動化エンジン Cloud Dataflow App Engine Cloud Functions Cloud Storage Cloud Firestore Compute Engine Cloud Tasks 入力 / データ化 システム
Slide 37
Slide 37 text
Sansan Builders Box アーキテクチャ KPI 基盤 ロギング / エラー通知 Stackdriver ユーザー側 システム BigQuery Cloud Pub/Sub 自動化エンジン Cloud Dataflow App Engine Cloud Functions Cloud Storage Cloud Firestore Compute Engine Cloud Tasks 入力 / データ化 システム
Slide 38
Slide 38 text
Sansan Builders Box オペレーターからの⼊⼒を受け付ける App Engine (Node.js) Cloud Tasks Cloud Firestore 社内オペレーター App Engine (SPA アプリケーション) 非同期処理
Slide 39
Slide 39 text
Sansan Builders Box - Cloud Functions の Cloud Storage トリガー - Cloud Tasks の App Engine タスク ファイルアップロードで特定の処理を⾏う Cloud Storage Cloud Functions App Engine Cloud Tasks
Slide 40
Slide 40 text
Sansan Builders Box ⾮定型⽂書画像とオペレーターの⼊⼒データのセットを学習 ⾃動化エンジン - Compute Engine 少しずつ⾃動化していく ※ Web API として連携
Slide 41
Slide 41 text
Sansan Builders Box - Google App Engine から Cloud Pub/Sub 経由でログを送信 - Tableau で可視化 KPI 基盤 App Engine BigQuery Cloud Pub/Sub Cloud Dataflow
Slide 42
Slide 42 text
Sansan Builders Box Agenda - 名刺の⾼精度なデータ化を⽀えるノウハウ - GCP サーバーレス サービス紹介 - アーキテクチャ - メリット・注意点・課題
Slide 43
Slide 43 text
GCP サーバーレス サービス導⼊のメリット
Slide 44
Slide 44 text
Sansan Builders Box ① アプリケーションのコードに集中できる ② サーバー管理不要 ③ コスト最適化 メリット
Slide 45
Slide 45 text
Sansan Builders Box - ⾮同期実⾏ - 定期実⾏ - デプロイ - IPアドレス制限 - トラフィック分割 メリット①:アプリケーションのコードに集中できる App Engine
Slide 46
Slide 46 text
Sansan Builders Box メリット①:アプリケーションのコードに集中できる Cloud Tasks App Engine Cron gcloud コマンド App Engine ファイア ウォール Traffic Splitting - ⾮同期実⾏ - 定期実⾏ - デプロイ - IPアドレス制限 - トラフィック分割 App Engine
Slide 47
Slide 47 text
Sansan Builders Box メリット①:アプリケーションのコードに集中できる Cloud Tasks App Engine Cron gcloud コマンド App Engine ファイア ウォール Traffic Splitting - ⾮同期実⾏ - 定期実⾏ - デプロイ - IPアドレス制限 - トラフィック分割 App Engine
Slide 48
Slide 48 text
Sansan Builders Box トラフィック分割 - Traffic Splitting App Engine - 複数バージョンのインスタンスを同時に動かせる - IP アドレスや Cookie でトラフィックを分割できる - 管理画⾯からインスタンスのバージョンを変更できる
Slide 49
Slide 49 text
Sansan Builders Box - 複数バージョンのインスタンスを同時に動かせる - IP アドレスや Cookie でトラフィックを分割できる - 管理画⾯からインスタンスのバージョンを変更できる トラフィック分割 - Traffic Splitting App Engine → 動作確認やテスト
Slide 50
Slide 50 text
Sansan Builders Box - 複数バージョンのインスタンスを同時に動かせる - IP アドレスや Cookie でトラフィックを分割できる - 管理画⾯からインスタンスのバージョンを変更できる トラフィック分割 - Traffic Splitting App Engine → 動作確認やテスト → A/Bテスト
Slide 51
Slide 51 text
Sansan Builders Box - 複数バージョンのインスタンスを同時に動かせる - IP アドレスや Cookie でトラフィックを分割できる - 管理画⾯からインスタンスのバージョンを変更できる トラフィック分割 - Traffic Splitting App Engine → 動作確認やテスト → A/Bテスト → ロールバック
Slide 52
Slide 52 text
Sansan Builders Box - 負荷に応じてオートスケール - サーバーのプロビジョニングが不要 メリット②:サーバー管理不要 App Engine Cloud Firestore
Slide 53
Slide 53 text
Sansan Builders Box - 基本使った分だけ課⾦ - インスタンスがゼロまでスケールインなど - Google App Engine / Standard Environment - Cloud Run コスト最適化
Slide 54
Slide 54 text
Sansan Builders Box メリット(ふりかえり) ① アプリケーションのコードに集中できる ② サーバー管理不要 ③ コスト最適化
Slide 55
Slide 55 text
Sansan Builders Box メリット(ふりかえり) ① アプリケーションのコードに集中できる ② サーバー管理不要 ③ コスト最適化 限られたリソースでもスピード感を持って開発できる
Slide 56
Slide 56 text
GCP サーバーレス サービス導⼊の注意点
Slide 57
Slide 57 text
Sansan Builders Box ① Google App Engine 環境 ② App Engine ファイアウォール ③ Cloud Firestore のデータベース設計 注意点
Slide 58
Slide 58 text
Sansan Builders Box - スタンダード環境 or フレキシブル環境 > 可能な限りスタンダード環境を使う - デプロイやスケーリングが⾼速 - インスタンスがゼロまでスケールイン - 公式ドキュメント参照 - https://cloud.google.com/appengine/docs/flexible/java/flexible-for-standard-users?hl=ja 注意点①:Google App Engine 環境 App Engine
Slide 59
Slide 59 text
Sansan Builders Box GAEΠϯελϯεΛ VPC ωοτϫʔΫʹඥ͚͍ͨ࣌ - AWS 上の社内サービスと VPN で接続したかったので、 ⼀部 GAE/FE を使⽤ - 現在は Serverless VPC Access を使えば、スタンダード環境から VPC リソースにアクセス可能 > 東京リージョンに来たら乗り換えることを検討中 GAE/FE を使う場⾯ - Google App Engine / Flexible Environment - App Engine
Slide 60
Slide 60 text
Sansan Builders Box ಛఆͷϥΠϒϥϦΛ͍͍ͨ࣌ - 別サービスに切り出して Docker イメージを使⽤ - 現在は Cloud Run を使⽤することで、GAE/SE のような スケーラビリティを保ちつつ、Docker イメージを使った構成にできる GAE/FE を使う場⾯ - Google App Engine / Flexible Environment - App Engine
Slide 61
Slide 61 text
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
Slide 62
Slide 62 text
Sansan Builders Box SQL ͷΑ͏ͳ COUNT ؔͳ͍ - ドキュメントをガバっと取ってきてカウントすることはできる - 分散カウンタを使う - 制約:1 ドキュメントあたり 1 秒間に約 1 回しか更新できない - カウンタ⽤のドキュメントを複数⽤意して、ランダムにインクリメントする - 全ドキュメントを取得して合計を計算する - FieldValue.increment() を使う(v1.1.0 でリリース) - 要件によっては、Redis などでカウントするのもあり 注意点③:Cloud Firestore のデータベース設計 Cloud Firestore
Slide 63
Slide 63 text
Sansan Builders Box 1 : N ͷσʔλɿॻ͖ࠐΈಡΈࠐΈͷසͰஅ͢Δ - ⼀緒に扱うことが多い場合 => Array 型としてフィールドに持たせる - 1 ドキュメントあたり 1 秒間に約 1 回しか更新できない - 別々に扱うことが多い場合 => サブコレクションに持たせる - コレクションとサブコレクションにまたがったクエリはできない ※ バックエンドから使うかフロントエンドから使うかで、判断軸は異なるのではないか、と考えています Firestore で関連をどのように持つか Cloud Firestore
Slide 64
Slide 64 text
今後の課題
Slide 65
Slide 65 text
Sansan Builders Box ①:開発環境 ②:動作確認 ③:分析系クエリ ④:エラー通知 > これから整えていく 今後の課題
Slide 66
Slide 66 text
Sansan Builders Box - Cloud Firestore は 1 プロジェクトに 1 つしか DB を作れない - 開発・⾃動テスト - Cloud Tasks は Push なので、ローカルに向けられない - 開発時は Cloud Tasks をモックするか 今後の課題 ①:開発環境
Slide 67
Slide 67 text
Sansan Builders Box - Heroku Review Apps のようなことをしたい - PR ごとに環境を⽴てる - Google App Engine は複数バージョンのインスタンスを 同時に動かすことができる 今後の課題 ②:動作確認
Slide 68
Slide 68 text
Sansan Builders Box - SQL のように柔軟なクエリはない - BigQuery にデータをインポートする 今後の課題 ③:分析系クエリ
Slide 69
Slide 69 text
Sansan Builders Box - Stackdriver Error Reporting からの メール通知を Gmail のフィルタ機能で Slack に通知している - タイムラグがある - テキストをカスタマイズできない - Datadog への集約を検討 今後の課題 ④:エラー通知
Slide 70
Slide 70 text
Sansan Builders Box GCP サーバーレス サービス - 限られたリソースでもスピード感を持って開発できる - フルマネージド、オートスケールの良さを享受できる⼀⽅で、 制約やクセがある - メンバーが増えてくると、開発環境などの整備に⼯夫が必要 まとめ
Slide 71
Slide 71 text
We are hiring!
Slide 72
Slide 72 text
No content