GCP サーバーレスサービス×少数チームで新たなデータ化サービスを立ち上げる / GCP serverless new desitization system
by
Sansan
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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