少数チームによる高速な事業立ち上げ gcp サービ …...d2-3-s03: gcp...

76
D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ 木田悠一郎, DSOC Development Group エンジニア, Sansan 株式会社 磯部俊行, カスタマー エンジニア, Google Cloud Japan 2019/8/1

Upload: others

Post on 16-Feb-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

D2-3-S03:GCP サーバーレス サービスと Sansan データ化技術〜少数チームによる高速な事業立ち上げ

木田悠一郎, DSOC Development Group エンジニア, Sansan 株式会社磯部俊行, カスタマー エンジニア, Google Cloud Japan 2019/8/1

Page 2: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

木田 悠一郎

Sansan 株式会社DSOC Development Group エンジニア

磯部 俊行

Google Cloud Japanカスタマー エンジニア

Page 3: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

GCP サーバーレス サービス

Sansan サービス紹介

高精度なデータ化を支えるノウハウ

少数チームで高速にサービスを立ち上げる

Agenda

Page 4: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

01GCPサーバーレス サービス

Page 5: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

サーバー設定

HW 調達

モニタリング

バージョニング

プログラミング

ネットワーク設定

ロギング

ストレージ設計

オーケストレーション

テスト

OS 設定

MW 設定

アプリケーション開発で考えること

Page 6: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

物理サーバー / 仮想マシンの

プロビジョニング、管理、メンテナンスを意識することなく、

ソフトウェアの機能そのものや実行環境を得られる

サーバーレスとは?

No InfraManagement

Fully Managed Security

Pay only for usage

Page 7: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

開発 ビジネス バリュー

サーバーレスの目的

Page 8: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

運用モデル プログラミング モデル

No Provisioning -> Scalability- サーバー不要- サービス単位でスケール

Secure- 組み込みのマネージド

セキュリティ- 自動アップデート

Pay for usage- スモール スタート- コスト最適化

Focus on service- サービス指向の開発- マイクロサービス

Event-driven- 疎結合- 変更容易性

サーバーレスの開発モデル

Page 9: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

オーケストレーション vs コレオグラフィ

イベント

イベント

イベント

イベント各サービスが疎結合になり、開発単位が小さくなるため、高速に開発や変更が可能

Event-driven なアーキテクチャ

Page 10: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

Compute

Data Analytics ML & AI

Database & Storage

Smart assistants &

chat

DevOps

Messaging

GCP のサーバーレスはフルスタック

Page 11: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

Compute Database Messaging, Queue Data Monitoring

App Engine

Cloud Functions BigQuery Cloud

DataflowCloud

Pub/Sub Stackdriver

Cloud Run Cloud Storage

Cloud Memorystore

Cloud SQL

Cloud Spanner

Cloud Firestore

Cloud Bigtable

Cloud Tasks

Web アプリケーションのための GCP サーバーレスサービス

Page 12: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

高いスケーラビリティを持つサーバーレス Web アプリケーション

管理が容易

サーバー管理なし

スケールアウトが高速

ゼロにまでスケールイン

パッチなどの更新なし

開発しやすい

アプリのコードに集中できる

バージョニング

トラフィック スプリット

サポート ランタイム

Java

Python

Go

PHP

Node.js

Ruby alpha

{}

Google App Engine

Page 13: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

● NoSQL データベース

● 強整合性

● 高い可用性

○ マルチ リージョンで 99.999%

○ リージョナルで 99.99%

● 2 つのモード

○ ネイティブ モード(Realtime)

○ Datastore モード

Cloud Firestore

Page 14: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

Cloud Firestore の特長

データ更新をリアルタイムに同期

サーバサイドの DB としても

モバイル バックエンドとしても

name: "ユーザ A"description: "ユーザ A の説明"

My First Note

My Other Note

name: "ユーザ B"description: "ユーザ B の説明"

ドキュメント指向でスケーラブルなデータ構

Page 15: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

信頼性の高いタスクのオフロード

フル マネージドのタスクキュー : 長時間の非同期タスクも確実にディスパッ

チ。インフラ管理なし、使った分だけお支払い。

レート制御 と 再試行

必要なスループットに合わせてレート制御 や 再試行の設定が可能。

HTTP/S Auth(IAM)を使った柔軟なタスク ルーティング

GCP 内外のサービスに対してセキュアにタスクをディスパッチ。

マイクロサービス間の非同期タスク向けキューイング システム

Cloud Tasks

Page 16: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

at-least-once 配信

プロビジョニング不要の自動処理

グローバルにデザインされた高い可用性

信頼性の高いリアルタイムのメッセージング

Cloud Pub/Sub

Page 17: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

GCP サーバーレス サービス

Sansan サービス紹介

高精度なデータ化を支えるノウハウ

少数チームで高速にサービスを立ち上げる

Agenda

Page 18: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

02Sansanサービス紹介

Page 19: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

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

Page 20: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ
Page 21: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

03高精度なデータ化を支えるノウハウ

Page 22: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

高精度なデータ化を支えるノウハウ機械の力と人力を組み合わせる

Page 23: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

ミステイクディテクター

これにより、オペレーターは効率的

に最終チェックを行うことが可能にな

ります。

誤りの傾向を学習してミスの可

能性を予測

Page 24: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

言語処理判定

● 4言語(日英中韓)に対応

● データ化フローの効率化

● オペレータへの振り分けの自

動化

● 精度 98 %

名刺画像から言語を判定

Page 25: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

項目セグメンテーション

● 項目判別の結果を学習

● 単体モデルで項目矩形、

項目名の推定

● 精度 98 %

文字を読み取らずに、名刺のデ

ザインから項目を見分ける

Page 26: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

高精度なデータ化のための人の力

● 入力ルールやトレーニング問題の作成

● 一つの項目に対する、複数のオペレータによる多重入力

● 入力内容に対する目視チェック

Page 27: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

本日は「請求書のデータ化」に関する

取り組みをご紹介します

新たなデータ化サービスの検証

※ 正式な新サービスの発表ではございません

Page 28: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

04少数チームで

高速にサービス

を立ち上げる

Page 29: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

GCP サーバーレス採用の経緯

課題

運用負荷を下げ、本質的な機能の開発に集中したい

チャレンジすること自体に価値があり、

今後の技術選択の幅を増やすことができる

導入の背景

本気で使わないと分からない

昨年から社内でマルチクラウドを推進 参照: https://www.slideshare.net/ShimpeiNagai/gce-sansan

Page 30: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

請求書データ化システム

Page 31: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

使用言語

フロントエンド

React, Redux, TypeScript

Cloud Functions

Node.js

バックエンド

Node.js, TypeScript, Express

自動化エンジン

C#

Page 32: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

サービスの全体像

ユーザー側システム

請求書データ化システム

自動化エンジン

データ化結果

入力 / データ化システム

社内オペレーター

入力

データ化

請求書画像

Page 33: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

サービスの全体像

ユーザー側システム

請求書画像

請求書データ化システム

自動化エンジン

データ化結果

入力 / データ化システム

社内オペレーター

入力

データ化

Page 34: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

KPI 基盤

App Engine

Cloud Functions

BigQueryCloud Pub/Sub

ロギング / エラー通知

Stackdriver

Cloud Storage

Cloud Firestore

自動化エンジン

Compute Engine

ユーザー側システム

Cloud Dataflow

Cloud Tasks

アーキテクチャ

入力 / データ化システム

Page 35: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

KPI 基盤

App Engine

Cloud Functions

BigQueryCloud Pub/Sub

ロギング / エラー通知

Stackdriver

Cloud Storage

Cloud Firestore

自動化エンジン

Compute Engine

ユーザー側システム

Cloud Dataflow

Cloud Tasks

アーキテクチャ

入力 / データ化システム

Page 36: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

アーキテクチャ

KPI 基盤

BigQueryCloud Pub/Sub

ロギング / エラー通知

Stackdriver

自動化エンジン

Compute Engine

ユーザー側システム

Cloud Dataflow

App Engine

Cloud Functions

Cloud Storage

Cloud Firestore

Cloud Tasks

入力 / データ化システム

Page 37: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

KPI 基盤

App Engine

Cloud Functions

BigQueryCloud Pub/Sub

ロギング / エラー通知

Stackdriver

Cloud Storage

Cloud Firestore

自動化エンジン

Compute Engine

ユーザー側システム

Cloud Dataflow

Cloud Tasks

アーキテクチャ

入力 / データ化システム

ファイル連携

Page 38: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

KPI 基盤

App Engine

Cloud Functions

BigQueryCloud Pub/Sub

ロギング / エラー通知

Stackdriver

Cloud Storage

Cloud Firestore

自動化エンジン

Compute Engine

ユーザー側システム

Cloud Dataflow

Cloud Tasks

アーキテクチャ

入力 / データ化システム

Page 39: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

KPI 基盤

App Engine

Cloud Functions

BigQueryCloud Pub/Sub

ロギング / エラー通知

Stackdriver

Cloud Storage

Cloud Firestore

自動化エンジン

Compute Engine

ユーザー側システム

Cloud Dataflow

Cloud Tasks

アーキテクチャ

入力 / データ化システム

Page 40: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

KPI 基盤

App Engine

Cloud Functions

BigQueryCloud Pub/Sub

ロギング / エラー通知

Stackdriver

Cloud Storage

Cloud Firestore

自動化エンジン

Compute Engine

ユーザー側システム

Cloud Dataflow

Cloud Tasks

アーキテクチャ

入力 / データ化システム

Page 41: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

入力 / データ化システム

Page 42: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

入力データ化システム

KPI 基盤

BigQueryCloud Pub/Sub

ロギング / エラー通知

Stackdriver

自動化エンジン

Compute Engine

ユーザー側システム

Cloud Dataflow

App Engine

Cloud Functions

Cloud Storage

Cloud Firestore

Cloud Tasks

入力 / データ化システム

Page 43: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

● 非同期実行

● 定期実行

● デプロイ

● IP アドレス制限

● トラフィック分割

● オートスケール

新規開発で検討しなければならないこと

Page 44: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

● 非同期実行 Cloud Tasks

● 定期実行 App Engine Cron

● デプロイ gcloud app deploy コマンド

● IP アドレス制限 App Engine ファイア ウォール

● トラフィック分割 Traffic Splitting

● オートスケール ほぼ設定不要

新規開発で検討しなければならないこと

App Engine

Page 45: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

非同期実行 - Cloud Tasks

● 最低一回の実行を保証

● http status 200 系以外が返った場合はリトライ

○ リトライ回数の設定なども可能

Cloud Tasks

Page 46: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

定期実行 - App Engine Cron

● cron.yaml で設定

● gcloud app deploy cron.yaml で反映

cron:- description: "日次バッチ" url: /tasks/summary schedule: every 24 hours

App Engine

Page 47: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

デプロイ - gcloud app deploy コマンド

● Google Cloud SDK をインストールして設定

● プロジェクト ルートに yaml ファイルを置く

runtime: nodejs10service: default

App Engine

Page 48: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

IP アドレス制限 - App Engine ファイア ウォール

注意点

● GCP サービス間の通信もブロックされることがある

● Cloud Tasks は内部的に URL フェッチ サービスを使っているため、

URL フェッチ サービスの IP アドレスを許可する必要がある

● Cloud Pub/Sub はグローバルなサービスであるため、

ホワイトリスト追加はできない

=> Cloud Functions、 Cloud Tasks 経由にすることで解決しました

Cloud Storage

Cloud Functions

App Engine

Cloud Tasks

App Engine

Cloud Pub/Sub

Cloud Storage

Page 49: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

トラフィック分割 - Traffic Splitting

● 複数バージョンのインスタンスを同時に動かせる

● IP アドレスや Cookie でトラフィックを分割できる

● 管理画面から前のインスタンスのバージョンにロールバックすることも簡単

App Engine

Page 50: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

オートスケール

スタンダード環境 or フレキシブル環境

可能な限りスタンダード環境を使う

○ サンドボックス環境で実行される

○ デプロイやスケーリングが高速

詳しい説明は割愛

○ 公式ドキュメント参照

https://cloud.google.com/appengine/docs/flexible/java/flexible-for-standard-users?hl=ja

Page 51: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

フレキシブル環境を使うパターン①

● インスタンスを VPC ネットワークに紐づける

● Cloud Memorystore は VPC リソースなので、Cloud Memorystore を使いた

い場合も該当する

● 今回は、AWS 上の社内サービスと VPN 接続したかったので、 フレキシブル環境を使用

○ 現在は Serverless VPC Access を使えば、スタンダード環境から VPC リソースにアクセス可能。

● 今は US のみだが、Tokyo リージョンに来たら乗り換えたい https://cloud.google.com/vpc/docs/configure-serverless-vpc-access?hl=ja

Page 52: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

フレキシブル環境を使うパターン②

● CPU やメモリを消費する処理

● 特定のライブラリを使用する => 別サービスに切り出して Docker を使う

○ 現在は、Cloud Run を使うことでスタンダード環境と同じような

スケーラビリティを保ちつつ、Docker イメージを使った

柔軟な構成にすることができます。

App EngineCloud Functions

Cloud Storage Cloud Tasks App EngineCloud Tasks

Flexible Environment- 画像変換サービス-

Page 53: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

データベース

Page 54: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

データベース

KPI 基盤

BigQueryCloud Pub/Sub

ロギング / エラー通知

Stackdriver

自動化エンジン

Compute Engine

ユーザー側システム

Cloud Dataflow

App Engine

Cloud Functions

Cloud Storage

Cloud Firestore

Cloud Tasks

入力 / データ化システム

Page 55: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

なぜ Cloud Firestore を採用したか

● Google App Engine はオートスケールする

● データベースのスケールがボトルネックになるのは避けたい

○ Cloud Datastore は有力な選択肢の一つ

○ Cloud Firestore は Cloud Datastore の次期メジャー バージョン

○ 公式ドキュメント参照: https://cloud.google.com/datastore/docs/firestore-or-datastore?hl=ja

Cloud Firestore

Page 56: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

Cloud Firestore における DB 設計

● 複数のフィールドに対するクエリに複合インデックスを作成する

○ インデックスを作成せずに複合クエリを実行するとエラーになる

● 関連をサブ コレクションに持つことができる

● サブ コレクションに対して、コレクションをまたいだクエリを発行できなかった

○ 全てのドキュメントに対してクエリを発行したい場合は、

ルート コレクションにする必要があった

○ 現在は Collection Group を使えばサブ コレクションにもクエリを実行できる

Cloud Firestore

Page 57: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

サブ コレクションを使う場面

サブ コレクションにすることで、

複合インデックスを作成せずに関連を絞り込める

Cloud Firestore

db.collection ('users').doc ('Kida').collection ('posts').orderBy ('postedAt')=> 複合インデックス不要

db.collection ('posts').where ('user', '==', 'Kida').orderBy ('postedAt')=> posts コレクションの user と postedAt フィールドに複合インデックスが必要

例)特定のユーザーの投稿を投稿時間の順に取得するケース

Page 58: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

Cloud Firestore における DB 設計

SQL のような COUNT 関数はない

● ドキュメントをガバっと取ってきてカウントすることはできる

● 分散カウンタを使う

○ 1 ドキュメントあたり 1 秒間に約 1 回しか更新できない

○ カウンタ用のドキュメントを複数用意して、ランダムにインクリメントする

○ 全ドキュメントを取得して合計を計算する

● FieldValue.increment()を使う

● v1.1.0 でリリースされた

● 要件によっては、Redis などでカウントするのもあり

Cloud Firestore

Page 59: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

ロギング / エラー通知

Page 60: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

KPI 基盤

App Engine

Cloud Functions

BigQueryCloud Pub/Sub

ロギング / エラー通知

Stackdriver

Cloud Storage

Cloud Firestore

自動化エンジン

Compute Engine

ユーザー側システム

Cloud Dataflow

Cloud Tasks

ロギング・エラー通知

入力 / データ化システム

Page 61: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

StackdriverStackdriver Logging

● 標準出力するだけでログを蓄積できる

Stackdriver Error Reporting

● 近いエラーをグルーピングしてくれる

● 同じエラーを何度も通知しない

● GCP Console からステータス変更

● メール通知できる

○ Gmail のフィルタ機能で Slack 通知も可能

Stackdriver

Page 62: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

連携システム

Page 63: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

KPI 基盤

App Engine

Cloud Functions

BigQueryCloud Pub/Sub

ロギング / エラー通知

Stackdriver

Cloud Storage

Cloud Firestore

自動化エンジン

Compute Engine

ユーザー側システム

Cloud Dataflow

Cloud Tasks

連携システム

入力 / データ化システム

Page 64: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

自動化エンジン - Compute Engine

少しずつ自動化していく

※Web API として連携

請求書画像とオペレーターの入力データのセットを学習

Page 65: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

KPI 基盤

● アプリケーションから Cloud Pub/Sub 経由でログを送信

● Tableau で可視化

App Engine BigQueryCloud Pub/Sub Cloud Dataflow

Tableau

Page 66: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

GCP サーバーレスで

得られたメリット

Page 67: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

GCP サーバーレス採用の経緯

課題

運用負荷を下げ、本質的な機能の開発に集中したい

チャレンジすること自体に価値があり、

今後の技術選択の幅を増やすことができる

導入の背景

本気で使わないと分からない

昨年から社内でマルチクラウドを推進 参照 https://www.slideshare.net/ShimpeiNagai/gce-sansan

Page 68: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

初期構築コスト

運用コストが削減 本質的な機能の

開発に集中できた

GCP サーバーレスで得られたメリット

デプロイ

オートスケール非同期処理

定期実行

ファイア ウォール

トラフィック分割

ロギング / エラー通知

Page 69: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

既存システムとの比較

名刺データ化システム

アプリケーション エンジニア複数名 / 定常的に運用業務あり

請求書データ化システム

アプリケーション エンジニア 1 名 / 運用業務なし

サーバレス

※ 処理量が異なるので、あくまで参考になります

Page 70: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

コスト最適化

● 新規事業 = サーバー費用などのコストもなるべく抑えたい

● Google App Engine はインスタンスが 0 台までスケールイン

○ コスト管理の手間も削減して最適化

Page 71: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

今後やりたいこと

Page 72: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

Cloud AutoML による請求書分類

現状、以下のような分類が存在する○ 振込先が海外の口座

○ 口座振替(引き落とし)

○ その他

振込先:国内

振込先:海外

口座振替(引き落とし)

・・・ その他

現状オペレータによる仕分け

Cloud AutoML を活用できないか

Page 73: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

● Node.js クライアント ライブラリを使ってアクセスする

● 書き込み、読み取りの際にただのオブジェクトになってしまう

○ TypeScript を使っている旨味を享受しづらい

● クライアント ライブラリをラップして set(), update() などの引数に

型を指定できるようにしているが、少し煩雑になっている

● リポジトリ層のようなレイヤーを導入して、ドメイン オブジェクトとのマッピング

などを模索中

Cloud Firestore まわりの実装

Cloud Firestore

Page 74: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

社内での GCP 普及活動

チャレンジすること自体に価値があり、

今後の技術選択の幅を増やすことができる

● プロジェクトで閉じてしまっては意味がない

● 得られた知見を社内で共有し、

全社的に技術選択の幅を増やす

Page 75: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

Sansan のデータ化ノウハウを活かした、新たなサービスの創出にチャ

レンジする仲間を募集しています!!

We are hiring!

Page 76: 少数チームによる高速な事業立ち上げ GCP サービ …...D2-3-S03: GCP サーバーレス サービスと Sansan データ化技術〜 少数チームによる高速な事業立ち上げ

Enjoy GCP!!